【Lingo】lingo使用
目錄
- 規(guī)劃
- LINGO 有 9 種類型的函數(shù):
- 算術(shù)運(yùn)算符
- LINGO 具有9種邏輯運(yùn)算符:
- 優(yōu)先級
- 數(shù)學(xué)函數(shù)
- 金融函數(shù)
- 概率函數(shù)
- 變量界定函數(shù)
- 集操作函數(shù)
- 集循環(huán)函數(shù)
- 輸入和輸出函數(shù)
- 結(jié)果報告函數(shù)
- 輔助函數(shù)
規(guī)劃
max?2x1+x2s.t.x1+x2≥350x1≥1002x1+x2≤600x1,x2≥0\begin{array}{l} \hspace*{1.5cm}\max{\rm{ }}2x_1+x_2\\ s.t.\hspace*{1cm}{\rm{ }}x_1+x_2\ge {\rm{ }}350\\ \hspace*{1.5cm}x_1\ge100\\ \hspace*{1.5cm}2x_1+x_2\le600\\ \hspace*{1.5cm}x_1,x_2\ge0 \end{array} max2x1?+x2?s.t.x1?+x2?≥350x1?≥1002x1?+x2?≤600x1?,x2?≥0?
Lingo代碼
max?98x1+277x2?x12?0.3x1x2?2x22s.t.x1+x2≤100x1≤2x2x1,x2≥0\begin{array}{l} \hspace*{1.5cm}\max{\rm{ }}98x_1+277x_2-x_1^2-0.3x_1x_2-2x_2^2\\ s.t.\hspace*{1cm}{\rm{ }}x_1+x_2\le {\rm{ }}100\\ \hspace*{1.5cm}x_1\le2x_2\\ \hspace*{1.5cm}x_1,x_2\ge0 \end{array} max98x1?+277x2??x12??0.3x1?x2??2x22?s.t.x1?+x2?≤100x1?≤2x2?x1?,x2?≥0?
lingo代碼
LINGO 有 9 種類型的函數(shù):
1. 基本運(yùn)算符:包括算術(shù)運(yùn)算符、邏輯運(yùn)算符和關(guān)系運(yùn)算符;
2. 數(shù)學(xué)函數(shù):三角函數(shù)和常規(guī)的數(shù)學(xué)函數(shù);
3. 金融函數(shù):LINGO 提供的兩種金融函數(shù);
4. 概率函數(shù):LINGO 提供了大量概率相關(guān)的函數(shù);
5. 變量界定函數(shù):這類函數(shù)用來定義變量的取值范圍;
6. 集操作函數(shù):這類函數(shù)為對集的操作提供幫助;
7. 集循環(huán)函數(shù):遍歷集的元素,執(zhí)行一定的操作的函數(shù);
8. 數(shù)據(jù)輸入輸出函數(shù):這類函數(shù)允許模型和外部數(shù)據(jù)源相聯(lián)系,進(jìn)行數(shù)據(jù)的輸入
輸出;
9. 輔助函數(shù):各種雜類函數(shù)。
算術(shù)運(yùn)算符
算術(shù)運(yùn)算符是針對數(shù)值進(jìn)行操作的。LINGO 提供了 5 種二元運(yùn)算符:
^ 乘方
﹡ 乘
/ 除
﹢ 加
﹣ 減
LINGO 唯一的一元算術(shù)運(yùn)算符是取反函數(shù)“﹣”。
這些運(yùn)算符的優(yōu)先級由高到底為:
高 ﹣(取反)
^
﹡/
低 ﹢﹣
LINGO 具有9種邏輯運(yùn)算符:
- #not# 否定該操作數(shù)的邏輯值,#not#是一個一元運(yùn)算符
- #eq# 若兩個運(yùn)算數(shù)相等,則為 true;否則為 flase
- #ne# 若兩個運(yùn)算符不相等,則為 true;否則為 flase
- #gt# 若左邊的運(yùn)算符嚴(yán)格大于右邊的運(yùn)算符,則為 true;否則為 flase
- #ge# 若左邊的運(yùn)算符大于或等于右邊的運(yùn)算符,則為 true;否則為 flase
- #lt# 若左邊的運(yùn)算符嚴(yán)格小于右邊的運(yùn)算符,則為 true;否則為 flase
- #le# 若左邊的運(yùn)算符小于或等于右邊的運(yùn)算符,則為 true;否則為 flase
- #and# 僅當(dāng)兩個參數(shù)都為 true 時,結(jié)果為 true;否則為 flase
- #or# 僅當(dāng)兩個參數(shù)都為 false 時,結(jié)果為 false;否則為 true
優(yōu)先級
高 #not#
#eq# #ne# #gt# #ge# #lt# #le#
低 #and# #or#
數(shù)學(xué)函數(shù)
Lingo提供了大量的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù):
@abs(x):返回 x 的絕對值。
@sin(x):返回 x 的正弦值,x 采用弧度制。
@cos(x):返回 x 的余弦值。
@tan(x):返回 x 的正切值。
@exp(x):返回常數(shù) e 的 x 次方。
@log(x):返回 x 的自然對數(shù)。
@lgm(x):返回 x 的 gamma 函數(shù)的自然對數(shù)。
@mod(x,y):返回 x 除以 y 的余數(shù)。
@sign(x):如果 x<0 返回-1;否則,返回 1。
@floor(x):返回 x 的整數(shù)部分。當(dāng) x>=0 時,返回不超過 x 的最大整數(shù);當(dāng) x<0
時,返回不低于 x 的最大整數(shù)。
@smax(x1,x2,…,xn):返回 x1,x2,…,xn 中的最大值。
@smin(x1,x2,…,xn):返回 x1,x2,…,xn 中的最小值。
金融函數(shù)
1.@fpa(I,n)
2.@fpl(I,n)
@fpa(I,n)=∑k=1n@fpl(I,k)@fpa(I,n )=\sum\limits_{{{k}} = 1}^n {@fpl( I,k )}@fpa(I,n)=k=1∑n?@fpl(I,k)。
概率函數(shù)
1.@pbn(p,n,x)
二項(xiàng)分布的累積分布函數(shù)。當(dāng) n 和(或)x 不是整數(shù)時,用線性插值法進(jìn)行計算。
2.@pcx(n,x)
自由度為 n 的 χ2χ^2χ2分布的累積分布函數(shù)。
3.@peb(a,x)
當(dāng)?shù)竭_(dá)負(fù)荷為 a,服務(wù)系統(tǒng)有 x 個服務(wù)器且允許無窮排隊(duì)時的Erlang 繁忙概率。
4.@pel(a,x)
當(dāng)?shù)竭_(dá)負(fù)荷為 a,服務(wù)系統(tǒng)有 x 個服務(wù)器且不允許排隊(duì)時的 Erlang 繁忙概率。
5.@pfd(n,d,x)
自由度為 n 和 d 的 F 分布的累積分布函數(shù)。
6.@pfs(a,x,c)
當(dāng)負(fù)荷上限為 a,顧客數(shù)為 c,平行服務(wù)器數(shù)量為 x 時,有限源的 Poisson 服務(wù)系統(tǒng)的等待或返修顧客數(shù)的期望值。a 是顧客數(shù)乘以平均服務(wù)時間,再除以平均返修時間。當(dāng) c 和(或)x 不是整數(shù)時,采用線性插值進(jìn)行計算。
7.@phg(pop,g,n,x)
超幾何(Hypergeometric)分布的累積分布函數(shù)。pop 表示產(chǎn)品總數(shù),g 是正品數(shù)。從所有產(chǎn)品中任意取出 n(n≤pop)件。pop,g,n 和 x 都可以是非整數(shù),這時采用線性插值進(jìn)行計算。
8.@ppl(a,x)
Poisson 分布的線性損失函數(shù),即返回 max(0,z-x)的期望值,其中隨機(jī)變量 z 服從均值為 a 的 Poisson 分布。
9.@pps(a,x)
均值為 a 的 Poisson 分布的累積分布函數(shù)。當(dāng) x 不是整數(shù)時,采用線性插值進(jìn)行計算。
10.@psl(x)
單位正態(tài)線性損失函數(shù),即返回 max(0,z-x)的期望值,其中隨機(jī)變量 z 服從標(biāo)準(zhǔn)
正態(tài)分布。
11.@psn(x)
標(biāo)準(zhǔn)正態(tài)分布的累積分布函數(shù)。
12.@ptd(n,x)
自由度為 n 的 t 分布的累積分布函數(shù)。
13.@qrand(seed)
產(chǎn)生服從(0,1)區(qū)間的擬隨機(jī)數(shù)。@qrand 只允許在模型的數(shù)據(jù)部分使用,它將用擬隨機(jī)數(shù)填滿集屬性。通常,聲明一個 m×n 的二維表,m 表示運(yùn)行實(shí)驗(yàn)的次數(shù),n 表示每次實(shí)驗(yàn)所需的隨機(jī)數(shù)的個數(shù)。在行內(nèi),隨機(jī)數(shù)是獨(dú)立分布的;在行間,隨機(jī)數(shù)是非常均勻的。這些隨機(jī)數(shù)是用“分層取樣”的方法產(chǎn)生的。
變量界定函數(shù)
變量界定函數(shù)實(shí)現(xiàn)對變量取值范圍的附加限制,共 4 種:
@bin(x):限制 x 為 0 或 1;
@bnd(L,x,U):限制 L≤x≤U;
@free(x):取消對變量 x 的默認(rèn)下界為 0 的限制,即 x 可以取任意實(shí)數(shù);
@gin(x):限制 x 為整數(shù)
- 在默認(rèn)情況下,LINGO 規(guī)定變量是非負(fù)的,也就是說下界為 0,上界為+∞。@free取消了默認(rèn)的下界為 0 的限制,使變量也可以取負(fù)值。@bnd 用于設(shè)定一個變量的上下界,它也可以取消默認(rèn)下界為 0 的約束。
集操作函數(shù)
1.@in(set_name,primitive_index_1 [,primitive_index_2,…])
如果元素在指定集中,返回 1;否則返回 0。
sets: I/x1..x4/:x; B(I)/x2/:y; C(I)|#not#@in(B,&1):z; endsets2.@index([set_name,] primitive_set_element)
該函數(shù)返回在集 set_name 中原始集成員 primitive_set_element 的索引。如果set_name 被忽略,那么 LINGO 將返回與primitive_set_element 匹配的第一個原始集成員的索引。如果找不到,則產(chǎn)生一個錯誤。
sets: S1/A B C/; S2/X Y Z/; S3(S1,S2)/A X, A Z, B Y, C X/; endsets X=@in(S3,@index(S1,B),@index(S2,Y));3.@wrap(index,limit)
該函數(shù)返回 j=index-k*limit,其中 k 是一個整數(shù),取適當(dāng)值保證 j 落在區(qū)間[1,limit]內(nèi)。該函數(shù)在循環(huán)、多階段計劃編制中特別有用。
4.@size(set_name)
該函數(shù)返回集 set_name 的成員個數(shù)。在模型中明確給出集大小時最好使用該函數(shù)。它的使用使模型更加數(shù)據(jù)中立,集大小改變時也更易維護(hù)
集循環(huán)函數(shù)
集循環(huán)函數(shù)遍歷整個集進(jìn)行操作。其語法為
@function(setname[(set_index_list)[|conditional_qualifier]]: expression_list);
@function 相應(yīng)于下面羅列的四個集循環(huán)函數(shù)之一;setname 是要遍歷的集;set_ index_list 是集索引列表;conditional_qualifier 是用來限制集循環(huán)函數(shù)的范圍,當(dāng)集循環(huán)函數(shù)遍歷集的每個成員時,LINGO 都要對 conditional_qualifier 進(jìn)行評價,若結(jié)果為真,則對該成員執(zhí)行@function 操作,否則跳過,繼續(xù)執(zhí)行下一次循環(huán)。expression_list 是被應(yīng)用到每個集成員的表達(dá)式列表,當(dāng)用的是@for 函數(shù)時,expression_list 可以包含多個表達(dá)式,其間用逗號隔開。這些表達(dá)式將被作為約束加到模型中。當(dāng)使用其余的三個集循環(huán)函數(shù)時,expression_list 只能有一個表達(dá)式。如果省略set_index_list,那么在 expression_list 中引用的所有屬性的類型都是setname 集。
1.@for
該函數(shù)用來產(chǎn)生對集成員的約束?;诮UZ言的標(biāo)量需要顯式輸入每個約束,不過@for 函數(shù)允許只輸入一個約束,然后 LINGO 自動產(chǎn)生每個集成員的約束。
2.@sum
該函數(shù)返回遍歷指定的集成員的一個表達(dá)式的和。
3.@min 和@max
返回指定的集成員的一個表達(dá)式的最小值或最大值。
輸入和輸出函數(shù)
1.@file 函數(shù)
該函數(shù)用從外部文件中輸入數(shù)據(jù),可以放在模型中任何地方。該函數(shù)的語法格式為@file(’filename’)。這里 filename 是文件名,可以采用相對路徑和絕對路徑兩種表示方式。
2.@text 函數(shù)
該函數(shù)被用在數(shù)據(jù)部分用來把解輸出至文本文件中。它可以輸出集成員和集屬性
值。其語法為
這里 filename 是文件名,可以采用相對路徑和絕對路徑兩種表示方式。如果忽略filename,那么數(shù)據(jù)就被輸出到標(biāo)準(zhǔn)輸出設(shè)備(大多數(shù)情形都是屏幕)。@text 函數(shù)僅能出現(xiàn)在模型數(shù)據(jù)部分的一條語句的左邊,右邊是集名(用來輸出該集的所有成員名)或集屬性名(用來輸出該集屬性的值)。
我們把用接口函數(shù)產(chǎn)生輸出的數(shù)據(jù)聲明稱為輸出操作。輸出操作僅當(dāng)求解器求解完模型后才執(zhí)行,執(zhí)行次序取決于其在模型中出現(xiàn)的先后。
3.@ole 函數(shù)
@OLE 是從 EXCEL 中引入或輸出數(shù)據(jù)的接口函數(shù),它是基于傳輸?shù)?OLE 技術(shù)。OLE傳輸直接在內(nèi)存中傳輸數(shù)據(jù),并不借助于中間文件。當(dāng)使用@OLE 時,LINGO 先裝載 EXCEL,再通知 EXCEL 裝載指定的電子數(shù)據(jù)表,最后從電子數(shù)據(jù)表中獲得 Ranges。為了使用 OLE函數(shù),必須有 EXCEL5 及其以上版本。OLE 函數(shù)可在數(shù)據(jù)部分和初始部分引入數(shù)據(jù)。
@OLE 可以同時讀集成員和集屬性,集成員最好用文本格式,集屬性最好用數(shù)值格式。原始集每個集成員需要一個單元(cell),而對于 n 元的派生集每個集成員需要 n個單元,這里第一行的 n 個單元對應(yīng)派生集的第一個集成員,第二行的 n 個單元對應(yīng)派生集的第二個集成員,依此類推。
@OLE 只能讀一維或二維的 Ranges(在單個的 EXCEL 工作表(sheet)中),但不能讀間斷的或三維的 Ranges。Ranges 是自左而右、自上而下來讀。
結(jié)果報告函數(shù)
1.@WRITE(obj1[,…,objn])
這個函數(shù)只能在數(shù)據(jù)段中使用,用于輸出一系列結(jié)果(obj1,…,objn),其中obj1, …,objn 等可以是變量(但不能只是屬性),也可以是字符串(放在單引號中的為字符串)或換行(@NEWLINE(1))等。結(jié)果可以輸出到一個文件,或電子表(如 Excel),或數(shù)據(jù)庫,這取決于@WRITE 所在的輸出語句中左邊的定位函數(shù)。例如:
DATA:
@TEXT()=@WRITE(’A is ’,A,’,B is ’,B,’,A/B is’,A/B);
ENDDATA
其中 A,B 是模型中的變量,則上面語句的作用是在屏幕上輸出 A,B 以及 A/B 的值(注意上面語句中還增加了一些字符串,使結(jié)果讀起來更方便)。假設(shè)計算結(jié)束時 A=10,B=5,則輸出為 A is 10, B is 5, A/B is 2
2.@WRITEFOR(setname[(set_index_list)[|condition]]:obj1[,objn])
這個函數(shù)可以看作是函數(shù)@WRITE 在循環(huán)情況下的推廣,它輸出集合上定義的屬性對應(yīng)的多個變量的取值(因此它實(shí)際上也是一個集合循環(huán)函數(shù))。
3.@ITERS()
這個函數(shù)只能在程序的數(shù)據(jù)段使用,調(diào)用時不需要任何參數(shù),總是返回 LINGO 求解器計算所使用的總迭代次數(shù)。例如: @TEXT()=@WRITE('Iterations= ',@ITERS());
將迭代次數(shù)顯示在屏幕上。
4.@NEWLINE(n)
這個函數(shù)在輸出設(shè)備上輸出 n 個新行(n 為一個正整數(shù))。
5.@STRLEN(string)
這個函數(shù)返回字符串“string”的長度,如@STRLEN(123)返回值為 3。
6.@NAME(var_or_row_reference)
這個函數(shù)返回變量名或行名。
7.符號“*”
在@write 和@writefor 函數(shù)中,可以使用符號“”表示將一個字符串重復(fù)多次,
用法是將“”放在一個正整數(shù) n 和這個字符串之間,表示將這個字符串重復(fù) n 次。
8.@format(value,format_descriptor)
在@write 和@writefor 函數(shù)中,可以使用@format 函數(shù)對數(shù)值設(shè)定輸出格式。其中value 表示要輸出的數(shù)值,而 format_descriptor(格式描述符)表示輸出格式。格式描述符的含義與 C 語言中的格式描述是類似的,如“12.2f”表示輸出一個十進(jìn)制數(shù),總共占 12,其中有 2 位小數(shù)。
9.@ranged(variable_or_row_name)
為了保持最優(yōu)基不變,變量的費(fèi)用系數(shù)或約束行的右端項(xiàng)允許減少的量。
10.@rangeu(variable_or_row_name)
為了保持最優(yōu)基不變,變量的費(fèi)用系數(shù)或約束行的右端項(xiàng)允許增加的量。
11.@status()
返回 LINGO 求解模型結(jié)束后的狀態(tài):
- Global Optimum(全局最優(yōu))
- Infeasible(不可行)
- Unbounded(無界)
- Undetermined(不確定)
- Feasible(可行)
- Infeasible or Unbounded(通常需要關(guān)閉“預(yù)處理”選項(xiàng)后重新求解模型,以確定模型究竟是不可行還是無界)
- Local Optimum(局部最優(yōu))
- Locally Infeasible(局部不可行,盡管可行解可能存在,但是LINGO 并沒有找到一個)
- Cutoff(目標(biāo)函數(shù)的截斷值被達(dá)到)
- Numeric Error(求解器因在某約束中遇到無定義的算術(shù)運(yùn)算而停止)
通常,如果返回值不是 0、4 或 6 時,那么解將不可信,幾乎不能用。該函數(shù)僅
12.@dual
@dual(variable_or_row_name)返回變量的判別數(shù)(檢驗(yàn)數(shù))或約束行的對偶(影
子)價格(dual prices)。
輔助函數(shù)
1.@if(logical_condition,true_result,false_result)
@if 函數(shù)將評價一個邏輯表達(dá)式 logical_condition,如果為真,返回 true_ result,否則返回 false_result。
2.@warn(’text’,logical_condition)
如果邏輯條件 logical_condition 為真,則產(chǎn)生一個內(nèi)容為’text’的信息框。
總結(jié)
以上是生活随笔為你收集整理的【Lingo】lingo使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 桌面小插件下载地址,桌面
- 下一篇: DO280介绍红帽OPENSHIFT容器