微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

理解多背包问题 IBM CPLEX 的问题

如何解决理解多背包问题 IBM CPLEX 的问题

我在 OPL 示例中的 IBM CPLEX Studio 中找到了这个示例。但是,我无法理解程序中的这两行。使用 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);

解决方法

如果 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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。