好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

在LINGO中的逻辑符号.doc

5页
  • 卖家[上传人]:人***
  • 文档编号:450246630
  • 上传时间:2024-02-05
  • 文档格式:DOC
  • 文档大小:19.50KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 真诚为您提供优质参考资料,若有不当之处,请指正在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=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;否则返回02.@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的或三维的RangesRanges是自左而右、自上而下来读为了在EXCEL中定义Ranges名:① 按鼠标左键拖曳选择Range,② 释放鼠标按钮,③ 选择“插入|名称|定义”,④ 输入希望的名字,⑤ 点击“确定”按钮我们在模型的数据部分用如下代码从EXECL中引入数据:这一等价描述使得变量名和Ranges不同亦可4.@ranged(variable_or_row_name)为了保持最优基不变,变量的费用系数或约束行的右端项允许减少的量5.@rangeu(variable_or_row_name)为了保持最优基不变,变量的费用系数或约束行的右端项允许增加的量6.@status()返回LINGO求解模型结束后的状态:0 Global Optimum(全局最优)1 Infeasible(不可行)2 Unbounded(无界)3 Undetermined(不确定)4 Feasible(可行)5 Infeasible or Unbounded(通常需要关闭“预处理”选项后重新求解模型,以确定模型究竟是不可行还是无界)6 Local Optimum(局部最优)7 Locally Infeasible(局部不可行,尽管可行解可能存在,但是LINGO并没有找到一个)8 Cutoff(目标函数的截断值被达到)9 Numeric Error(求解器因在某约束中遇到无定义的算术运算而停止)通常,如果返回值不是0、4或6时,那么解将不可信,几乎不能用。

      该函数仅被用在模型的数据部分来输出数据7.@dual@dual(variable_or_row_name)返回变量的判别数(检验数)或约束行的对偶(影子)价格(dual prices)。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.