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