目录
lingo相较于matlab语法简单更容易上手,且运行速度比matlab快。如果有对lingo不了解的同学可以看以下视频了解
Lingo(2):入门篇——集合 vs 矩阵工厂_哔哩哔哩_bilibili
1题目
现有两个临时料场,日储量各20吨
工地位置坐标及日需求量如下表所示:
1 | 2 | 3 | 4 | 5 | 6 | |
横坐标 | 1.25 | 8.75 | 0.5 | 5.75 | 3 | 7.25 |
纵坐标 | 1.25 | 0.75 | 4.75 | 5 | 6.5 | 7.25 |
日需求量 | 3 | 5 | 4 | 7 | 6 | 11 |
该在那个位置建立料场吨千米数最小?
2解答过程
解 设工地的坐标为(ai,bi)(i=1,2,3..6),水泥日用量为d(i),从第j个料场运往第i个工地的水泥重为xij吨,设料场的坐标为(xj,yj)(j=1,2),每个工地所需要的水泥重为di(i=1,2..6)
需要使总的吨千米数最小则可以列出目标函数为:
料场的日存储量为20吨,可列出约束条件1:
工地的需求量为di,可列出约束条件2为:
由于每个料场所需要的吨数为大于零的数,可列出约束条件3:
3lingo求解
model:
!创建矩阵;
sets:
liaochang/1..2/:x1,y1;
gongdi/1..6/:a,b,d;
zuobiao(gongdi,liaochang):x;
endsets
!输入数据;
data:
a=1.25,8.75,0.5,5.75,3,7.25;
b=1.25,0.75,4.75,5,6.5,7.25;
d=3,5,4,7,6,11;
enddata
!列出目标函数及表达式;
min = @sum(zuobiao(i,j):x(i,j)*@sqrt((a(i)-x1(j))^2+(b(i)-y1(j))^2));
@for(gongdi(i):@sum(liaochang(j):x(i,j))=d(i));
@for(liaochang(j):@sum(gongdi(i):x(i,j))<=20);
end
4求解的结果
吨千米最小:82.82565
两个料场坐标:料场1(3.254881, 5.652335),料场2(7.25,7.25)
使得吨千米数最小的运输方案为:
料场1 | 料场2 | |
工地1 | 3 | 0 |
工地2 | 0 | 5 |
工地3 | 4 | 0 |
工地4 | 7 | 0 |
工地5 | 6 | 0 |
工地6 | 0 | 11 |