lindo常用的基本语法

上传人:小** 文档编号:93281450 上传时间:2019-07-19 格式:PPT 页数:58 大小:441.80KB
返回 下载 相关 举报
lindo常用的基本语法_第1页
第1页 / 共58页
lindo常用的基本语法_第2页
第2页 / 共58页
lindo常用的基本语法_第3页
第3页 / 共58页
lindo常用的基本语法_第4页
第4页 / 共58页
lindo常用的基本语法_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《lindo常用的基本语法》由会员分享,可在线阅读,更多相关《lindo常用的基本语法(58页珍藏版)》请在金锄头文库上搜索。

1、1、目标函数以“max”或“min”开头,max(或min)与目标函数表达式之间不能有“=”。,lindo常用的基本语法,2、变量名的长度不超过8个字符,并且必须以英文字母开头。英文字母不区分大小写。,3、目标函数与约束条件之间必须用“ st ”分开,并且“ st ”单独一行。,4、目标函数、各约束条件都必须以“回车键”结束,并且都应该是经过化简后的表达式,所有字符必须是英文状态下输入的。,5、lindo软件已规定所有的决策变量均为非负数。,6、变量与其系数之间可以有空格,乘号必须省略,式中不能有括号;约束条件的右端不能有决策变量, 左端不能有常数项;没有下标, 式中不能有分母,式中不能有“逗

2、号”和“句号”等(说明语句除外) 。,常用的基本语法,7、约束条件中的符号“”用 “=”表示,,“”用“”和“”表示。,8、输入文件中的第一行默认为目标函数,可以用 2) , 3) 等标明各约束条件,便于从输出结果中查找信息。以感叹号“!”开始的是说明语句.,9、程序最后以end结束,对于小型的规划问题,end可以省略。,常用的基本语法,整数变量(例如:gin x1)和0-1变量(例如int x3)的约束放在end之后,此时end不能省略。,10、如果所有的决策变量都是整数变量(假如有6个变量),则可以在end之后写命令:,gin 6,如果不是所有的决策变量都是整数变量,则不能采用此方法。,此

3、时,如果省略end的话,整数变量、0-1变量等限制将不起作用。,11、如果x1是整数变量,则应在end之后写上命令:,gin x1,如果x1是0-1变量,则应在end之后写上命令:,int x1,如果所有的决策变量共有6个,并且所有的决策变量都是整数,则可以在end之后写命令:,gin 6,如果x1,x2都是整数变量,但并不是所有的变量都是整数变量,则要写成,gin x1 gin x2,不能写成,gin x1,x2 或 gin x1;x2,4.2.1 LINGO软件使用格式,(1) 目标函数以“max=”或“min=”开头,其后面是目标函数的表达式。,(2) 模型以“model:”开始,以“e

4、nd”结束,,对简单的模型,“model:”及“end”也可以省略。,lingo中的语句顺序不重要,目标函数与约束条件有明显的标志,不用加其它的符号。,lingo总是根据“max=”或“min =”语句寻找目标函数,而其它的语句都是约束语句和说明语句。,除了首行和末行外,每行以 “;”结束。所有字符必须是英文状态下输入的。,1、 LINGO使用规则,LINGO软件的使用规则(2),(3) 乘号“ * ”不能省略,式中可以有括号,约束条件的右端可以有决策变量,没有下标,式中不能有分母,式中不能有“逗号”和“句号” (说明语句和函数中的内容除外) ,故目标函数和各约束约束条件都可以是没有经过化简后

5、的表达式。,(4) 英文字母不区分大小写字母,,lingo中的变量名和行名可以超过8个字符,但不能超过32个字符,并且变量名必须以字母开头,后面跟数字或字母。,(5) lingo软件已规定所有的决策变量均为非负数,,(除非用限定变量取值范围的函数free或bnd等另行说明)。,LINGO软件的使用规则(3),(6) 约束条件中的符号“”用 “ = ”或“”表示,“”用“=”或 “”表示。,(7) 计算机把输入程序中的第一行默认为目标函数,其它各约束条件可以用_1,_2标明它的行号。,(8) 虽然决策变量可以放在约束条件的右端,但为了提高Lingo的求解效率,应尽可能采用线性表达式定义目标函数和

6、约束条件。,(9) 在lingo中以感叹号“!”开始的是说明语句,并且说明语句也需要以分号“;”结束,并且除了“!”和“;”之外,说明语句中的其它字符可以是任何字符。,LINGO软件的使用规则(4),(10) lingo模型是由一系列语句组成的,即每个语句是组成lingo模型的基本部分,每个语句(目标、约束、说明语句等)都是以分号“;”结尾的,编写程序时应注意保持模型的可读性。,例如:虽然lingo允许每行写多个语句,也允许一个语句写成几行,,但最好一行只写一个语句,,并且按照语句的嵌套关系对语句安排适当的缩进,增强层次感。,LINGO软件的使用规则(5),(11) 在lingo中,以“”开头

7、的都是函数调用,,其中有:整型变量函数(bin表示0-1变量,gin表示整数变量),和上下界限定等函数(free表示去掉非负限制,bnd限定变量的上限、下限)。,这些变量的限制要放在“end”之前,否则这些变量的限制将不起作用 。,如果x1是整数变量,则应在end之前写命令:,gin(x1);,如果x1是0-1变量,则应在end之前写命令:,bin( x1);,如果所有的决策变量共有6个,并且所有的决策变量都是整数,不能写命令:,bin(6);等其它的命令,如果x1,x2都是整数变量,并且不是所有的变量都是整数变量,则要写成,gin (x1); gin (x2);,不能写成,gin (x1,x

8、2) 或其它的命令,练习:,分别用lindo、lingo编写下列数学模型的程序,(1)可以用于求线性规划及非线性规划问题,包括非线性整数规划问题。,2、lingo的优点,(2)lingo包含内置的建模语言(常称矩阵生成器),允许以简练、直观的方式描述较大规模的优化模型(成千万个约束条件和变量),,模型中所需的数据可以用一定格式保存在独立的文件中,需要时再读取数据。,在lindo中的目标函数最优值、最优解与灵敏度分析是一起显示出来,,3、 lingo中的灵敏度分析,而在lingo中,最优解、最 优值与灵敏度分析是分别用不同的命令显示出来。,lingo中的灵敏度分析的数据输出结果与lindo中的灵

9、敏性分析中输出结果是相同的。,因为lingo的求解结果中是没有灵敏度分析的,所以如果需要灵敏度分析的数据,可以通过修改选项来实现。, 先修改系统选项,启动灵敏度分析,通过修改选项得到灵敏度分析数据的步骤:,执行 “ LINGO/ options ” 菜单命令弹出 “选项” 对话框,在“ General solver ”选项卡中,,将其中左边列的第二个选项 “ Dual compulations ”(对偶计算)选项的默认设置 “prices”,改为 “ prices and Ranges ”(价格及范围)后,,先对规划问题求解一次。, 执行“LINGO/Range”菜单命令,运行后计算机则显示只

10、有灵敏度分析的数据。,一般情况下,lingo得到的都是局部最优解,要得到全局最优解,,激活全局最优求解程序的步骤,则要激活全局最优求解程序,,方法如下:,执行 “LINGO/Options” 菜单命令弹出 “选项框” 对话框,,在 “Global Solver” 选项卡上选择 “Use Global Solver” 点确定即可。,由于全局最优求解程序花费的时间可能是很长的,所以为了减少计算工作量,我们应该尽量对变量等做进一步的限制。,1、运算符,4.2.2 运算符及优先级,(1)算术运算符:,+加 -减 *乘 /除 乘方 (开方),(2)逻辑运算符:,逻辑运算结果只有真与假,在lingo中用1

11、和0表示,逻辑运算符(表达式)通常作为过滤条件使用。, #and# 与,#or# 或,#not# 非, #eq#等于,#ne#不等于,#gt#大于, #ge#大于等于,#lt#小于, #le#小于等于,即:g 大于, e 等于, l 小于, t 不等于,(3)关系运算符,2、运算符的优先级,(或=),#not# (负号),* /,+ (减法),#eq#,#ne#,#gt#,#ge#,#lt#,#le#,#and# 与,#or#, = ,高,低,sqrt(x),4.2.3 常用的函数,在Lingo中,所有的系统函数都必须是以“”开头。,1、数学函数,abs(x),求绝对值函数,,返回x的绝对值,

12、cos(x),求余弦函数,返回x的余弦值, x的单位是弧度,exp(x),计算e x 的值,log(x),计算lnx 的值,pow(x,y),计算x y 的值,sqr(x),计算x的平方,计算x的平方根,size(A),求矩阵A的元素个数,2、集合循环函数,集合循环函数是指对集合中的所有元素(下标)进行循环操作的函数,如sum,for等。,具体的使用格式:,循环函数名(循环变量所在的集 (循环变量)过滤条件:循环表达式),其中,如果在操作过程中没有过滤条件,可以省略过滤条件;如果表达式是对集合的所有循环变量进行操作,循环变量也可以省略。,集合循环函数:,for,是对集合的每个元素独立地操作一次

13、表达式 , 通常用于优化问题的约束条件;,sum,是求集合中表达式的和;,prod,是求集合中表达式的乘积;,max,是求集合中表达式的最大值;,min,是求集合中表达式的最小值;,但如果是求目标函数的最大、最小值,则是用 “max=目标函数表达式”, “min=目标函数表达式”, 而不用写。,(1)for,该函数用来产生对集成员的约束。for函数允许只输入一个约束条件,然后由lingo自动产生每个集成员的约束条件。,例4-2 产生序列 1,4,9,16,25 ,model: sets: number/15/:x; !此命令产生一个变量x,是单下标变量,其下标有5个取值; endsets fo

14、r(number(i): x(i)=i2); !此命令是对所有的下标i,分别求i 2; end,(2)sum,该函数返回遍历指定的集成员的一个表达式的和。,例4-3 求向量 5,1,3,4,6,10 前5个数的和。,model: sets: number/16/:x; endsets data: x = 5 1 3 4 6 10; !此命令给变量x具体的取值; enddata s=sum(number(i) | i #le# 5: x(i); end,3、变量定界函数,变量定界函数是对变量的取值范围附加限制。,bnd(A,x,B):,是指限定变量x的取值为 AxB(在LINDO中无此函数),g

15、in(x):,限定变量x 的取值为整数;,bin(x):,限定变量x为0-1变量,,free(x):,取消变量x的非负限制,即x可以取负数、0或正数,因为lingo原来默认所有的变量非负取值。,在lindo是用 命令int,而在lingo中没有int(x) ;,4.2.4 lingo计算输出的结果,lingo计算的输出结果与lindo计算的输出结果是完全相同的,只是输出的命令不相同。,在lindo中,最优值、最优解,影子价格与灵敏度分析的数据可以同时输出。,而在lingo 中,灵敏度分析的数据只有通过修改选项才能输出。,lingo计算输出结果,例4-1 的数学模型:,model: max=32

16、*x1+30*x2; 3*x1+4*x2=36; 5*x1+4*x2=40; 9*x1+8*x2=76; end,输出结果:,Global optimal solution found. Objective value: 282.6667 Total solver iterations: 3 Variable Value Reduced Cost X1 1.333333 0.000000 X2 8.000000 0.000000 Row Slack or Surplus Dual Price 1 282.6667 1.000000 2 0.000000 1.166667 3 1.333333 0.000000 4

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号