<div class="comment" id="valine"></div> ## 前言 **LINGO** 做爲非線性規劃運算的專用軟件,得出結果通常都是純文本的一列數據,要想將數據呈現到論文當中,須要整理到 **EXCEL** 中,使用複製粘貼容易出錯還費時,因此必需要動用函數來提升效率! ## 案例場景數組
有這樣一個例子,求發電機廠一天7各時段對4臺不一樣機型的發電機分配開啓數量以及輸出功率,用LINGO求解,最後須要將7*4=28的數量數據N,以及對應功率P,輸出到EXCEL中。以下圖所示:函數
這裏的臺數和功率都是7行4列的數據。spa
而利用LINGO算出來的純文本導出數據長這樣:code
沒錯,就這種一路排到底的輸出格式,若是是手動複製粘貼,豈不是眼睛都要瞎掉?不過這裏值得注意的是,數據的輸出是按行輸出的,先是N(1,:),再是N(2,:)。class
在EXCEL中,使用定義名稱,能夠將某一塊的數據賦予一個指定的名字,這樣就和程序裏的數據初始化同樣,好比定義一個數組,首先要給他一個名字,而後再被其餘函數調用。在EXCEL裏定義名稱的數據能夠被宏函數調用。而LINGO也能夠經過函數來調用EXCEL中定義了名稱的數據。效率
如何定義名稱?後臺
之前面的臺數表格爲例,框選對應的 7*4 的數據區域,<kbd>CTRL</kbd> + <kbd>F3</kbd> ,會彈出窗口(若是沒反應,就點擊頂部功能欄"公式",找到"定義名稱",同樣能夠彈出窗口),設置名稱爲NUM,肯定。同理能夠給功率命名爲 POW。軟件
命名完了以後,在表格的左上角下拉能夠看到已經命名好的數據,包括了NUM和POW。model
最後將表格保存爲 Q1_Output.xls
,(或者.xlsx
格式,.xls
格式時,在調用時能夠省去後綴,而.xlsx
格式必須加上後綴)。保存好了後,把表格打開,放在一邊,不要關閉,由於LINGO寫入數據時,可能由於權限不夠的緣由,關閉狀態下的EXCEL沒法寫入,然後臺打開狀態時能夠寫入。權限
LINGO自帶的ole函數
能夠負責與EXCEL傳遞數據。語法以下:
!data爲數據表,x爲表格內標記爲x名稱的某塊區域; X = @ole('data.xls','x');!從EXCEL導入數據到LINGO; @ole('data.xls','x') = X;!從LINGO導出數據到EXCEL;
因此爲了導出咱們的N、P數據,咱們寫以下代碼到 data:裏
@OLE('Q1_Output','NUM')=N; @OLE('Q1_Output','POW')=P;
完整代碼以下:
model: sets: A /1..7/: T, D ; B /1..4/:N0,Pmax,Pmin,F,M,S; U(A,B): N, P ; endsets data: T = 6 3 3 2 4 4 2; D = 11000 33000 25000 36000 25000 30000 18000; N0 = 10 5 8 4; Pmax=1800 1500 2000 3500; Pmin= 800 1000 1200 1800; F =2200 1800 3800 4600; M = 2.7 2.2 1.8 3.6; S =4000 1500 2500 1000; @OLE('Q1_Output','NUM')=N; @OLE('Q1_Output','POW')=P; enddata W1 =@sum(B(j):N(1,j)*S(j))+@sum(A(i)|i#ge#2: @sum(B(j):(N(i,j)-N(i-1,j)+@abs(N(i,j)-N(i-1,j))) /2*S(j))); W2=@sum(A(i): @sum(B(j):N(i,j)*F(j)*T(i))); W3=@sum(A(i): @sum(B(j):(P(i,j)-Pmin(j))* N(i,j)*M(j)*T(i))); min =W1+W2+W3; @for(A(i): @sum(B(j):P(i,j)*N(i,j)) >=D(i)); @for(U(i,j):N(i,j)>=0); @for(U(i,j):N(i,j)<=N0(j)); @for(U(i,j):@gin(N(i,j))); @for(U(i,j):Pmin(j)<=P(i,j)); @for(U(i,j):P(i,j)<=Pmax(j)); end
作好前面兩步,即EXCEL數據輸出區域命名,還有LINGO導出數據函數,最後把EXCEL打開放在屏幕左邊,LINGO放右邊,點擊<kbd>solve</kbd>,坐等程序跑完,EXCEL中就驚現數據了,是否是很nice!?
<img class="simg" src="https://www.kanjiantu.com/images/2019/07/21/1R2Y9ROT1U44TSG_KZ8c4059320327ec28e.png">