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’的信息框。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章