理解多背包问题 IBM CPLEX 的问题
Posted
技术标签:
【中文标题】理解多背包问题 IBM CPLEX 的问题【英文标题】:Issue in understanding Multiple Knapsack Problem 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);
【问题讨论】:
【参考方案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 的工作,我会彻底关注您的工作。我有一个后续问题来理解这个概念。该步骤需要什么来声明最大值?有没有更简单的解释?再次感谢广告以上是关于理解多背包问题 IBM CPLEX 的问题的主要内容,如果未能解决你的问题,请参考以下文章