1导语
lingo是一款用于解决规划问题的软件,可以求解线性规划,非线性规划等规划问题。如果有不了解lingo的小伙伴可以观看以下视频学习:
Lingo(1):基础篇——基本界面与解方程_哔哩哔哩_bilibili
2题目
某单位需要加工制作100套钢架,每套钢架长为2.9m,2.1m和1m的圆钢各一根。已知原料长为6.9m,问如何切割原材料可以使得使用的原材料最少。
3分析
解 假设从原料中分别切割2.9米,2.1m,1m的圆钢各一根,则需要100个原料,此时料头(将原料切割后剩下的部分)长度为0.9,以这个方案为最坏的方案。使用matlab枚举出所有可行的方案后,再根据每个方案列出目标函数和约束条件。
用matlab列出的所有方法如下:
方案1 | 方案2 | 方案3 | 方案4 | 方案5 | 方案6 | 方案7 | |
1m数量 | 0 | 1 | 1 | 2 | 4 | 4 | 6 |
2.1m数量 | 3 | 0 | 1 | 2 | 0 | 1 | 0 |
2.9m数量 | 0 | 2 | 1 | 0 | 1 | 0 | 0 |
由题意知需要使得使用的原材料最少则设按照第i个方案切割的原料数量为xi(i=1,2,3..7),则有目标函数:
由题意知,需要生产100套圆钢,依据上面三种切割方法得约束条件为:
4代码求解
matlab穷举所有方案:
clear,clc %清空命令行窗口和工作区
for i =0:6 %从原材料中切割出1米的钢管数量
for j=0:3 %从从原材料中切割出2.1米的钢管数量
for k=0:2 %从从原材料中切割出2.9米的钢管数量
%从原料上切割2.9m,2.1m,1m的钢管各一根时需要的原料长度为6m,且用6.9m的原料切割2.9m,
2.1m,1m钢管总长度不能大于6.9m
if i*1+j*2.1+k*2.9>=6 & i*1+j*2.1+k*2.9<=6.9
%列出各个方案的矩阵
disp([i,j,k])
end
end
end
end
lingo求解规划问题
model:
!创建矩阵;
sets:
factory/1..7/:x;
endsets
!列出目标函数和表达式;
min=@sum(factory(i):x(i));
x(1)+2*x(2)+x(7)>=100;
3*x(3)+2*x(4)+x(5)+x(7)>=100;
4*x(1)+x(2)+2*x(4)+4*x(5)+6*x(6)+x(7)>=100;
!规定整数时需要用循环挨个固定x为整数;
@for(factory(i):@gin(x));
end
5计算结果
需要钢管数量为:91根
非常感谢各位小伙伴看到这里,如果觉得有用给我点个赞吧,听说点赞的人一夜暴富~