資源簡介
LINGO是用來求解線性和非線性優化問題的簡易工具。LINGO內置了一種建立最優化模型的語言,可以簡便地表達大規模問題,利用LINGO高效的求解器可快速求解并分析結果。
§1 LINGO快速入門
當你在windows下開始運行LINGO系統時,會得到類似下面的一個窗口:
外層是主框架窗口,包含了所有菜單命令和工具條,其它所有的窗口將被包含在主窗口之下。在主窗口內的標題為LINGO Model – LINGO1的窗口是LINGO的默認模型窗口,建立的模型都都要在該窗口內編碼實現。下面舉兩個例子。
例1.1 如何在LINGO中求解如下的LP問題:
在模型窗口中輸入如下代碼:
min=2*x1+3*x2;
x1+x2>=350;
x1>=100;
2*x1+x2<=600;
然后點擊工具條上的按鈕 即可。
例1.2 使用LINGO軟件計算6個發點8個收點的最小費用運輸問題。產銷單位運價如下表。
單
位 銷地
運
價
產地 B1 B2 B3 B4 B5 B6 B7 B8 產量
A1 6 2 6 7 4 2 5 9 60
A2 4 9 5 3 8 5 8 2 55
A3 5 2 1 9 7 4 3 3 51
A4 7 6 7 3 9 2 7 1 43
A5 2 3 9 5 7 2 6 5 41
A6 5 5 2 2 8 1 4 3 52
銷量 35 37 22 32 41 32 43 38
使用LINGO軟件,編制程序如下:
model:
!6發點8收點運輸問題;
sets:
warehouses/wh1..wh6/: capacity;
vendors/v1..v8/: demand;
links(warehouses,vendors): cost, volume;
endsets
!目標函數;
min=@sum(links: cost*volume);
!需求約束;
@for(vendors(J):
@sum(warehouses(I): volume(I,J))=demand(J));
!產量約束;
@for(warehouses(I):
@sum(vendors(J): volume(I,J))<=capacity(I));
!這里是數據;
data:
capacity=60 55 51 43 41 52;
demand=35 37 22 32 41 32 43 38;
cost=6 2 6 7 4 2 9 5
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3;
enddata
end
然后點擊工具條上的按鈕 即可。
為了能夠使用LINGO的強大功能,接著第二節的學習吧。
§2 LINGO中的集
對實際問題建模的時候,總會遇到一群或多群相聯系的對象,比如工廠、消費者群體、交通工具和雇工等等。LINGO允許把這些相聯系的對象聚合成集(sets)。一旦把對象聚合成集,就可以利用集來最大限度的發揮LINGO建模語言的優勢。
現在我們將深入介紹如何創建集,并用數據初始化集的屬性。學完本節后,你對基于建模技術的集如何引入模型會有一個基本的理解。
2.1 為什么使用集
集是LINGO建模語言的基礎,是程序設計最強有力的基本構件。借助于集,能夠用一個單一的、長的、簡明的復合公式表示一系列相似的約束,從而可以快速方便地表達規模較大的模型。
2.2 什么是集
集是一群相聯系的對象,這些對象也稱為集的成員。一個集可能是一系列產品、卡車或雇員。每個集成員可能有一個或多個與之有關聯的特征,我們把這些特征稱為屬性。屬性值可以預先給定,也可以是未知的,有待于LINGO求解。例如,產品集中的每個產品可以有一個價格屬性;卡車集中的每輛卡車可以有一個牽引力屬性;雇員集中的每位雇員可以有一個薪水屬性,也可以有一個生日屬性等等。
LINGO有兩種類型的集:原始集(primitive set)和派生集(derived set)。
一個原始集是由一些最基本的對象組成的。
一個派生集是用一個或多個其它集來定義的,也就是說,它的成員來自于其它已存在的集。
2.3 模型的集部分
集部分是LINGO模型的一個可選部分。在LINGO模型中使用集之前,必須在集部分事先定義。集部分以關鍵字“sets:”開始,以“endsets”結束。一個模型可以沒有集部分,或有一個簡單的集部分,或有多個集部分。一個集部分可以放置于模型的任何地方,但是一個集及其屬性
代碼片段和文件信息
評論
共有 條評論