这个题目用lingo程序怎么做啊?请帮我把详细的lingo程序写出来。谢谢!!
.用长8米的角钢切割钢窗用料。每副钢窗含长1.5米的料2根,1.45米的2根,1.3米的6根,0.35米的12根,若需钢窗100副,问至少需切割8米长的角钢多少根?...
.用长8米的角钢切割钢窗用料。每副钢窗含长1.5米的料2根,1.45米的2根,1.3米的6根,0.35米的12根,若需钢窗100副,问至少需切割8米长的角钢多少根?
展开
1个回答
展开全部
思路:
第一步,求出切割模式,8m长能分成多少种有效切割方式L?其判断依据就是:每种切割方式的余料要小于0.35m,否则还可以切割出一块小的有效用料来。
第二步,假设第(i,j,k,s)种切割方法L(i,j,k,s),切割了x(i,j,k,s)根角钢,显然这种切割模式下的得到1.5m的料总数为x(i,j,k,s)*(i-1)根,此数应当大于200。注意:为了lingo程序表达的需要,在这里L(i,j,k,s)切割模式下1.5m的角钢为i-1根。
第三步,将所有的各种切割方法L下的x加和起来,则其和为优化目标,使之最小,求解之。
程序代码:
model:
sets:
aa/1..6/:an;!某种切割模式下,8m的角钢切完后,1.5m的料有an根(an=0~5共6种可能取值);
bb/1..6/:bn;!某种切割模式下,8m的角钢切完后,1.45m的料有bn根(bn=0~5共6种可能取值);
cc/1..7/:cn;!某种切割模式下,8m的角钢切完后,1.3m的料有cn根(cn=0~6共7种可能取值);
dd/1..23/:dn;!某种切割模式下,8m的角钢切完后,0.35m的料有dn根(dn=0~22共23种可能取值);
LL(aa,bb,cc,dd):L,x;
!L(i,j,k,s)代表这样一种切割模式:一根8m的角钢切完后,1.5m料切出i-1根,1.45m料切出j-1根,1.3m和0.35m类似,如果切割总长不超出8m,且余料不超出0.35m,则为有效切割,记L(i,j,k,s)=1,否则这种切割模式不能实现或者无效,记L(i,j,k,s)=0;
!这里的x(i,j,k,s)代表第L(i,j,k,s)种切割模式下切割8m角钢的数目;
endsets
min=@sum(LL:x);
@for(aa(i):an(i)=i-1);
@for(bb(j):bn(j)=j-1);
@for(cc(k):cn(k)=k-1);
@for(dd(s):dn(s)=s-1);
@for(aa(i):@for(bb(j):@for(cc(k):@for(dd(s):L(i,j,k,s)=@if(((an(i)*1.5+bn(j)*1.45+cn(k)*1.3+dn(s)*0.35)#gt#7.65)#and#((an(i)*1.5+bn(j)*1.45+cn(k)*1.3+dn(s)*0.35)#le#8),1,0)))));
n=@sum(LL:L);
@sum(LL(i,j,k,s):L(i,j,k,s)*x(i,j,k,s)*an(i))>200;
@sum(LL(i,j,k,s):L(i,j,k,s)*x(i,j,k,s)*bn(j))>200;
@sum(LL(i,j,k,s):L(i,j,k,s)*x(i,j,k,s)*cn(k))>600;
@sum(LL(i,j,k,s):L(i,j,k,s)*x(i,j,k,s)*dn(s))>1200;
@for(LL:@gin(x));
end
运行结果为:有效切割模式59种,最小需切割224根角钢。
第一步,求出切割模式,8m长能分成多少种有效切割方式L?其判断依据就是:每种切割方式的余料要小于0.35m,否则还可以切割出一块小的有效用料来。
第二步,假设第(i,j,k,s)种切割方法L(i,j,k,s),切割了x(i,j,k,s)根角钢,显然这种切割模式下的得到1.5m的料总数为x(i,j,k,s)*(i-1)根,此数应当大于200。注意:为了lingo程序表达的需要,在这里L(i,j,k,s)切割模式下1.5m的角钢为i-1根。
第三步,将所有的各种切割方法L下的x加和起来,则其和为优化目标,使之最小,求解之。
程序代码:
model:
sets:
aa/1..6/:an;!某种切割模式下,8m的角钢切完后,1.5m的料有an根(an=0~5共6种可能取值);
bb/1..6/:bn;!某种切割模式下,8m的角钢切完后,1.45m的料有bn根(bn=0~5共6种可能取值);
cc/1..7/:cn;!某种切割模式下,8m的角钢切完后,1.3m的料有cn根(cn=0~6共7种可能取值);
dd/1..23/:dn;!某种切割模式下,8m的角钢切完后,0.35m的料有dn根(dn=0~22共23种可能取值);
LL(aa,bb,cc,dd):L,x;
!L(i,j,k,s)代表这样一种切割模式:一根8m的角钢切完后,1.5m料切出i-1根,1.45m料切出j-1根,1.3m和0.35m类似,如果切割总长不超出8m,且余料不超出0.35m,则为有效切割,记L(i,j,k,s)=1,否则这种切割模式不能实现或者无效,记L(i,j,k,s)=0;
!这里的x(i,j,k,s)代表第L(i,j,k,s)种切割模式下切割8m角钢的数目;
endsets
min=@sum(LL:x);
@for(aa(i):an(i)=i-1);
@for(bb(j):bn(j)=j-1);
@for(cc(k):cn(k)=k-1);
@for(dd(s):dn(s)=s-1);
@for(aa(i):@for(bb(j):@for(cc(k):@for(dd(s):L(i,j,k,s)=@if(((an(i)*1.5+bn(j)*1.45+cn(k)*1.3+dn(s)*0.35)#gt#7.65)#and#((an(i)*1.5+bn(j)*1.45+cn(k)*1.3+dn(s)*0.35)#le#8),1,0)))));
n=@sum(LL:L);
@sum(LL(i,j,k,s):L(i,j,k,s)*x(i,j,k,s)*an(i))>200;
@sum(LL(i,j,k,s):L(i,j,k,s)*x(i,j,k,s)*bn(j))>200;
@sum(LL(i,j,k,s):L(i,j,k,s)*x(i,j,k,s)*cn(k))>600;
@sum(LL(i,j,k,s):L(i,j,k,s)*x(i,j,k,s)*dn(s))>1200;
@for(LL:@gin(x));
end
运行结果为:有效切割模式59种,最小需切割224根角钢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
TableDI
2024-07-18 广告
2024-07-18 广告
VLOOKUP是Excel中用于垂直查找的函数,其基本用法包括四个参数:1. 查找值:即在数据表首列中需要搜索的值。2. 数据表:包含查找值的单元格区域或数组。3. 返回值所在列数:指定返回查询区域中第几列的值。4. 查找方式:选择精确匹配...
点击进入详情页
本回答由TableDI提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询