【数学建模lingo学习】lingo实现0-1规划问题2:背包问题

lingo语言相较于matlab更加简洁,且求解速度更快,如果有不了解lingo语言的小伙伴可以通过以下视频进行学习:

 

Lingo(1):基础篇——基本界面与解方程_哔哩哔哩_bilibili

下面我将分享一道例题来帮助大家更好地熟悉和练习使用lingo语言求解规划问题。

有10件货物要从甲地运送到乙地,每件货物的重量(单位∶吨)和利润(单位:元)如下表所示。
 

物品 1 2 3 4 5 6 7 8 9 10
重量(t) 6 3 4 5 1 2 3 5 4 2
利润(元) 540 200 180 350 60 150 280 450 320 120

由于只有一辆最大载重为30t的货车能用来运送货物,所以只能选择部分货物进行运送。
要求确定运送哪些货物,使得运送这些货物的总利润最大。
 

解 设pi(i=1,2,..10)为第i个物品的利润,wi(i=1,2,..10)为第i个物品的重量,xi(i=1,2,..10)的取值及定义为:

由题意知需要使总利润最大,可得目标函数为:

车辆最大载重为30t,可得约束条件1

由于xi(i=1,2,..10)的取值只有0和1,则可得约束条件2:

使用lingo求解结果:

model:
!创建矩阵;
sets:
factory/1..10/:x,p,w;
endsets

!输入数据;
data:
p=540,200,180,350,60,150,280,450,320,120;
w=6,3,4,5,1,2,3,5,4,2;
enddata

!列出目标函数和约束条件求解,注意,两个变量相乘需要使用*来连接,否则会报错;
max=@sum(factory(i):x(i)*p(i));
@sum(factory(i):w(i)*x(i))<=30;
@for(factory(i):@bin(x(i)));
end

利润最大为:2410元

需要运送的物品情况为,0表示不运送该物品。1表示运送该物品

物品 是否运送
1 1
2 1
3 0
4 1
5 0
6 1
7 1
8 1
9 1
10 1

非常感谢各位小伙伴看到这里,如果觉得有用的话给我点个赞吧,谢谢各位靓仔靓女的支持~

你可能感兴趣的:(学习)