原非線性規划式子:

代碼展示如下:
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:我不主動找你, 不是因為你不重要了, 而是我知道我不重要了 。)
