数学建模(Lingo)(非线性整数规划)
原非线性规划式子:
代码展示如下:
model:!编程开始;
title:life;!标题;
sets:!集合段;
row/1..4/:b;
col/1..5/:c1,c2,x;
link(row,col):a;
endsets
data:!数据段;
c1=1,1,3,4,2;!对应目标函数中的x的平方;
c2=-8,-2,-3,-1,-2;!对应目标函数中的x的一次方;
!约束条件系数;
a=1 1 1 1 1
1 2 2 1 6
2 1 6 0 0
0 0 1 1 5;
b=400,800,200,200;
enddata
max = @sum(col:(c1*x^2+c2*x));!计算段;
@for(row(i):@sum(col(j):a(i,j)* x(j))<=b(i));
@for(col:@gin(x));
@for(col:@bnd(0,x,99));
end
提醒一下上面有几个小函数,
首先是Lingo中所有函数都要加上@
然后@for是循环,@sum是求和,@gin是限制整数;@bnd是限制变量x在[0,99]中
其实还有挺多函数的,如果有兴趣知道详情的话可以去百度,我个人看的是这个网页
[整理版]lingo中的函数 - 豆丁网 (docin.com)
然后还有个小问题就是我的Lingo代码里加了中文注释,我个人是不推荐在自己使用Lingo的时候加上中文的,
因为部分版本的Lingo中加中文会导致关键字显示不正确,比如这样(sets和col变成绿色的了,虽然好像不影响使用,但我个人总感觉不太舒服)
然后我最后再附上没有中文的Lingo代码,以及运行结果
代码:
model:
title:life;
sets:
row/1..4/:b;
col/1..5/:c1,c2,x;
link(row,col):a;
endsets
data:
c1=1,1,3,4,2;
c2=-8,-2,-3,-1,-2;
a=1 1 1 1 1
1 2 2 1 6
2 1 6 0 0
0 0 1 1 5;
b=400,800,200,200;
enddata
max = @sum(col:(c1*x^2+c2*x));
@for(row(i):@sum(col(j):a(i,j)* x(j))<=b(i));
@for(col:@gin(x));
@for(col:@bnd(0,x,99));
end
然后这是结果:
最优解:
各变量值:
老规矩,做一名深情的单身程序员
(PS:我不主动找你, 不是因为你不重要了, 而是我知道我不重要了 。)