LINGO與EXCEL之間的數據傳遞

<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中,使用定義名稱,能夠將某一塊的數據賦予一個指定的名字,這樣就和程序裏的數據初始化同樣,好比定義一個數組,首先要給他一個名字,而後再被其餘函數調用。在EXCEL裏定義名稱的數據能夠被宏函數調用。而LINGO也能夠經過函數來調用EXCEL中定義了名稱的數據。效率

如何定義名稱?後臺

之前面的臺數表格爲例,框選對應的 7*4 的數據區域,<kbd>CTRL</kbd> + <kbd>F3</kbd> ,會彈出窗口(若是沒反應,就點擊頂部功能欄"公式",找到"定義名稱",同樣能夠彈出窗口),設置名稱爲NUM,肯定。同理能夠給功率命名爲 POW軟件

命名完了以後,在表格的左上角下拉能夠看到已經命名好的數據,包括了NUMPOWmodel

最後將表格保存爲 Q1_Output.xls ,(或者.xlsx格式,.xls格式時,在調用時能夠省去後綴,而.xlsx格式必須加上後綴)。保存好了後,把表格打開,放在一邊,不要關閉,由於LINGO寫入數據時,可能由於權限不夠的緣由,關閉狀態下的EXCEL沒法寫入,然後臺打開狀態時能夠寫入。權限

LINGO 之 @OLE

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">

相關文章
相關標籤/搜索