【问题标题】:multi-capacities Knapsack in CPLEXCPLEX 中的多容量背包
【发布时间】:2017-09-05 10:29:12
【问题描述】:

我遇到了背包问题,需要通过最小化成本将一组物品中的最大数量的多个物品放入一个箱子中。我能够解决 CPLEX 中的优化问题。

但是,当问题由两个箱(容量不同)组成时,我发现在 CPLEX 中实施时遇到困难。

问题:

Bin = [B1, B2] 
Capacity = [7,5]

Item = [I1, I2, I3, I4]
Weight = [6,3,1,4]
Price = [2,8,2,4]

目标是放置最大数量的物品并最小化总价。

如何在 CPLEX 中实现这个客观问题?

下面是我的代码sn-p:

// ITEMS
int n=4; // no of items
range items = 1..n; // range of items
int p[items] = [2,8,2,6]; //price
int w[items] = [6,3,1,4]; //weight

// BINS
int m=2; // no of bins
range bins=1..m; // range of bin
int capacity[bins] = [7,5]; // capacity of each bin

dvar boolean x[items][bins]; 

// model ; max the profit
maximize sum(i in items, j in bins) p[i]*x[i][j];

subject to {
    forall (j in bins)
        cons1 : sum(i in items) w[i]*x[i][j] <= capacity[j];
    forall (i in items)
        cons2 : sum(j in bins) x[i][j] == 1;    
} 

-谢谢

【问题讨论】:

    标签: optimization cplex knapsack-problem


    【解决方案1】:

    如果你添加

    assert sum(i in items) w[i]<=sum(b in bins) capacity[b];
    

    那么这个断言就被违反了,这就解释了为什么你没有得到解决方案。您没有足够的垃圾箱容量。

    但是如果你转身:

    int capacity[bins] = [7,5]; // capacity of each bin
    

    进入

    int capacity[bins] = [7,7]; // capacity of each bin
    

    然后你会得到一个解决方案。

    【讨论】:

    • 谢谢亚历克斯先生。首先,我没有考虑到我们必须有足够的总容量来容纳所有项目。
    【解决方案2】:

    您可以在CPLEX_Studio1271\opl\examples\opl\knapsack 中找到一个背包示例。

    【讨论】:

    • 是的,我已经完成了那个例子。该背包示例由一个箱子和多个物品组成。但我正在尝试为多个垃圾箱(具有不同容量)和多个项目修改它。到目前为止,我无法获得任何继续进行的提示。 -谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 2016-03-04
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多