1.语法规定
Lingo软件的最优化模型中包含目标函数、决策变量、约束条件三部分,模型在输入时基本保证与书写体一致,但是输入窗口建立模型时仍然需要注意以下几点:
(1)每行都必须用英文半角状态下的分号“;”结尾;
(2)一个表达式可以分几行输入,待表达式完全输入用分号结尾;(3)注释语句以“!”开始,“;”结束,可以跨行输入;
(4)变量名称等符号不区分英文字母的大小写;
(5)变量名必须以英文字母开始,可以包括数字、下划线等其他字符;
(6)默认所有变量都是非负的;
(7)所有内部函数以“@”开始。
2.基本Lingo模型
一个基本Lingo模型以关键词“model”开始,“end”结束,主要包括集合段(Sets)、数据段(Data)、初始段(Init)、计算段(Calc)、目标与约束段。
(1)集合段:Lingo中集合段以关键词“SETS:”开始,“ENDSETS”结束,主要包括原始集(primitive set)和派生集(derived set)两种集合,派生集中的成员来自于其他已经存在的集合。应当注意集合中的成员不在集合中定义,而是在数据段定义。
原始集合的构造语法为:
SETS:
集合名称/成员列表/:属性列表;
ENDSETS
派生集合的构造语法为:SETS:
集合名称(已定义集合列表)/成员列表/:属性列表;
【示例3.2.1】分别建立两个原始集合,再由原始集合建立一个关系的派生集。
Lingo中编写集合段代码如下:
(2)数据段:以关键词“DATA:”开始,“ENDDATA”结束,对Lingo中的变量或者参数进行赋值。
【示例3.2.2】按照下表中的数据对示例3.2.1中集合set1的成员进行赋值。
表3.2.1 集合SET1的数据集
Lingo软件中编写数据段代码如下:
(3)初始段:主要对非线性问题中的变量赋初值,Lingo软件中的求解器可以自由改变初始段中初始化变量的值,该部分以关键词“INT:”开始,“ENDINT”结束。
【示例3.2.3】请在初始段将变量s,t分别赋值为0,1。
(4)计算段:以关键词“CALC:”开始,“ENDCALC”结束,主要在数据段输入完成后、正式求解模型前对原始数据进行处理。计算段不能含有变量,必须是对已知数据的运算。
【示例3.2.4】设已知变量b=1,请将b的取值修改为0。
(5)目标与约束段:定义目标函数、约束条件等,但这部分没有段的开始和约束标记,一般会用到Lingo的内部函数。
3.基本数学函数与常用运算符(www.xing528.com)
Lingo软件中自带了大量的基本运算函数和运算符,常用的数学函数命令见表3.2.2,逻辑运算符见表3.2.3。
表3.2.2 Lingo软件基本数学函数
表3.2.3 Lingo软件基本运算符
这些运算符的优先级由高到低为:#not#、#eq#、#ne#、#gt#、#ge#、#lt#、#le#、#and#、#or#。
Lingo软件有三种关系运算符:“=”、“<=”和“>=”,还能用“<”表示小于等于关系,“>”表示大于等于关系,但是不支持严格小于和严格大于关系运算符。
【示例3.2.5】用Lingo软件求解线性规划问题。
Lingo软件输入窗口编写代码如下:
图3.2.4 示例3.2.5的求解窗口
注 Lingo软件输入窗口中遇到数字与变量相乘时,必须输入乘法符号“*”。
运行后得到输出结果如图3.2.5所示。
图3.2.5 示例3.2.5解的报告窗口
从上述报告可以看出,当x 1=4,x 2=2时,取得最优解z=14。
【示例3.2.6】用Lingo软件求解非线性规划问题。
Lingo软件输入窗口编写代码如下:
图3.2.6 示例3.2.6的求解窗口
运行后得到输出结果如图3.2.7所示。
图3.2.7 示例3.2.6解的报告窗口
从上述结果可以看出,当x 1=0.5,x 2=1.5时,取得最优解z=0.5。
【能力训练3.2】
1.填空题:
(1)Lingo软 件可以求解的问题有____________和____________;
(2)Lingo软件中自带函数函数以__________开头,如函数@abs(x)的含义是________________;
(3)生成一个学生的原始集合,包含成员学生甲、乙、丙,具体命令为________;
(4)Lingo软件中的注释语句以__________开始,以__________结束;
(5)Lingo软件中最优化模型中包含__________、__________、__________三部分。
2.在Lingo软件中编写代码,计算下列优化问题:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。