1. 程式人生 > 其它 >數學建模——LINGO入門學習筆記(1)

數學建模——LINGO入門學習筆記(1)

技術標籤:數學建模線性代數

數學建模——LINGO入門學習筆記(1)

*本篇筆記參考自中國大學mooc 西北工業大學《數學建模》1.3篇 *

LINGO簡介

LINGO是一種專門用於求解數學規劃問題的軟體包。由於LINGO執行速度快,易於方便地輸入、求解和分析數學規劃問題,因此在 教學、科研和工業界得到廣泛應用。 LINGO主要用於求解線性規劃 、非線性規劃、二次規劃和整數規劃等問題,也可以用於求解一 些線性和非線性方程組及代數方程求根等。

LINGO使用介紹

1.1編寫格式

LINGO模型以MODEL開始,以END結束.中間為語句,分為四大部分。
(1)集合部分(SETS):這部分以“sets:”開始,以“endsets” 結束。定義必要的變數,便於後面進行程式設計進行大規模計算,在LINGO中稱為集合(SET)及其元素和屬性。

sets
//原始集合
SETNAME/member list(or 1..n)/:attribute,attribute,etc
/* task/1,2,3/: step1,step2,step3;
集合task類似於陣列,step等表示該集合包含的元素,這裡一共有3個元素。/1,2,3/表示該集合
的大小,等價於/1..3/,當集合大小比較大時,建議寫後者;*/
//匯出集合
SETNAME(set1,set2,etc.):attribute,attribute,etc
/*set(task,member):c;
其中task和member集為原始集合(見上),而 set則是在前兩個集合的基礎上定義的集合(匯出
集合)。set中的元素就是task和member的笛卡兒積,也就是set={(S,T)|S∈task,T∈member}
因此,其屬性 C 也就是一個m*n的矩陣(或陣列)*/
endsets

(2) 目標與約束:定義了目標函式、約束條件等。 一般要用到 LINGO的內部函式.

//目標函式:
MAX=/MIN=(一定要有等於號)
//約束條件

(3)資料部分(DATA):這部分以“DATA:”開始,以“END DATA” 結束。其作用在於對集合的屬性(陣列)輸入必要的數值.該部分主要是方便資料的輸入.

attribute=value_list
/*step1=1,2,3,4;
對step1進行引數賦值;格式為:變數名=  ;*/

(4)初始化部分(INIT):這部分以“INIT:”開始,以“END INIT”結 束。作用在於對集合的屬性(陣列)定義初值.

attribute=
value_list;
  • 注意:
    (1) 所有的語句除SETS、ENDSETS、DATA、ENDDATA、INIT、ENDINIT和 MODEL,END之外必須以一個分號“;”結尾。
    (2) LINGO求解非線性規劃時已約定各變數非負.

1.2 常用函式

LINGO建立優化模型時可以引用大量內部函式, 這些函式以“@”符號打頭.
(1)常用數學函式
@ABS(X) 返回變數X的絕對數值. @COS(X) 返回X的餘弦值,X的單位為弧度
@EXP(X)返回指數函式值,其中e=2.72828…
@FLOOR(X)向0靠近返回X的整數部分. @LGM( X) 返回Γ函式的自然對數值. @LOG( X) 返回變數X的自然對數值
@SIGN( X) 返回變數X的符號值,當X<0時為-1; 當X>0時為1.
@SIN( X) 返回X的正弦值,X的單位為弧度 @SMAX( X1, X2,…, XN) 返回一列值X1, X2,…, XN的最大值.
@SMIN( X1, X2,…, XN) 返回一列值X1, X2,…, XN的最小值.
@TAN( X) 返回X的正切值,X的單位為弧度
(2)集合函式 集合函式的用法如下: set_operator (set_name|condition:expression)
//其中set_operator是集合函式名,set_name是資料集合名,expression 部分是表示式,|condition部分是條件,用邏輯表示式描述(無條件時 可省略)。
邏輯表示式中可以三種邏輯算符#AND#(與),#OR#(或),#NOT#(非) 和六種關係算符#EQ#(等於),#NE#(不等於),#GT#(大於),#GE# (大於等於),#LT#(小於),#LE#(小於等於)。
常見的集合函式如下:
@FOR (set_name:constraint_expressions)對集合(set_name)的每個元素 獨立地生成約束,約束由約束表示式(constraint_expressions)描述. @MAX(set_name:expression)返回集合上表達式(expression)的最大值. @MIN(set_name:expression)返回集合上的表示式(expression)最小值. @SUM(set_name:expression)返回集合上的表示式(expression)的和. @SIZE(set_name)返回資料集set_name中包含元素的個數. @IN(set_name,set_element)如果資料集set_name中包含元素 set_element 則返回1,否則返回0.
(3)變數界定函式
變數函式對變數的取值範圍附加限制,共有四種.
@BND(L,X,U)限制L<=X<=U
@BIN(X)限制X為0或1.
@FREE(X)取消對X的符號限制(可取任意實數值).
@GIN(X)限制X為整數值