SAP ABAP 使用GENIOS求解线性规划问题的简单例子

这篇具有很好参考价值的文章主要介绍了SAP ABAP 使用GENIOS求解线性规划问题的简单例子。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主要内容来自Operations Research & ABAP ,结合我遇到的需求,做了一些修改。

需求:有BOX1和BOX2两种箱子,分别能包装不同数量的A物料和B物料,给出若干数量的A, B物料,怎样包装可以使箱子数最少?

线性规划有助于解决类似问题。

以下是一个示例程序,包含必要的注释,

*&---------------------------------------------------------------------*
*& Report YTEST_LP1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ytest_lp1.

*BOX1 箱子可以装2个A物料 1个B物料, BOX2箱子可以装1个A物料 3个B物料, 现有10A 11B, 如何包装箱子最少?
*假设最终结果用到了X个 BOX1箱子, Y个BOX2箱子,问题可以写成如下形式
* minimize X + Y
* subject to : 2X + 1Y >= 10
*              X + 3Y >= 11
*              X >= 0
*              Y >= 0
DATA:
  lr_model       TYPE REF TO cl_genios_model, "problem instance
  lr_objective   TYPE REF TO cl_genios_objective, "objective function
  lr_environment TYPE REF TO cl_genios_environment,
  lr_x           TYPE REF TO cl_genios_variable, "variables
  lr_y           TYPE REF TO cl_genios_variable,
  lr_constraint  TYPE REF TO cl_genios_linearconstraint,
  lr_solver      TYPE REF TO cl_genios_solver,
  ls_result      TYPE genioss_solver_result,
  ls_variable    TYPE genioss_variable,
  lt_variables   TYPE geniost_variable,
  lv_value       TYPE genios_float,
  lv_name        TYPE string. "变量名

lr_environment = cl_genios_environment=>get_environment( ).
lr_model = lr_environment->create_model( 'PRIORIZATION' ). 
*定义离散变量,因为箱子是离散的定义连续变量,因为SIMP只支持连续变量
lr_x = lr_model->create_variable( iv_name = 'X'
  iv_type = if_genios_model_c=>gc_var_continuous ).
lr_y = lr_model->create_variable( iv_name = 'Y'
  iv_type = if_genios_model_c=>gc_var_continuous ).
"下面设置目标函数,取满足条件的(X+Y)最小值,现实中也可能有不同的系数,比如X的价格是2,Y是1,那么在这里做相应调整
lr_objective = lr_model->create_objective( if_genios_model_c=>gc_obj_minimization ).
lr_objective->add_monom( io_variable = lr_x iv_coefficient = 1 ). lr_objective->add_monom( io_variable = lr_y iv_coefficient = 1 ).
* 定义线性约束c1: 2X + 1Y >= 10 lr_constraint = lr_model->create_linearconstraint( iv_name = 'c1' iv_type = if_genios_model_c=>gc_con_greaterorequal iv_righthandside = 10 ). lr_constraint->add_monom( io_variable = lr_x iv_coefficient = 2 ). lr_constraint->add_monom( io_variable = lr_y iv_coefficient = 1 ). * 定义线性约束c2: 1X + 3Y >= 11 lr_constraint = lr_model->create_linearconstraint( iv_name = 'c2' iv_type = if_genios_model_c=>gc_con_greaterorequal iv_righthandside = 11 ). lr_constraint->add_monom( io_variable = lr_x iv_coefficient = 1 ). lr_constraint->add_monom( io_variable = lr_y iv_coefficient = 3 ). * 定义线性约束c3: X >= 0 lr_constraint = lr_model->create_linearconstraint( iv_name = 'c3' iv_type = if_genios_model_c=>gc_con_greaterorequal iv_righthandside = 0 ). lr_constraint->add_monom( io_variable = lr_x iv_coefficient = 1 ). * 定义线性约束c4: Y >= 0 lr_constraint = lr_model->create_linearconstraint( iv_name = 'c4' iv_type = if_genios_model_c=>gc_con_greaterorequal iv_righthandside = 0 ). lr_constraint->add_monom( io_variable = lr_y iv_coefficient = 1 ). lr_solver = lr_environment->create_solver( 'SIMP' ). lr_solver->load_model( lr_model ). ls_result = lr_solver->solve( ). * Get the result IF ls_result-solution_status = if_genios_solver_result_c=>gc_optimal OR ls_result-solution_status = if_genios_solver_result_c=>gc_abortfeasible. lt_variables = lr_model->get_variables( ). LOOP AT lt_variables INTO ls_variable. lv_name = ls_variable-variable_ref->gv_name. lv_value = ls_variable-variable_ref->get_primalvalue( ). DATA: lv_int TYPE P LENGTH 10 DECIMALS 2. lv_int = lv_value. WRITE: /,lv_name,' = ',lv_int. ENDLOOP. ENDIF. lr_environment->destroy_solver( 'SIMP' ). lr_environment->destroy_model( 'PRIORIZATION' ).

 文章来源地址https://www.toymoban.com/news/detail-591382.html

运行程序,可以看到结果

X = 3.80
Y = 2.40

示例中的Solver SIMP 仅支持连续变量,对这个需求显然不合适,因为箱子不应该为小数。如果想使用离散变量,就需要换成其他Solver比如MILP,可惜我的系统无法使用MILP,所以不能测试。据说SAP APO或SAP SCM Optimizer可以满足更复杂的需求。

 

到了这里,关于SAP ABAP 使用GENIOS求解线性规划问题的简单例子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单纯形法求解线性规划问题示例

    今天被一个人问到了一个线性规划问题,这个问题我印象中只有在数学建模中会出现,于是就研究了一下,这里做一个记录。 线性规划问题如下: max z = 90 x 1 + 70 x 2 s . t . { x 1 + x 2 ≤ 16 3 x 1 + 2 x 2 ≤ 36 5 x 2 ≤ 65 x 1 , x 2 ≥ 0 (1) text{max} quad z = 90x_1 + 70x_2 \\\\ begin{align} s.t.left

    2024年02月06日
    浏览(41)
  • C# 随机法求解线性规划问题 蒙特卡洛

    线性规划问题: max=3 x1+2 x2 x1+2 x2=5 2 x1+x2=4 4 x1+3 x2=9 x1=0 x2=0 正确的结果:x1=1.5; x2=1, max z=6.5

    2024年02月13日
    浏览(40)
  • python数学建模--线性规划问题案例及求解

    本博客参考: 《python数学实验与建模》 《MATLAB数学建模经典案例实战》 m a x   z = 8 x 1 − 2 x 2 + 3 x 3 − x 4 − 2 x 5 { x 1 + x 2 + x 3 + x 4 + x 5 ≤ 400 x 1 + 2 x 2 + 2 x 3 + x 4 + 6 x 5 ≤ 800 2 x 1 + x 2 + 6 x 3 ≤ 200 x 3 + x 4 + 5 5 ≤ 200 0 ≤ x i ≤ 99 , i = 1 , 2 , 3 , 4 x 5 ≥ − 10 max z=8x_1-2x_2+3x_3-x_

    2023年04月13日
    浏览(44)
  • 使用COPT求解混合整数线性规划

    使用 from copt import * 引入模型 import coptpy as cp env = Envr() 创建优化模型,返回一个Model对象 mdl=env.ccreateModel(\\\"name\\\") 添加一个决策变量: mdl.addVar(lb=0.0, ub=COPT.INFINITY, obj=0.0, vtype=COPT.CONTINUOUS, name=\\\"\\\", column=None) Lb : 变量的下界。可选参量,默认为0.0。 Ub : 变量的上界。可选参量

    2024年02月06日
    浏览(52)
  • ✨使用Python进行线性规划求解,高端操作亮瞎你的双眼(文末技术彩蛋)

    各位童鞋们大家好,我是小小明,前几天我给大家分享了一个SMT求解器z3,链接地址见: https://xxmdmst.blog.csdn.net/article/details/120279521 虽然SMT求解器很强大,能够解逻辑题、解数独、解方程、甚至解决逆向问题,但是有个缺点就是只能找出一个可行解,如果我想要找出可行解的

    2023年04月09日
    浏览(39)
  • lingo软件求解线性规划举例

      缺点,数据多时不好找 当变量有成千上万个时,而关心的非零解只是极少数,在当前窗口读解很麻烦。下面是读取非零解的窗口操作步骤: (1)缩小当前解的窗口(不是关闭!); (2)把鼠标点进模型所在窗口;

    2024年02月13日
    浏览(51)
  • OR-Tools的线性规划求解器入门——调用不同求解内核

    OR-Tools因其开源、可调用其他求解器、以及强大的CP求解器,在近几年受到了工业界的广泛关注,关于OR-Tools的CP求解组件的介绍,可以参考《OR-Tools的CP-SAT求解器入门案例》,本文主要介绍OR-Tools的另一块主要的内容 Linear Solver ,在一些问题上,OR-Tools自带的求解内核 GLOP 在线

    2024年01月17日
    浏览(45)
  • 【数学建模】Python+Gurobi求解非线性规划模型

    目录 1 概述 2 算例  2.1 算例 2.2 参数设置 2.3 Python代码实现 2.4 求解结果 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。 参考:(非线性规划Python)计及动态约束及节能减排环保要求的经济调度 2.1 算例 2.2 参数设置 求解NLP/非凸问题时,

    2024年02月09日
    浏览(47)
  • 线性规划问题及单纯形法-线性规划变标准形

    线性规划模型的标准形式 (1)目标函数为求极大值 (2)所有功能约束条件(非负条件除外),都是等式 (3)右端常数项为非负 (4)决策变量为非负 标准形转换方法 (1)目标函数值的转换 即在原有目标函数值前面加一个符号,当求出结果后,结果乘以一个负号。 (2)

    2024年02月06日
    浏览(46)
  • 线性规划问题

    线性规划是最优化问题的一种特殊情形,实质是从多个变量中选取一组合适的变量作为解,使得这组变量满足一组确定的线性式(约束条件),而且使一个线性函数(目标函数)达到最优。线性规划顾名思义,由两个关键的部分组成:线性和规划。 线性 如果一个函数L(x)满

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包