【问题标题】:Goal Programming in CplexCplex 中的目标编程
【发布时间】:2016-03-19 22:30:57
【问题描述】:

假设我有两个目标。我想非常接近地实现这个目标:

i=1) profit goal: 12???? + 9y ≥ 125
i=2) cost-goal: 5???? + 7y ≤ 50

在文献中,您可以通过插入代表偏差的变量来进行目标规划。假设变量 ai 是高于目标值与目标 I 的偏差,而 bi 是低于目标值与目标 I 的偏差。您会得到以下约束:

12???? + 9y -a1 + b1 = 125
5???? + 7y -a2 + b2 = 50

在最后一步中,您创建目标函数,您可以在其中对每个偏差使用惩罚因子 (p) 来惩罚偏差。

minimize: pd1*b1 + pa1*a1 + pd2*b2 + pa2*a2

我正在使用 Cplex API,我看到您可以使用 Cplex-Goals:

IloCplex.Goal

现在我有以下问题:

  1. 是否有可能使用 Cplex API 以方便的方式解决此问题,还是我必须自己实现此过程?

  2. 如果可能,我如何获得最终的目标值:12???? + 9y 和 5???? + 7 岁?

【问题讨论】:

  • Cplex 目标用于控制分支,与目标编程无关。

标签: java optimization linear-programming cplex


【解决方案1】:

是的,这绝对可以使用 CPLEX。事实上,通过引入 a1、a2、b1 和 b2,您已经完成了大部分所需的公式化。现在,您只需要创建一个 Cplex 模型对象,给它一个目标并解决它。 (你不需要IloCplex.Goal)只要解决一个直的LP。

看看这些 Java examples 中的任何一个,并将它们作为模板。

只需设置您的目标函数。 (pa0, pb1 等为常数)

 IloNumExpr obj = cplex.sum(cplex.prod(pa0, a[0]), 
                             cplex.prod(pa1, a[1]),
                             cplex.prod(pb0, b[0]),
                             cplex.prod(pb1, b[1])); 

    model.add(IloMinimize(env, obj));

然后,让 CPLEX 求解您的 LP,您可以简单地获得 a[0]、a[1]、b[0] 和 b[1] 的最佳值,以查看与目标的偏差。 (注意 a 或 b 中只有一个是正数。)使用cplex.getValues(x) 查询变量值。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    像这样: // 决策变量 dvar int x; dvar int y;

    //obj function 
    IloNumExpr obj = cplex.sum(cplex.prod(pa0, a[0]), 
                                 cplex.prod(pa1, a[1]),
                                 cplex.prod(pb0, b[0]),
                                 cplex.prod(pb1, b[1])); 
           model.add(IloMinimize(env, obj));
    
    // constraints
    subject to {
    
    12* x + 9*y -a1 + b1 <= 125;
    5* x + 7*y -a2 +b2 <= 50;
    
    }
    

    但实际上不起作用。请帮忙! =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多