在LINGO中的逻辑符号.docx
- 文档编号:25317362
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:6
- 大小:18.99KB
在LINGO中的逻辑符号.docx
《在LINGO中的逻辑符号.docx》由会员分享,可在线阅读,更多相关《在LINGO中的逻辑符号.docx(6页珍藏版)》请在冰豆网上搜索。
在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#
例4.2逻辑运算符示例
2#gt#3#and#4#gt#2,其结果为假(0).
4.1.3关系运算符
在LINGO中,关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于、小于等于、或大于等于右边,形成模型的一个约束条件.关系运算符与逻辑运算符#eq#、#le#、#ge#截然不合,前者是模型中该关系运算符所指定关系的为真描述,尔后者仅仅判断一个该关系是否被满足:
满足为真,不满足为假.
LINGO有三种关系运算符:
“=”、“<=”和“>=”.LINGO中还能用“<”暗示小于等
11
于关系,“>”暗示大于等于关系.LINGO其实不支持严格小于和严格大于关系运算符.然而,如果需要严格小于和严格大于关系,比方让A严格小于B:
A
那么可以把它酿成如下的小于等于表达式:
A+ε<=B,
这里ε是一个小的正数,它的值依赖于模型中A小于B多少才算不等.
下面给出以上三类操纵符的优先级:
高#not#﹣(取反)
^
﹡/
﹢﹣
#eq##ne##gt##ge##lt##le#
#and##or#
低<==>=
4.2数学函数
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.5变量界定函数
变量界定函数实现对变量取值规模的附加限制,共4种:
@bin(x)限制x为0或1
@bnd(L,x,U)限制L≤x≤U
@free(x)取消对变量x的默认下界为0的限制,即x可以取任意实数
@gin(x)限制x为整数
在默认情况下,LINGO规则变量是非负的,也就是说下界为0,上界为+∞.@free取消了默认的下界为0的限制,使变量也可以取负值.@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束.
4.6集操纵函数
LINGO提供了几个函数帮忙处理集.
1.@in(set_name,primitive_index_1[,primitive_index_2,…])
如果元素在指定集中,前往1;不然前往0.
2.@index([set_name,]primitive_set_element)
该函数前往在集set_name中原始集成员primitive_set_element的索引.如果set_name被疏忽,那么LINGO将前往与primitive_set_element匹配的第一个原始集成员的索引.如果找不到,则产生一个错误.
3.@wrap(index,limit)
该函数前往j=index-k*limit,其中k是一个整数,取适当值包管j落在区间[1,limit]内.该函数相当于index模limit再加1.该函数在循环、多阶段筹划编制中特别有用.
4.@size(set_name)
该函数前往集set_name的成员个数.在模型中明确给出集大小时最好使用该函数.它的使用使模型加倍数据中立,集大小改动时也更容易维护.
4.7集循环函数
集循环函数遍历整个集进行操纵.其语法为
@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
前往指定的集成员的一个表达式的最小值或最大值.
4.8输入和输出函数
输入和输出函数可以把模型和外部数据比方文本文件、数据库和电子表格等连接起来.
1.@file函数
该函数用从外部文件中输入数据,可以放在模型中任何地方.该函数的语法格局为@file(’filename’).这里filename是文件名,可以采取相对路径和绝对路径两种暗示方法.@file函数对同一文件的两种暗示方法的处理和对两个不合的文件处理是一样的,这一点必须注意.把记实结束标识表记标帜(~)之间的数据文件部分称为记实.如果数据文件中没有记实结束标识表记标帜,那么整个文件被看作单个记实.注意到除了记实结束标识表记标帜外,模型的文本和数据同它们直接放在模型里是一样的.
我们来看一下在数据文件中的记实结束标识表记标帜连同模型中@file函数调用是如何任务的.当在模型中第一次调用@file函数时,LINGO打开数据文件,然后读取第一个记实;第二次调用@file函数时,LINGO读取第二个记实等等.文件的最后一条记实可以没有记实结束标识表记标帜,当遇到文件结束标识表记标帜时,LINGO会读取最后一条记实,然后封闭文件.如果最后一条记实也有记实结束标识表记标帜,那么直到LINGO求解完当前模型后才封闭该文件.如果多个文件保持打开状态,可能就会导致一些问题,因为这会使同时打开的文件总数超出允许同时打开文件的上限16.
当使用@file函数时,可把记实的内容(除了一些记实结束标识表记标帜外)看作是替代模型中@file(’filename’)位置的文本.这也就是说,一条记实可以是声明的一部分,整个声明,或一系列声明.在数据文件中注释被疏忽.注意在LINGO中不允许嵌套调用@file函数.
2.@text函数
该函数被用在数据部分用来把解输出至文本文件中.它可以输出集成员和集属性值.其语法为
@text([’filename’])
这里filename是文件名,可以采取相对路径和绝对路径两种暗示方法.如果疏忽filename,那么数据就被输出到尺度输出设备(大多数情形都是屏幕).@text函数仅能出现在模型数据部分的一条语句的左边,右边是集名(用来输出该集的所有成员名)或集属性名(用来输出该集属性的值).
我们把用接口函数产生输出的数据声明称为输出操纵.输出操纵仅当求解器求解完模型后才执行,执行次序取决于其在模型中出现的先后.
3.@ole函数
@OLE是从EXCEL中引入或输出数据的接口函数,它是基于传输的OLE技巧.OLE传输直接在内存中传输数据,其实不借助于中间文件.当使用@OLE时,LINGO先装载EXCEL,再通知EXCEL装载指定的电子数据表,最后从电子数据表中取得Ranges.为了使用OLE函数,必须有EXCEL5及其以上版本.OLE函数可在数据部分和初始部分引入数据.
@OLE可以同时读集成员和集属性,集成员最好用文本格局,集属性最好用数值格局.原始集每个集成员需要一个单元(cell),而对于n元的派生集每个集成员需要n个单元,这里第一行的n个单元对应派生集的第一个集成员,第二行的n个单元对应派生集的第二个集成员,依此类推.
@OLE只能读一维或二维的Ranges(在单个的EXCEL任务表(sheet)中),但不克不及读连续
19
的或三维的Ranges.Ranges是自左而右、自上而下来读.
为了在EXCEL中定义Ranges名:
①按鼠标左键拖曳选择Range,
②释放鼠标按钮,
③选择“拔出|名称|定义”,
④输入希望的名字,
⑤点击“确定”按钮.
我们在模型的数据部分用如下代码从EXECL中引入数据:
这一等价描述使得变量名和Ranges不合亦可.
4.@ranged(variable_or_row_name)
为了保持最优基不变,变量的用度系数或约束行的右端项允许削减的量.
5.@rangeu(variable_or_row_name)
为了保持最优基不变,变量的用度系数或约束行的右端项允许增加的量.
6.@status()
前往LINGO求解模型结束后的状态:
0GlobalOptimum(全局最优)
1Infeasible(不成行)
2Unbounded(无界)
3Undetermined(不确定)
4Feasible(可行)
5InfeasibleorUnbounded(通常需要封闭“预处理”选项后重新求解模型,以确定模型究竟是不成行仍是无界)
6LocalOptimum(局部最优)
7LocallyInfeasible(局部不成行,尽管可行解可能存在,但是LINGO并没有找到一个)
8Cutoff(目标函数的截断值被达到)
9NumericError(求解器因在某约束中遇到无定义的算术运算而停止)
通常,如果前往值不是0、4或6时,那么解将不成信,几近不克不及用.该函数仅被用在模型的数据部分来输出数据.
7.@dual
@dual(variable_or_row_name)前往变量的判别数(查验数)或约束行的对偶(影子)价钱(dualprices).
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINGO 中的 逻辑 符号