【问题标题】:How to create a multi-objective model with objective priority如何创建具有目标优先级的多目标模型
【发布时间】:2019-10-17 19:55:53
【问题描述】:

我正在尝试解决一个多目标问题,其中我必须最小化两个不同的目标,但其中一个目标优先于另一个目标。

为了解决问题和问题,我尝试使用两个目标函数的加权和。这里的问题是该方法找到了我不想要的两个问题之间的最小值。我想解决一个目标,然后,保持那个特定的价值,我想解决另一个问题。

【问题讨论】:

  • 下面的答案基本上是“仅链接”。我会保留the link here,以防它被删除。

标签: cplex opl


【解决方案1】:

CPLEX 12.9 版能够做到这一点:解决一个目标,确定其值,然后转到下一个目标。这是一个示例 LP:

Maximize multi-objectives
first: abstol=2
   x1
second: priority=-1
   x2
Subject to
   x1 + x2 = 10
General
   x1 x2
End

the release notesthese slides 中描述了此功能。

【讨论】:

    【解决方案2】:

    你可以使用 staticLex。

    int nbKids=200;
    float costBus40=500;
    float costBus30=400;
    float costBus50=625;
    
    dvar int+ nbBus40;
    dvar int+ nbBus30;
    dvar int+ nbBus50;
    
    dvar float cost;
    dvar float co2emission;
    
    minimize
      staticLex(cost,co2emission);
    
    subject to
    {
     cost==costBus40*nbBus40  +nbBus30*costBus30+nbBus50*costBus50;
     co2emission==nbBus50+nbBus40*1.1+nbBus30*1.2;
    
      40*nbBus40+nbBus30*30+nbBus50*50>=nbKids;
    }
    
    execute DISPLAY_After_SOLVE
    {
      writeln("The minimum cost is ",cost);
      writeln("CO2 emission is ",co2emission);
      writeln("We will use ",nbBus40," 40 seats buses ",nbBus30,
      " 30 seats buses and ", nbBus50," buses 50 seats");
    }
    

    给了

    The minimum cost is 2500
    CO2 emission is 4
    We will use 0 40 seats buses 0 30 seats buses and 4 buses 50 seats 
    

    我在 5 天前发布了此答案,但已被版主删除。

    https://www.ibm.com/developerworks/community/forums/html/topic?id=abac189a-0b99-4a08-bedf-78bbf919e14d查看小例子

    【讨论】:

      猜你喜欢
      • 2014-12-12
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多