【问题标题】:Issue in understanding Multiple Knapsack Problem IBM CPLEX理解多背包问题 IBM CPLEX 的问题
【发布时间】:2021-08-14 13:30:57
【问题描述】:

我在 IBM CPLEX Studio 的 OPL 示例中找到了这个示例。但是,我无法理解程序中的这两行。使用 int 决策变量而不是 boolean 是不是一种特殊的方式?

int MaxValue = max(r in Resources) Capacity[r];
dvar int Take[Items] in 0..MaxValue;

为什么要找到资源容量的最大值?有人可以解释一下它背后的逻辑。我是线性编程的新手,但对此感到好奇。我相信在这种情况下我应该使用布尔变量。提前致谢。

int NbItems = ...;
    int NbResources = ...;
    range Items = 1..NbItems;
    range Resources = 1..NbResources;
    int Capacity[Resources] = ...;
    int Value[Items] = ...;
    int Use[Resources][Items] = ...;
    int MaxValue = max(r in Resources) Capacity[r];
    
    
    dvar int Take[Items] in 0..MaxValue;
    
    maximize
      sum(i in Items) Value[i] * Take[i];
      
    subject to {
      forall( r in Resources )
        ct:
          sum( i in Items ) 
            Use[r][i] * Take[i] <= Capacity[r];
    }
    
    
    tuple TakeSolutionT{ 
        int Items; 
        int value; 
    };
    {TakeSolutionT} TakeSolution = {<i0,Take[i0]> | i0 in Items};
    execute{ 
        writeln(TakeSolution);

【问题讨论】:

    标签: cplex knapsack-problem opl simplex


    【解决方案1】:

    如果 MaxValue 为 1 则

    dvar int Take[Items] in 0..MaxValue;
    

    相当于

    dvar boolean Take[Items];
    

    同样

    dvar int x in 0..2;
    

    表示 x 是 0,1 或 2

    结果与

    相同
    dvar int x;
    
    subject to
    {
      0<=x<=2;
    }
    

    【讨论】:

    • 感谢 Alex 的回复。我非常尊重您在 CPLEX 的工作,我会彻底关注您的工作。我有一个后续问题来理解这个概念。该步骤需要什么来声明最大值?有没有更简单的解释?再次感谢广告
    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2011-04-23
    • 2019-10-03
    • 2019-03-31
    • 2010-12-22
    • 2022-01-25
    相关资源
    最近更新 更多