LINGO軟體入門
LINGO軟體入門
一、二次線性規劃問題
LINGO的 程式碼:
max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2;
x1+x2<100;
x1<=2*x2;
@gin(x1);@gin(x);
- LINGO總是根據“MAX=”或“MIN=”尋找目標函式,語句順序不重要。
- 限定變數取整數值的語句為“@GIN(X1)”和“@GIN(X2)”,不可以寫成“@GIN(2)”,否則LINGO將把這個模型看成沒有整數變數。
- LINGO中函式一律需要以“@”開頭,其中整型變數函式(@BIN、@GIN)和上下界限定函式(@FREE、@SUB、@SLB)與LINDO中的命令類似。而且0/1變數函式是@BIN函式。
二、集合的基本用法和LINGO模型的基本要素
例:SAILCO公司需要決定下四個季度的帆船生產量。下四個季度的帆船需求量分別是40條,60條,75條,25條,這些需求必須按時滿足。每個季度正常的生產能力是40條帆船,每條船的生產費用為400美元。如果加班生產,每條船的生產費用為450美元。每個季度末,每條船的庫存費用為20美元。假定生產提前期為0,初始庫存為10條船。如何安排生產可使總費用最小?
用DEM,RP,OP,INV分別表示需求量、正常生產的產量、加班生產的產量、庫存量,則DEM,RP,OP,INV對每個季度都應該有一個對應的值,也就說他們都應該是一個由4個元素組成的陣列,其中DEM是已知的,而RP,OP,INV是未知數。
MODEL:
SETS:
QUARTERS/1,2,3,4/:DEM,RP,OP,INV;
ENDSETS
MIN=@SUM(QUARTERS:400*RP+450*OP+20*INV);
@FOR(QUARTERS(I):RP(I)<40);
@FOR(QUARTERS(I)|I#GT#1:
INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I););
INV(1)=A+RP(1)+OP(1)-DEM(1);
DATA:
DEM=40,0,75,25;
A=?;
ENDDATA
END
- 這裡S和ENDSETS用來定義集合。
這裡DATA以上,ENDSETS以下用來定義約束條件和目標函式。
其中@SUM(集合(下標):關於集合的屬性的表示式),
本例中目標函式也可以等價地寫成
@SUM(QUARTERS(i): 400*RP(i) +450*OP(i) +20*INV(i) )。I#GT#1 表示I>1時,GT=Greater Than。
- DATA來設定資料。
- 比如不知道初始庫存的話,可以將初始庫存設為A,在資料段使用“A=?”,這時執行的話將會提示輸入A。
執行結果截圖:
三、基本集合與派生集合
例:建築工地的位置(用平面座標a, b表示,距離單位:公里)及水泥日用量d(噸)下表給出。有兩個臨時料場位於P (5,1), Q (2, 7),日儲量各有20噸。從A, B兩料場分別向各工地運送多少噸水泥,使總的噸公里數最小。兩個新的料場應建在何處,節省的噸公里數有多少
模型簡稱 | 模型名 |
---|---|
LP | 線性規劃 |
ILP | 整數線性規劃 |
BILP | 兩層的線性整數規劃 |
NLP | 非線性規劃 |
INLP | 非線性整數規劃 |
QP | 二次規劃 |
IQP | 二次整數規劃 |
PIP | 帶引數整數規劃 |
ZOP | 零一規劃 |
MODEL:
TITLE Location Problem;
SETS:
demand/1..6/:a,b,d;
supply/1..2/:x,y,e;
link(demand,supply):c;
ENDSETS
DATA:
a=1.2,8.75,0.5,5.75,3,7.25;
b=1.25,0.75,4.75,5,6.5,7.75;
d=3,5,4,7,6,11;
e=20,20;
ENDDATA
INIT:
x,y=5,1,2,7;
!初始點賦值為x=(5,2),y=(1,7);
ENDINIT
[OBJ] min= @sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));
@for(demand(i):[DEMAND_CON] @sum(supply(j):c(i,j))=d(i););
@for(supply(i):[SUPPLY_CON] @sum(demand(j):c(j,i))<=e(i););
@for(supply:@free(X);@free(Y););
END
這裡解出來的是新料場的位置,如果想繼續使用原料場,將初始化裡面的資料放到 DATA中即可。
相關文章
- redux 中介軟體入門Redux
- 軟體架構入門架構
- 轉:軟體架構入門架構
- 軟體測試入門---(二)
- 中介軟體、MetaQ入門學習
- 軟體測試入門【1】什麼是軟體測試
- KingShard MySQL中介軟體快速入門MySql
- Nginx中介軟體——從小白到入門Nginx
- ABAQUS模擬軟體新手入門培訓
- Abaqus 模擬軟體新手入門培訓
- 新人如何入門和學習軟體測試?
- 快速入門大資料訊息中介軟體大資料
- Linux軟體包管理的基本操作入門Linux
- 軟體測試入門,從這裡開始
- Asp.Net Core入門之自定義中介軟體ASP.NET
- Egg入門學習(三)---理解中介軟體作用
- React從入門到放棄(4):Redux中介軟體ReactRedux
- 軟體測試入門必備知識知多少?
- 訊息中介軟體RabbitMQ_RabbitMQ快速入門3MQ
- 逆向基礎——軟體手動脫殼技術入門
- Go Web 程式設計入門--編寫 Web 中介軟體GoWeb程式設計
- # 一篇文章帶你入門軟體測試
- 入門Web前端要注意什麼?要學哪些軟體?Web前端
- Redux 入門教程(2):中介軟體與非同步操作Redux非同步
- Redux 入門教程(二):中介軟體與非同步操作Redux非同步
- 軟體測試探秘:從各類軟體測試入門,領略測試的奧秘
- Docker 搭建 PHP 環境及相關軟體入門到了解DockerPHP
- Python可以開發軟體嗎?Python入門學習!Python
- 最新軟體測試學習資源(小白入門到精通)
- 什麼是SCADA?SCADA組態軟體入門指南
- 非明碼軟體的入門教學--現給演算法的入門者(高手末入) (6千字)演算法
- 軟體工程入門-輕鬆理解依賴注入 (DI) 和 IoC 容器軟體工程依賴注入
- 學Python下載什麼軟體?Python基礎入門!Python
- 告軟體測試初學者:入門需掌握的知識點
- 未來已來,軟體行業勢不可擋,一篇文章教你入門軟體測試……行業
- AIGC入門體驗AIGC
- 軟體是一門藝術
- 【網路安全入門必看】防守篇專業術語之軟硬體!