lingo软件及其应用(经典)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
!集部分; sets: students:sex,age; endsets !数据部分; data: students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13; enddata
集合元素的隐式列举
类型 数字型 字符数字型 星期型 示例集合的元素 1, 2, 3, 4, 5 Car101, car102, … , car208 dayM..dayN MON..FRI MON, TUE, WED, THU, FRI OCT, NOV, DEC, 月份型 monthM..monthN OCT..JAN JAN 年份- monthYearM..mont OCT2001..JAN OCT2001, 2002 NOV2001, 月份型 hYearN DEC2001, JAN2002 隐式列举格式 1..n stringM..stringN 示例 1..5 Car101..car208
LINGO软件及其应用
薛申芳 2009.3.15
目录
1 软件平台 2 lingo编程 3 应用举例
1 软件平台
(1)美国芝加哥(Chicago)大学的Linus Schrage (莱纳斯.施拉盖 )教授于1980年前后开发。 (2) LINGO: Linear Interactive General Optimizer (线性交互式通用优化器)。 (3)用来求解的优化模型(连续优化和整数规 划(IP))。 类型:线性规划(LP)、二次规划(QP)、非 线性规划(NLP)。 (4)LINGO的界面如下
(2) 变量界定函数 @bnd(L,x,U):限定L<x<U; @bin(x):限定x取0、1值; @free(x):取消x的非负限制; @gin(x):限定x为整数(general interger) (3) 集合循环函数 @function(setname(index_list)|condition:expression) 其中function=for、max、min or sum。 (4) txt文件与lingo变量之间的数据连接 @file(‘外部文件路径\文件名.txt’):把外部txt文件数据传到lingo; @txt((‘外部文件路径\文件名.txt’):把lingo变量数据传到外部.txt文件. sets: s/1..10/; ss(s,s):x1; endsets data: x1 = @file(‘C:\Documents and Settings\Owner\桌面\t.txt’); enddata
sets: years/1..5/: capacity; endsets data: capacity = ,34,20,,; enddata
属性capacity的第2个 和第3个值分别为34 和20,其余的未知
2.5初始段
init: 变量列=数据列; Endinit 说明:(1)初始部分输入的值仅被LINGO求解器当作初始点来 用,并且仅仅对非线性模型有用。和数据部分指定变量的值 不同,LINGO求解器可以自由改变初始部分初始化的变量的 值。 (2)初始部分的初始声明规则和数据部分的数据声明规则相同。 也就是说,我们可以在声明的左边同时初始化多个集属性, 可以把集属性初始化为一个值,可以用问号实现实时数据处 理,还可以用逗号指定未知数值。
除“LG4”文件外,这里的另外 几种格式的文件其实都是普通 的文本文件,可以用任何文本 编辑器打开和编辑
(8) 状态窗口的参数解释
• 运行状态窗口
Variables(变量数量): 变量总数(Total)、 非线性变量数(Nonlinear)、 整数变量数(Integer)。 Constraints(约束数量): 约束总数(Total)、 非线性约束个数(Nonlinear)。 Nonzeros(非零系数数量): 总数(Total)、 非线性项系数个数(Nonlinear)。 Generator Memory Used (K) (内存使用 量) • Elapsed Runtime (hh:mm:ss) (求解花费的时间)
Row Slack or Surplus Dual Price 1 7.454545 1.000000 2 0.000000 0.9090909E-01 3 0.000000 0.5454545
(7) Lingo的不同保存类型
“LG4”表示LINGO 格式的 模型文件,是一种特殊的二 进制格式文件,保存了我们 在模型窗口中所能够看到的 所有文本和其他对象及其格 式信息,只有LINGO 能读 出它,用其他系统打开这种 文件时会出现乱码 “LNG”表示LINGO文本文 件,以这个格式保存模型时 系统 将给出警告,因为模 型中的格式信息(如字体、 颜色等)将会丢失 “LDT”表示数据文件 “LTF”表示 命令脚本文件 “LGR”表示 报告文件
选 项 设 置 : Ctrl+I
关闭所有窗口:Alt+X
匹配括号:Ctrl+P
打印文件:F7 取消操作: Ctrl+Z 显示解答:Alt+O 在线帮 助:F1
保存文件: F4
粘贴:Ctrl+V
定位某 行: ctrl+T
模型图示:Ctrl+K
平铺窗口:Alt+T
新建文件:F2
剪切:Ctrl+X
恢复操作: Ctrl+Y
2.3 运算符的优先级
优先级 最高
最低
运算符 #NOT# —(负号) ^ * / + - #EQ#相等 #NE#不相等 #GT#大 于 #GE#大于或等于 #LT# #LE# #AND# #OR# <(=) = >(=)
2.4 数据段
data: 变量1=数据列; 变量2=数据列; ……; Enddata 例1
求解模型:Ctrl+S
窗口后置:Ctrl+B
上下文相关的 帮助
(6)LINGO 模型的最基本特
征: 有max=(或min=) 每行后面均有一个分号“;” 系数与变量间有“*” 首行可增添:”model:”,末行增 添”end”
max=2*x+3*y; 4*x+3*y<10; 3*x+5*y<12;
Global optimal solution found. Objective value: 7.454545 Total solver iterations: 2 Variable Value Reduced Cost X 1.272727 0.000000 Y 1.636364 0.000000
集合的类型
setname(parent_set_list) [/member_list/] [: attribute_list];
集合
setname [/member_list/] [: attribute_list];
派生集合
基本集合
稀疏集合
稠密集合 直接列举法 隐式列举法
元素列表法 元素过滤法
说明: 集名字必须严格符合标准命名规则:以字母或下划线 (_)为首字符,其后由字母(A—Z)、下划线、阿 拉伯数字(0,1,…,9)组成的总长度不超过32个 字符的字符串,且不区分大小写。 如果集成员放在集定义中,那么对它们可采取显式罗 列(必须为每个成员输入一个不同的名字,中间用空 格或逗号搁开)和隐式罗列(不必罗列出每个集成员。 可采用如下语法: setname/member1..memberN/[: attribute_list]; 这里的 member1 是集的第一个成员名,memberN 是 集的最末一个成员名。LINGO 将自动产生中间的所 有成员名)两种方式。如果集成员不放在集定义中, 那么可以在随后的数据部分定义它们,如:
数据段(DATA ENDDATA)
初始段(INIT ENDINIT)
目标与约束段
2.2 集合段 (1)集:集是一群相联系的对象(集部分是LINGO模 型的一个可选部分,即一个模型可以没有集部分,或 有一个简单的集部分,或有多个集部分一个集部分可 以放置于模型的任何地方,但是一个集及其属性在模 型约束中被引用之前必须定义了它们,集部分以关键 字“sets:”开始,以“endsets”结束 (2)成员:集的对象 (3)属性:集成员可能有一个或多个与之有关联的特 征,称为属性(属性值可以预先给定,也可以是未知 的,有待于lINGO求解) (4)集的类型
有效步数
2 lingo编程 2.1 LINGO模型构成的4个段 (1)集合段(SETS ENDSETS) (2)数据段(DATA ENDDATA) (3)初始段(INIT ENDINIT) (4)目标与约束段
Lingo的编程 LINGO模型的构成:4个段 优化问题的一种建模语言。使用者可以只用键 集合段(SETS ENDSETS) 入一行文字就可以建立起含有大规模变量的目 标函数和成千上万条约束
SETS: CITIES /A1,A2,A3,B1,B2/; ROADS(CITIES, CITIES)/ A1,B1 A1,B2 A2,B1 A3,B2/:D; ENDSETS
SETS: STUDENTS /S1..S8/; PAIRS( STUDENTS, STUDENTS) | &2 #GT# &1: BENEFIT, MATCH; ENDSETS
• LINGO软件的主窗口(用 户界面),所有其他窗口 都在这个窗口之内。
• 当前光标 的位置 • 模型窗口(Model Window),用于输入 LINGO优化模型(即 LINGO程序)。
• 状态行(最左边显 示“Ready”,表示 “准备就绪”)
• 当前时间
(5)工具栏
复制:Ctrl+C 打开文件:F3 查找:Ctrl+F
sets: set1/A,B,C/: X,Y; endsets data: X=1,2,3;!注意属性值的个数必须等于集成员的个数。 Y=4,5,6; enddata
例2 有时只想为一个集的某个属性的部分成员指定值, 而让该属性的其余成员的保持未知,以便让LINGO去 求出它们的最优值。在数据声明中输入两个相连的逗 号表示该位置对应的集成员的属性值未知。两个逗号 间可以有空格 。
init: X, Y = 0, .1; endinit Y=@log(X); X^2+Y^2<=1; 好的初始点会减少 模型的求解时间。
init: X, Y = , .1; endinit
init: X, Y = ?, .1; endinit
2.6 目标和约束段 目标函数 约束条件 2.7 各种函数 (1) 常用函数 @sin(x); @cos(x); @tan(x); @exp(x); @log(x); @abs(x); @smax(x); @smin(x); @sign(x);符号函数(与数学中的符号函数一致) @floor(x);原点方向取整
求解 器(求 解程 序)状 态框
解的目标函数值
目前为止的 迭代次数
• 运行状态窗口
使用的特殊求解程序 : B-and-B (分枝定界算法) Global (全局最优求解程序) Multistart(用多个初始点求解的程序)
目前为止找到的可行 解的最佳目标函数值 扩展 的求 解器 (求解 程序) 状态 框 目标函数值的界 特殊求解程序当前运行步数: 分枝数(对B-and-B程序); 子问题数(对Global程序); 初始点数(对Multistart程序)
百度文库
• 运行状态窗口
当前模型的类型 :LP,QP,ILP,IQP,PILP, PIQP,NLP,INLP,PINLP (以I开头表示 IP,以PI开头表示PIP)
当前解的状态 : "Global Optimum", "Local Optimum", "Feasible", "Infeasible“(不可行), "Unbounded“(无界), "Interrupted“(中断), "Undetermined“(未确定) 当前约束不满足的总量(不是不 满足的约束的个数):实数(即使 该值=0,当前解也可能不可行, 因为这个量中没有考虑用上下界 命令形式给出的约束)