1、LINGO函数LINGO函数有了前几节的基础知识,再加上本节的内容,你就能够借助于LINGO建立并求解复杂的优化模型了。LINGO有9种类型的函数:1 基本运算符:包括算术运算符、逻辑运算符和关系运算符2 数学函数:三角函数和常规的数学函数3 金融函数:LINGO提供的两种金融函数4 概率函数:LINGO提供了大量概率相关的函数5 变量界定函数:这类函数用来定义变量的取值范围6 集操作函数:这类函数为对集的操作提供帮助7 集循环函数:遍历集的元素,执行一定的操作的函数8 数据输入输出函数:这类函数允许模型和外部数据源相联系,进行数据的输入输出9 辅助函数:各种杂类函数4.1 基本运算符这些运算
2、符是非常基本的,甚至可以不认为它们是一类函数。事实上,在LINGO中它们是非常重要的。4.1.1 算术运算符算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符:乘方乘除加减LINGO唯一的一元算术运算符是取反函数“”。这些运算符的优先级由高到底为:高(取反) 低运算符的运算次序为从左到右按优先级高低来执行。运算的次序可以用圆括号“()”来改变。例4.1 算术运算符示例。253,(24)5等等。4.1.2 逻辑运算符在LINGO中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。LINGO具有种逻辑运算符:#
3、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时,结果为fa
4、lse;否则为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有三种关系运算符:“=”、“=
5、”。LINGO中还能用“”表示大于等于关系。LINGO并不支持严格小于和严格大于关系运算符。然而,如果需要严格小于和严格大于关系,比如让A严格小于B:AB,那么可以把它变成如下的小于等于表达式: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) 返回
6、常数e的x次方log(x) 返回x的自然对数lgm(x) 返回x的gamma函数的自然对数sign(x) 如果x=0时,返回不超过x的最大整数;当x= required(J);end计算的部分结果为Global optimal solution found at iteration: 0 Objective value: 22.00000 Variable Value Reduced Cost REQUIRED( MON) 20.00000 0.000000 REQUIRED( TUE) 16.00000 0.000000 REQUIRED( WED) 13.00000 0.000000 RE
7、QUIRED( THU) 16.00000 0.000000 REQUIRED( FRI) 19.00000 0.000000 REQUIRED( SAT) 14.00000 0.000000 REQUIRED( SUN) 12.00000 0.000000 START( MON) 8.000000 0.000000 START( TUE) 2.000000 0.000000 START( WED) 0.000000 0.3333333 START( THU) 6.000000 0.000000 START( FRI) 3.000000 0.000000 START( SAT) 3.00000
8、0 0.000000 START( SUN) 0.000000 0.000000从而解决方案是:每周最少需要22个职员,周一安排8人,周二安排2人,周三无需安排人,周四安排6人,周五和周六都安排3人,周日无需安排人。 4.8 输入和输出函数输入和输出函数可以把模型和外部数据比如文本文件、数据库和电子表格等连接起来。1file函数 该函数用从外部文件中输入数据,可以放在模型中任何地方。该函数的语法格式为file(filename)。这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。file函数对同一文件的两种表示方式的处理和对两个不同的文件处理是一样的,这一点必须注意。例4.
9、14 以例1.2来讲解file函数的用法。注意到在例1.2的编码中有两处涉及到数据。第一个地方是集部分的6个warehouses集成员和8个vendors集成员;第二个地方是数据部分的capacity,demand和cost数据。为了使数据和我们的模型完全分开,我们把它们移到外部的文本文件中。修改模型代码以便于用file函数把数据从文本文件中拖到模型中来。修改后(修改处代码黑体加粗)的模型代码如下:model:!6发点8收点运输问题;sets: warehouses/ file(1_2.txt) /: capacity; vendors/ file(1_2.txt) /: demand; li
10、nks(warehouses,vendors): cost, volume;endsets!目标函数; min=sum(links: cost*volume);!需求约束; for(vendors(J): sum(warehouses(I): volume(I,J)=demand(J);!产量约束; for(warehouses(I): sum(vendors(J): volume(I,J)= required(J);end3ole函数OLE是从EXCEL中引入或输出数据的接口函数,它是基于传输的OLE技术。OLE传输直接在内存中传输数据,并不借助于中间文件。当使用OLE时,LINGO先装载E
11、XCEL,再通知EXCEL装载指定的电子数据表,最后从电子数据表中获得Ranges。为了使用OLE函数,必须有EXCEL5及其以上版本。OLE函数可在数据部分和初始部分引入数据。OLE可以同时读集成员和集属性,集成员最好用文本格式,集属性最好用数值格式。原始集每个集成员需要一个单元(cell),而对于n元的派生集每个集成员需要n个单元,这里第一行的n个单元对应派生集的第一个集成员,第二行的n个单元对应派生集的第二个集成员,依此类推。OLE只能读一维或二维的Ranges(在单个的EXCEL工作表(sheet)中),但不能读间断的或三维的Ranges。Ranges是自左而右、自上而下来读。例4.16sets: PRODUCT; !产品; MACHINE; !机器; WEEK; !周; ALLOWED(PRODUCT,MACHINE,WEEK):x,y; !允许组合及属性;endsetsdata: rate=0.01; PRODUCT,MACHINE,WEEK,ALLOWED,x,y=OLE(D:IMPORT.XLS
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1