使用LINGO来解决0/1背包算法问题

1.问题说明

  0/1背包问题:我们有n种物品,物品j的重量为wj,价格为pj。我们假定所有物品的重量和价格都是非负的。背包所能承受的最大重量为W。如果限定每种物品只能选择0个或1个,则问题称为0-1背包问题。(摘自百度百科)

  例子:

假设有10个物品,重量和价格分别如下图所示,背包承受最大重量W=2000,每种物品能选择放或者不放,求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。

  

2.数学模型

  

3.lingo代码实现

需要用到的特性是lingo的集合,数据,函数

 

4.效果

点击solve按钮,即可求得所有的未知数。

由图可知,isok为1的数的号码,为了获得最大值我们所需要放入背包的物品是:3号,6号,7号,8号,10号。

此时的背包内物品的总重量是1840,总价值是495.

 

源码地址:https://files.cnblogs.com/files/lizhijian/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E7%AE%97%E6%B3%95.rar

 

感谢阅读

 

posted @ 2018-03-09 11:24  灰主流  阅读(790)  评论(0编辑  收藏  举报