数学建模(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:我不主动找你, 不是因为你不重要了, 而是我知道我不重要了 。)

原文地址:https://www.cnblogs.com/yeluozhiqiumax/p/15247673.html