Lingo是一門主要求解非線性規劃數學模型的編程軟件,記得最初接觸Lingo是在閱讀《數學建模教程》一書,該書在第五章主要講解使用Lingo來解決優化問題,也是在那個時候認識到了Lingo的強大之處。Lingo的使用就比如解決一道簡單的數學問題,而你只須要使用Lingo支持的編程規範給其提供充足的已知條件便可,以後會自動使用相關算法爲您解答。爲了往後更加方便的查詢Lingo相關知識,因此將Lingo的基本使用在此記錄。html
關於Lingo的下載及安裝問題博主已作整理,可參考本篇教程 Lingo安裝web
^:乘方
*:乘
/:除
+:加
-:減算法
在Lingo中,邏輯運算符主要用於集循環函數的條件表達式中,來控制在函數中哪些集成員被包含,哪些被排斥。express
符號 | 說明 |
---|---|
#and# | 且,& |
#or# | 或,|| |
#not# | 非,! |
#eq# | 等於,== |
#ne# | 不等於,!= |
#gt# | 大於,> |
#ge# | 大於等於,>= |
#lt# | 小於,< |
#le# | 小於等於,<= |
= 、<= 、 >=編程
函數 | 說明 |
---|---|
@abs(x) | 絕對值 |
@sin(x) | 正弦值,採用弧度制 |
@cos(x) | 餘弦值 |
@tan(x) | 正切 |
@exp(x) | 指數, |
@log(x) | 天然對數 |
@lgm(x) | gamma函數的天然對數 |
@sign(x) | x<0返回-1,不然返回返回1 |
@floor(x) | 取整 |
@smax() | 取() 中的最大值 |
@smin() | 取() 中的最小值 |
集循環函數用於遍歷整個集,其基本語法以下:app
@function(setname[(set_index_list)[|conditional_qualifier]]:
expression_list);
@function相應於下面羅列的四個集循環函數之一;setname是要遍歷的集;set_ index_list是集索引列表;conditional_qualifier是用來限制集循環函數的範圍,當集循環函數遍歷集的每一個成員時,LINGO都要對conditional_qualifier進行評價,若結果爲真,則對該成員執行@function操做,不然跳過,繼續執行下一次循環。expression_list是被應用到每一個集成員的表達式列表,當用的是@for函數時,expression_list能夠包含多個表達式,其間用逗號隔開。這些表達式將被做爲約束加到模型中。當使用其他的三個集循環函數時,expression_list只能有一個表達式。若是省略set_index_list,那麼在expression_list中引用的全部屬性的類型都是setname集。函數
@for函數用來對集中的成員造成約束。優化
例:產生序列[1,4,9,16,25]spa
sets:
nums/1..5/: x;
endsets
@for(nums(i): x(i)=i^2);
@sum函數返回遍歷指定集成員的一個表達式的和.net
例:求[1,2,3,4,5,6,7]中前五個數的和
sets:
nums/1..7/: x;
endsets
@for(nums(i): x(i)=i);
s = @sum(nums(i) | i #le# 5: x(i));
這兩個函數分別用於返回指定集成員的一個表達式的最大值和最小值
例:求[1,2,3,4,5,6,7,8,9,10]中前五個數的最大值,後五個數的最小值
sets:
nums/1..10/: x;
endsets
@for(nums(i): x(i)=i);
min_value = @max(nums(i) | i #le# 5: x);
max_value = @min(nums(i) | i #ge# 6: x);
該函數主要是對決策變量作附加限制,通常用於@for函數中,主要有以下四種:
函數 | 說明 |
---|---|
@bin(x) | 限制x爲0或1 |
@bnd(a,x,b) | 限制x取a到b之間的值 |
@free(x) | x取實數 |
@gin(x) | x取整數 |
Lingo中還有其餘大量的函數,好比金融函數、機率函數、變量界定函數,因爲目前博主佔時用不上,因此就暫且不記錄了,待須要時再作進一步更新。