lingo和lindo程序在编写过程中有哪些具体的差别

2024-05-06 14:25

1. lingo和lindo程序在编写过程中有哪些具体的差别

LINDO是一种专门用于求解数学规划问题的软件包。由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题。因此在数学、科研和工业界得到广泛应用。LINDO主要用于解线性规划、非线性规划、二次规划和整数规划等问题。也可以用于一些非线性和线性方程组的求解以及代数方程求根等。LINDO中包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。
   LINDO 6.1是求解线性、整数和二个规划问题的多功能工具。LINDO 6.1互动的环境可以让你容易得建立和求解最佳化问题,或者你可以将LINDO的最佳化引擎挂在您己开发的程序内。而另一方面,LINDO也可以用来解决一些复杂的二次线性整数规划方面的实际问题。如在大型的机器上,LINDO被用来解决一些拥有超过50,000各约束条件和200,000万个变量的大规模复杂问题
 LINGO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP—QUARATIC PROGRAMING)其中LINGO 6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦再10^4量级以上。虽然LINDO和LINGO不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。

lingo和lindo程序在编写过程中有哪些具体的差别

2. 这个题目用lingo程序怎么做啊?请帮我把详细的lingo程序写出来。谢谢!!

思路:
第一步,求出切割模式,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根角钢。

3. lingo编程题

max=72*x1+64*x2+3*x3;
60*x1+80*x2+10*x3<=4800;
2*x1+3*x2-5*x3<=100;

lingo编程题

4. 用Matlab、C语言、Lingo解下这道题,需要程序过程

有几个地方还有问题:
g (15, i) = k(16, i), 16 超过边界。
约束条件里面的求和符号,从 1 到 t,应该是从 1 到 15?
约束条件里面的左边中括号,右边的中括号丢了?
Lingo 求解如下:
sets:set1/1..5/: B, C, A;set2/1..15/;set3(set1, set2): x, y, g, k;endsetsmin = @sum(set3(I, J): 100*x(I, J) + 120*y(I, J) + 120*k(I, J));@for(set1(I):         B(I) <= C(I) + @sum( set2(T): 8000*x(I, T) + 2000*y(I, T) + 10000*(g(I, T) + k(I, T)) - T*B(I) );        C(I) + @sum( set2(T): 8000*x(I, T) + 2000*y(I, T) + 10000*(g(I, T) + k(I, T)) - T*B(I) ) <= A(I);        @for(set2(J) | J#le#14: g(I, J) = k(I, J+1) );    );!@for(set3(I, J): !    @free(x(I, J));!    @free(y(I, J));!    @free(g(I, J));!    @free(k(I, J));!);data:B = 2000, 3000, 5000, 8000, 4000;C = 9010, 7008, 17015, 18020, 27509;A = 17000, 17000, 19000, 40000, 28500;enddata