数学建模 --- Lingo 钢管下料问题

马肤
这是懒羊羊

 题目:

原料钢管:每根19米

客户需求:4米50根,6米20根,8米15根

问题1:如何切割原料钢管剩余总余量最小?

方法1:直接摆数学公式。

model:
min = 3*x1 + x2 + 3*x3 + 3*x4 + x5 + x6 + 3*x7;
4*x1 + 3*x2 + 2*x3 + x4 + x5 > 50;
x2+2*x4+x5+3*x6 > 20;
x3+x5+2*x7 > 15;
@gin(x1);@gin(x2);@gin(x3);@gin(x4);@gin(x5);@gin(x6);@gin(x7);
end  

方法2:集合和循环方式

model:
sets:
pat/1..7/:x,f; 
pipe/1..3/:b;
link(pipe,pat):A;
endsets
data:
f = 3,1,3,3,1,1,3;
b = 50,20,15;
A = 4,3,2,1,1,0,0
0,1,0,2,1,3,0
0,0,1,0,1,1,2;
enddata
min = @sum(pat(i):(f(i)*x(i)));
@for(pipe(i):(@sum(pat(j):A(i,j)*x(j)))> b(i));
@for(pat(i):@gin(x(i)));
end

结果图:

问题2:客户需求增加5米10根,如何保证用到钢材根数最少?

model:
sets:
!四种钢管长度i;
pipe/1..4/:b,c;
!三种模式j;
pat/1..3/:x; 
!每根钢管生产4,5,6,8钢管数量;
link(pipe,pat):r;
endsets
data:
b = 50,10,20,15;
c = 4,5,6,8;
enddata
!求钢管数最小;
min = @sum(pat(i):x(i));
!客户需求;
@for(pipe(i):(@sum(pat(j):r(i,j)*x(j)))>b(i));
!余料不超过3m;
@for(pat(j):(@sum(pipe(i):r(i,j)*c(i)))16);
!取整;
@for(pat(i):@gin(x(i)));
@for(pipe(j):@for(pipe(i):@gin(r(i,j))));

结果图:

总根数最少为28,x的取值及其切割模式。


文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码