Lingo運算符、常用函數的用法

Lingo的主要應用範圍
LINGO 是用來求解線性和非線性優化問題的簡易工具。LINGO 內置了一種建立最優化模型的語言,可以簡便地表達大規模問題。


Lingo中邏輯運算符
LINGO具有9種邏輯符號

  • #not# 否定該操作數的邏輯值,#not#是一個一元運算符
  • #eq# 若兩個運算數相等,則爲true;否則爲flase
  • #ne# 若兩個運算符不相等,則爲true;否則爲flase
  • #gt# 若左邊的運算符嚴格大於右邊的運算符,則爲true;否則爲flase
  • #ge# 若左邊的運算符大於或等於右邊的運算符,則爲true;否則爲flase
  • #lt# 若左邊的運算符嚴格小於右邊的運算符,則爲true;否則爲flase
  • #le# 若左邊的運算符小於或等於右邊的運算符,則爲true;否則爲flase
  • #and# 僅當兩個參數都爲true 時,結果爲true;否則爲flase
  • #or# 僅當兩個參數都爲false 時,結果爲false;否則爲true

這些運算符的優先級由高到低爲:

高  #not#
    #eq#  #ne# #gt# #ge# #lt# #le#
低  #and# #or#

例子

2 #gt# 3 #and# 4 #gt# 2,其結果爲假(0)。


Lingo中關係運算符
關係運算符
在LINGO中,關係運算符主要是被用在模型中,來指定一個表達式的左邊是否等於、小於等於、或者大於等於右邊,形成模型的一個約束條件。關係運算符與邏輯運算符截然不同,前者是模型中該關係運算符所指定關係的爲真描述,而後者僅僅判斷一個該關係是否被滿足:滿足爲真,不滿足爲假。
LINGO有三種關係運算符:“=”、“<=”和“>=”。LINGO中還能用“<”表示小於等於關係,“>”表示大於等於關係。LINGO 並不支持嚴格小於和嚴格大於關係運算符。


數學函數
LINGO提供了大量的標準數學函數
@abs(x) 返回x 的絕對值
@sin(x) 返回x 的正弦值,x 採用弧度制
@cos(x) 返回x 的餘弦值
@tan(x) 返回x 的正切值
@exp(x) 返回常數e 的x 次方
@log(x) 返回x 的自然對數
@lgm(x) 返回x 的gamma 函數的自然對數
@sign(x) 如果x<0 返回-1;否則,返回1
@floor(x) 返回x的整數部分。當x>=0 時,返回不超過x 的最大整數;當x<0
時,返回不低於x 的最大整數。
@smax(x1,x2,…,xn) 返回x1,x2,…,xn 中的最大值
@smin(x1,x2,…,xn) 返回x1,x2,…,xn 中的最小值


變量界定函數
變量界定函數實現對變量取值範圍的附加限制,共4種
@bin(x) 限制x 爲0 或1 — 用於0-1規劃
@bnd(L,x,U) 限制L≤x≤U
@free(x) 取消對變量x 的默認下界爲0 的限制,即x 可以取任意實數
@gin(x) 限制x 爲整數
在默認情況下,LINGO 規定變量是非負的,也就是說下界爲0,上界爲+∞。@free 取消
了默認的下界爲0的限制,使變量也可以取負值。@bnd用於設定一個變量的上下界,它也可
以取消默認下界爲0的約束。


集循環函數
其語法爲
@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集。
1. @for
該函數用來產生對集成員的約束。基於建模語言的標量需要顯式輸入每個約束。@for函數允許只輸入一個約束,然後LINGO 自動產生每個集成員的約束。
2. @sum
該函數返回遍歷指定的集成員的一個表達式的和。
3. @min和@max
返回指定的集成員的一個表達式的最小值或最大值。


輔助函數

  1. @if(logical_condition,true_result,false_result)
    @if 函數將評價一個邏輯表達式logical_condition,如果爲真返回true_ result,
    否則返回false_result。
    2.@warn(’text’,logical_condition)
    如果邏輯條件logical_condition爲真,則產生一個內容爲’text’的信息框。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章