lindo常用的基本语法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在Lingo中,所有的系统函数都必须是以“@”开头。
2、集合循环函数
集合循环函数是指对集合中的所有元素(下标) 进行循环操作的函数,如@sum,@for等。
ቤተ መጻሕፍቲ ባይዱ
具体的使用格式:
@循环函数名(循环变量所在的集 (循环变量)│ 过滤条件:循环表达式) 其中,如果在操作过程中没有过滤条件,可 以省略过滤条件;如果表达式是对集合的所有循 环变量进行操作,循环变量也可以省略。
LINGO软件的使用规则(2)
(3) 乘号“ * ”不能省略,式中可以有括号,约束 条件的右端可以有决策变量,没有下标,式中不 能有分母,式中不能有“逗号”和“句号” (说明 语句和函数中的内容除外) ,故目标函数和各约束 约束条件都可以是没有经过化简后的表达式。 (4) 英文字母不区分大小写字母,lingo中的变量名 和行名可以超过8个字符,但不能超过32个字符, 并且变量名必须以字母开头,后面跟数字或字母。 (5) lingo软件已规定所有的决策变量均为非负数, (除非用限定变量取值范围的函数@free或@bnd 等另行说明)。
lindo常用的基本语法
1、目标函数以“max”或“min”开头,max(或 min)与目标函数表达式之间不能有“=”。 2、变量名的长度不超过8个字符,并且必须以英 文字母开头。英文字母不区分大小写。
3、目标函数与约束条件之间必须用“ st ”分开, 并且“ st ”单独一行。 4、目标函数、各约束条件都必须以“回车键” 结束,并且都应该是经过化简后的表达式,所 有字符必须是英文状态下输入的。
Global optimal solution found. model: Objective value: 282.6667 Total solver iterations: 3 max=32*x1+30*x2; Variable Value Reduced Cost 3*x1+4*x2<=36; X1 1.333333 0.000000 5*x1+4*x2<=40; X2 8.000000 0.000000 9*x1+8*x2<=76; Row Slack or Surplus Dual Price 1 282.6667 1.000000 end 2 0.000000 1.166667 3 4 1.333333 0.000000 0.000000 3.166667
集合循环函数:
@for @sum
是对集合的每个元素独立地操作一次表 达式 , 通常用于优化问题的约束条件; 是求集合中表达式的和;
@prod
@max
是求集合中表达式的乘积;
是求集合中表达式的最大值;
@min
是求集合中表达式的最小值;
但如果是求目标函数的最大、最小值,则是用 “max=目标函数表达式”, “min=目标函数表达式” 而不用写@。
② 执行“LINGO/Range”菜单命令,运行后计算 机则显示只有灵敏度分析的数据。
激活全局最优求解程序的步骤
一般情况下,lingo得到的都是局部最优 则要激活全局最优求解 解,要得到全局最优解, 程序, 方法如下:
执行 “LINGO/Options” 菜单命令弹出 在 “Global Solver” 选项 “选项框” 对话框, 卡上选择 “Use Global Solver” 点确定即可。 由于全局最优求解程序花费的时间可能 是很长的,所以为了减少计算工作量,我们 应该尽量对变量等做进一步的限制。
4.2.4 lingo计算输出的结果
lingo计算的输出结果与lindo计算的输出 结果是完全相同的,只是输出的命令不相同。
在lindo中,最优值、最优解,影子价格 与灵敏度分析的数据可以同时输出。
而在lingo 中,灵敏度分析的数据只有通 过修改选项才能输出。
lingo计算输出结果
例4-1 的数学模型: 输出结果:
通过修改选项得到灵敏度分析数据的步骤:
① 先修改系统选项,启动灵敏度分析 执行 “ LINGO/ options ” 菜单命令弹出 “选项” 对话框,在“ General solver ”选项卡 中, 将其中左边列的第二个选项 “ Dual compulations ” (对偶计算)选项的默认设置 “prices” 改为 “ prices and Ranges ”(价格及范围)后, 先对规划问题求解一次。
LINGO软件的使用规则(3)
(6) 约束条件中的符号“≥”用 “> = ”或“>”表示, “≤”用“<=”或 “<”表示。
(7) 计算机把输入程序中的第一行默认为目标函数, 其它各约束条件可以用[_1],[_2]标明它的行号。 (8) 虽然决策变量可以放在约束条件的右端,但为 了提高Lingo的求解效率,应尽可能采用线性表达 式定义目标函数和约束条件。 (9) 在lingo中以感叹号“!”开始的是说明语句, 并且说明语句也需要以分号“;”结束,并且除 了“!”和“;”之外,说明语句中的其它字符 可以是任何字符。
如果不是所有的决策变量都是整数变量,则 不能采用此方法。
11、如果x1是整数变量,则应在end之后写上命令: gin x1 如果x1是0-1变量,则应在end之后写上命令: int x1
如果所有的决策变量共有6个,并且所有的决 策变量都是整数,则可以在end之后写命令: gin 6
如果x1,x2都是整数变量,但并不是所有的变量 都是整数变量,则要写成 gin x1 不能 gin x1,x2 或 gin x1;x2 gin x2 写成
“≤”用“<=”表示,并且可以分别用“>”和“<”表示
常用的基本语法
9、程序最后以end结束,对于小型的规划问题, end可以省略。整数变量(例如:gin x1)和0-1 变量(例如int x3)的约束放在end之后,此时end不 能省略。 此时,如果省略end的话,整数变量、0-1变 量等限制将不起作用。 10、如果所有的决策变量都是整数变量(假如有6 个变量),则可以在end之后写命令: gin 6
3、 lingo中的灵敏度分析
在lindo中的目标函数最优值、最优解与灵敏度 而在lingo中,最优解、最 分析是一起显示出来, 优值与灵敏度分析是分别用不同的命令显示出来。 lingo中的灵敏度分析的数据输出结果与lindo 中的灵敏性分析中输出结果是相同的。 因为lingo的求解结果中是没有灵敏度分析的, 所以如果需要灵敏度分析的数据,可以通过修改 选项来实现。
4.2.1 LINGO软件使用格式 1、 LINGO使用规则
(1) 目标函数以“max=”或“min=”开头,其后面 是目标函数的表达式。 (2) 模型以“model:”开始,以“end”结束, 对简单的模型,“model:”及“end”也可以省略。 lingo中的语句顺序不重要,目标函数与约束条件 lingo总是根 有明显的标志,不用加其它的符号。 据“max=”或“min =”语句寻找目标函数,而其 除了首行和末 它的语句都是约束语句和说明语句。 行外,每行以 “;”结束。所有字符必须是英文 状态下输入的。
LINGO软件的使用规则(5)
(11) 在lingo中,以“@”开头的都是函数调用, 其中有:整型变量函数(@bin表示0-1变量, @gin表示整数变量) 和上下界限定等函数 (@free表示去掉非负限制,@bnd限定变量的 上限、下限)。
这些变量的限制要放在“end”之前,否则这 些变量的限制将不起作用 。
即:g —大于, e —等于, l —小于, t —不等于
(3)关系运算符 <(或<=)
=
>(或>=)
2、运算符的优先级
高 #not# (负号)
^
* / + (减法) #eq#,#ne#,#gt#,#ge#,#lt#,#le# #and# 与,#or#
低
> = <
4.2.3 常用的函数
1、数学函数 求绝对值函数, @abs(x) 返回x的绝对值 @cos(x) 求余弦函数,返回x的余弦值, x的单位是弧度 @exp(x) 计算e x 的值 @size(A) @log(x) 计算lnx 的值 @pow(x,y) 计算x y 的值 求矩阵A的元素个数 @sqr(x) 计算x的平方 @sqrt(x) 计算x的平方根
4.2.2 运算符及优先级
1、运算符 (1)算术运算符: +加 -减 *乘 /除 ^乘方 (开方) (2)逻辑运算符: 逻辑运算结果只有真与假,在lingo中用1和0 表示,逻辑运算符(表达式)通常作为过滤条件 使用。 ① #and# 与,#or# 或,#not# 非 ② #eq#等于,#ne#不等于,#gt#大于, #ge#大于等于,#lt#小于, #le#小于等于
3、变量定界函数
@bnd(A,x,B):是指限定变量x的取值为 A≤x≤B(在LINDO中无此函数) @gin(x): 限定变量x 的取值为整数;
变量定界函数是对变量的取值范围附加限制。
在lindo是用 限定变量x为0-1变量, @bin(x): 命令int,而在lingo中没有@int(x) ; 取消变量x的非负限制,即x可以 @free(x): 取负数、0或正数,因为lingo原来 默认所有的变量非负取值。
(1)@for
该函数用来产生对集成员的约束。@for 函数允许只输入一个约束条件,然后由lingo 自动产生每个集成员的约束条件。 例4-2 产生序列{ 1,4,9,16,25 }
model: sets: number/1..5/:x; !此命令产生一个变量x, 是单下标变量,其下标有5个取值; endsets @for(number(i): x(i)=i^2); !此命令是对 所有的下标i,分别求i 2; end
LINGO软件的使用规则(4)
(10) lingo模型是由一系列语句组成的,即每个语 句是组成lingo模型的基本部分,每个语句(目标、 约束、说明语句等)都是以分号“;”结尾的, 编写程序时应注意保持模型的可读性。
例如:虽然lingo允许每行写多个语句,也允许一 个语句写成几行, 但最好一行只写一个语句, 并且 按照语句的嵌套关系对语句安排适当的缩进,增 强层次感。
如果x1是整数变量,则应在end之前写命令: @gin(x1);
如果x1是0-1变量,则应在end之前写命令: @bin( x1); 如果所有的决策变量共有6个,并且所有的决 策变量都是整数,不能写命令: @bin(6);等其它的命令 如果x1,x2都是整数变量,并且不是所有的变 量都是整数变量,则要写成 @gin (x1); 不能 @gin (x1,x2) 或其它的命令 @gin (x2); 写成
(2)@sum
该函数返回遍历指定的集成员的一个表达 式的和。
例4-3 求向量[ 5,1,3,4,6,10 ]前5个数的和。
model: sets: number/1..6/:x; endsets data: x = 5 1 3 4 6 10; !此命令给变量x具体的取值; enddata s=@sum(number(i) | i #le# 5: x(i)); end
2、 min Z x1 3 x2 x1 2 x2 6 s.t. 3 x1 x2 15 x , x 0 1 2
2、lingo的优点 (1)可以用于求线性规划及非线性规划问 题,包括非线性整数规划问题。
(2)lingo包含内置的建模语言(常称矩阵 生成器),允许以简练、直观的方式描述 较大规模的优化模型(成千万个约束条件 和变量), 模型中所需的数据可以用一定格 式保存在独立的文件中,需要时再读取数据。
练习: 分别用lindo、lingo编写下列数学模型 的程序
1 、 max Z x1 2 x2 x3 2 x1 x2 x3 4 s.t. x1 2 x2 6 x , x , x 0 1 2 3
3、min Z 2 x1 5 x2 2 x1 x2 x3 6 s.t. x2 3 x3 9 x , x 0 1 2
5、lindo软件已规定所有的决策变量均为非负数。
常用的基本语法
6、变量与其系数之间可以有空格,乘号必须省 略,式中不能有括号;约束条件的右端不能有决 策变量, 左端不能有常数项;没有下标, 式中不能 有分母,式中不能有“逗号”和“句号”等(说明 语句除外) 。 7、约束条件中的符号“≥”用 “>=”表示, 8、输入文件中的第一行默认为目标函数,可以 用 2) , 3) 等标明各约束条件,便于从输出结果中 查找信息。以感叹号“!”开始的是说明语句.