【问题标题】:I want to find the dual of a constraint in cplex我想在 cplex 中找到一个约束的对偶
【发布时间】:2018-10-08 15:12:16
【问题描述】:

下面给出的约束的对偶方法是什么:

    forall(t in tree, p in Pattern, m in Machine) Constraint1:
    TreeCutTime[t]>=BatchCutTime[p][m] - 1000(1- 
    p.BatchSetup[t]*BatchSelected[p][m])

where, 
Range of t = 1..10
Range of m = 1..2
Pattern = <1 [1 0 0 0 0 0 0 0 0 0], 5,5> and so on
BatchSelected= [1 0 0 0 0 0 0 0 0 0] and so on.

【问题讨论】:

    标签: cplex opl


    【解决方案1】:

    让我从 OPL 目录中的 volsay 示例中举一个小示例。

    dvar float+ Gas;
    dvar float+ Chloride;
    
    
    maximize
      40 * Gas + 50 * Chloride;
    subject to {
      ctMaxTotal:     
        Gas + Chloride <= 50;
      ctMaxTotal2:    
        3 * Gas + 4 * Chloride <= 180;
      ctMaxChloride:  
        Chloride <= 40;
    }
    
    execute
    {
    writeln(ctMaxTotal.dual);
    writeln(ctMaxTotal2.dual);
    writeln(ctMaxChloride.dual);
    
    }
    

    给了

    // solution (optimal) with objective 2300
    10
    10
    0
    

    【讨论】:

    • 你能举个例子来说明我在问题中提到的 3D 约束的对偶吗?
    【解决方案2】:

    使用 3D 你只需要索引:

    dvar float+ Gas[1..2][1..2][1..2];
    dvar float+ Chloride[1..2][1..2][1..2];
    
    dvar float obj;
    maximize
     obj; 
    subject to {
    ctObj:obj==sum(i,j,k in 1..2 )(40 * Gas[i,j,k])  + sum(i,j,k in 1..2 ) (50 * Chloride[i,j,k]);
    
      forall(i,j,k in 1..2) ctMaxTotal:     
        Gas[i,j,k] + Chloride[i,j,k] <= 50;
      forall(i,j,k in 1..2 )ctMaxTotal2:    
        3 * Gas[i,j,k] + 4 * Chloride[i,j,k] <= 180;
      forall(i,j,k in 1..2 ) ctMaxChloride:  
        Chloride[i,j,k] <= 40;
    }
    
    execute
    {
    writeln("Chloride=",Chloride);
    writeln("Gas=",Gas);
    writeln("dual=",ctMaxTotal[1][2][1].dual);
    }
    

    【讨论】:

      猜你喜欢
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多