lingo相较于matlab实现规划问题更加简洁,但无法实现多目标规划,如果不了解lingo可以去看以下视频了解:
Lingo(1):基础篇——基本界面与解方程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1CT4y177qS?spm_id_from=333.337.search-card.all.click那么废话不多说,我在这里分享一道例题及解法:
投料问题:
现有两个临时料场坐标分别为:A(5,1),B(2,7);日储量各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 |
试制定每天的供应计划,即从两料场分别向各工地运送多少吨水泥,使总的吨千米数最小。
解 设从第j个料场(j=1,2)送往第i(i=1,2,3...6)个工地的所需的水泥重量为xij吨,设工地的横坐标ai(i=1,2,3...6),纵坐标为bi(i=1,2,3...6),料场的横坐标为xj(j=1,2),纵坐标为yj(j=1,2)每个料场的日需求量为di(i=1,2,3...6)
根据题目分析需要使总的吨千米数最小,则可设目标函数为:
由于每个工地的日需求量都有不同,可以得约束条件1:
由于两个料场的日存储量都为20吨,则有约束条件2:
由于往每个料场运送的吨数都为大于零的数,则有约束条件3:
lingo实现代码为
model:
!生成矩阵;
sets:
factory1/1..6/:a,b,d;
factory2/1..2/:x1,y1;
coo(factory1,factory2):x;
endsets
!输入题目中数据;
data:
!a,b表示工地坐标;
a=1.25,8.75,0.5,5.75,3,7.25;
b=1.25,0.75,4.75,5,6.5,7.25;
!x,y表示料场坐标;
x1=5,2;
y1=1,7;
!d表示工地日需求量;
d=3,5,4,7,6,11;
enddata
!列出表达式求解;
!目标函数;
min = @sum(coo(i,j):@sqrt((a(i)-x1(j))^2+(b(i)-y1(j))^2)*x(i,j));
!约束条件1;
@for(factory1(i):@sum(factory2(j):x(i,j))=d(i));
!约束条件2;
@for(factory2(j):@sum(factory1(i):x(i,j))<=20);
end
运行结果:
吨千米数最小为: 135.2815文章来源:https://www.toymoban.com/news/detail-597574.html
需要往各个工地运送的物料如下表所示:文章来源地址https://www.toymoban.com/news/detail-597574.html
料场1 | 料场2 | |
工地1 | 3 | 0 |
工地2 | 5 | 0 |
工地3 | 0 | 4 |
工地4 | 7 | 0 |
工地5 | 0 | 6 |
工地6 | 1 | 10 |
到了这里,关于【数学建模lingo学习】lingo解决规划问题1:投料问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!