LINGO软件介绍
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:邮局一周中每天需要不同数目的雇员,设周一 至少20人,周二至少16人,13,16,19,14,12人,又 规定应聘者需连续工作5天,问邮局每天聘多少雇 员才能既满足需求,又使聘用总人数最少。 min =s1+s2+s3+s4+s5+s6+s7; s1+s4+s5+s6+s7>=20; !周1雇员数; s1+s2+s5+s6+s7>=16; !周2雇员数; s1+s2+s3+s6+s7>=13; !周3雇员数; s1+s2+s3+s4+s7>=16; !周4雇员数; s1+s2+s3+s4+s5>=19; !周5雇员数; s2+s3+s4+s5+s6>=14; !周6雇员数; s3+s4+s5+s6+s7>=12; !周7雇员数;
五个基本的组成部分: 1.变量定义; 2.数据输入; 3.目标函数; 4.约束; 5.变量取值范围。
结束。 (1) 每条语句后必须使用分号“;”结束。问题 ) 每条语句后必须使用分号“ 模型必须由MODEL命令开始,END结束。 命令开始, 结束。 模型必须由 命令开始 结束 命令来作为输入问题模型的开始, (2) 用MODEL命令来作为输入问题模型的开始, ) 命令来作为输入问题模型的开始 格式为MODEL:statement (语句)。 语句)。 格式为 : (3) 目标函数必须由“min =”或“max =”开头。 开头。 ) 目标函数必须由“ 或 开头 (4) 数字与变量之间 变量与变量之间要使用运 ) 数字与变量之间,变量与变量之间要使用运 算符。 如 号等 号等) 算符。(如*号等
模型的初始部分 初始部分是LINGO提供的另一个可选部分。在 初始部分中,可以输入初始声明 初始声明(initialization 初始声明 statement),和数据部分中的数据声明相同。 对实际问题的建模时,初始部分并不起到描述 模型的作用,在初始部分输入的值仅被LINGO 求解器当作初始点来用,并且仅仅对非线性模 型有用。和数据部分指定变量的值不同, LINGO求解器可以自由改变初始部分初始化的 变量的值。 一个初始部分以“init:”开始,以“endinit”结束。 初始部分的初始声明规则和数据部分的数据声 明规则相同。
例:
min f(x)=(x1-1)^2+(x2-2)^2 s.T: x2-x1=1 x1+x2<=2 x1>=0,x2>=0
输入: 输入
model: min=(x1-1)^2+(x2-2)^2; x2-1=1; x1+x2<=2; end
阅读如下代码: 阅读如下代码: model:!可省略 可省略; 可省略 max=2*x1+3*x2; 4*x1+3*x2<=10; 3*x1+5*x2<=12; end !可省略 可省略; 可省略
3.实时数据处理 实时数据处理 在某些情况,对于模型中的某些数据并不是定值。 譬如模型中有一个通货膨胀率的参数,我们想在 2%至6%范围内,对不同的值求解模型,来观察模 型的结果对通货膨胀的依赖有多么敏感。我们把这 种情况称为实时数据处理 实时数据处理(what if analysis)。 实时数据处理 LINGO有一个特征可方便地做到这件事。 在本该放数的地方输入一个问号(?)。
LINGO软件简介 软件简介
LINGO模型的优点 模型的优点 •包含了 包含了LINDO的全部功能 包含了 的全部功能 •提供了灵活的编程语言(矩阵生成器)LINGO是一个利用线性规划和非线性规划来简洁地阐述、解 决和分析复杂问题的简便工具。其特点是程序执行速度很快, 易于输入、修改、求解和分析一个数学规划问题,因此 LINGO在教育、科研和工业界得到了广泛应用。教学版和发 行版的主要区别在于对优化问题的规模(变量和约束的个数) 有不同的限制。LINGO软件包有多种版本,但其软件内核和 使用方法类似。详细情况可上网访问LINGO 软件网站: .
例6 sets: days /MO,TU,WE,TH,FR,SA,SU/:needs; endsets data:needs = 20;enddata LINGO将用20指定days集的所有成员的needs 属性。对于多个属性的情形,见下例。 例7 sets: days /MO,TU,WE,TH,FR,SA,SU/:needs,cost; endsets data:needs cost = 20 100;enddata
例 data: interest_rate,inflation_rate = .085 ?; enddata 每一次求解模型时,LINGO都会提示为参数inflation_rate输 入一个值。在WINDOWS操作系统下,将会接收到一个类似 下面的对话框:
直接输入一个值再点击OK按钮,LINGO就会把 输入的值指定给inflation_rate,然后继续求解模型。 除了参数之外,也可以实时输入集的属性值, 但不允许实时输入集成员名。 4.指定属性为一个值 指定属性为一个值 可以在数据声明的右边输入一个值来把所有的成员 的该属性指定为一个值。看下面的例子。
StringM..StringN Car2..car14 DayM..DayN MonthM..MonthN Mon..Fri Oct..Jan
MonthYearM..Mont Oct2001..Jan Oct2001,Nov2001,Dec hYearN 2002 2001,Jan2002
集成员不放在集定义中,而在随后的数据部分 数据部分来定义 数据部分
setname(parent_set_list)[/member_list/][:attribute_list]; parent_set_list是已定义的集的列表,多个时必须用逗 号隔开。 编号 成员 例:sets: 1 (A,M,1) product/A B/; 2 (A,M,2) machine/M N/; 3 (A,N,1) 4 (A,N,2) week/1..2/; 5 (B,M,1) allowed(product,machine, 6 (B,M,2) week):x; 7 (B,N,1) endsets 8 (B,N,2)
zksxjm@ zk2007
模型的数据部分和初始部分
1.数据部分以关键字“data:”开始,以关键字 “enddata”结束。在这里,可以指定集成员、集的 属性。其语法如下: object_list = value_list;
对象列(object_list)包含要指定值的属性名、要设置集成 对象列 员的集名,用逗号或空格隔开。一个对象列中至多有一个集 名,而属性名可以有任意多。如果对象列中有多个属性名, 那么它们的类型必须一致。如果对象列中有一个集名,那么 对象列中所有的属性的类型就是这个集。
数值列(value_list)包含要分配给对象列中的对象 数值列 的值,用逗号或空格隔开。注意属性值的个数必须 等于集成员的个数。
例: sets: set1/A,B,C/: X,Y; endsets data: X=1,2,3; Y=4,5,6; enddata
例: sets: set1/A,B,C/: X,Y; endsets data: X,Y=1 4 25 3 6; enddata
可以定义一个名为students的原始集,它具有成员 John、Jill、Rose和Mike,属性有sex和age: sets: students/John Jill, Rose Mike/: sex, age; endsets
隐式成员列表格式 1..n 1..5 示例 所产生集成员 1,2,3,4,5 Car2,Car3,Car4,…,C ar14 Mon,Tue,Wed,Thu,Fri Oct,Nov,Dec,Jan
model : sets: xx/1..2/ :x,c,d,e ; endsets max=@sum(xx:c*x); @sum(xx:d*x)<=10; @sum(xx:e*x)<=12; data: c=2 3; d=4 3; e=3 5; enddata end
LINGO中的集 中的集
什么是集 集是一群相联系的对象,这些对象也称为集 的成员 成员。每个集成员可能有一个或多个与之 成员 有关联的特征,我们把这些特征称为属性 属性。 属性 属性值可以预先给定,也可以是未知的,有 待于LINGO求解。 LINGO有两种类型的集:原始集 原始集(primitive 原始集 set)和派生集 派生集(derived set)。 派生集 一个原始集是由一些最基本的对象组成的。 一个派生集是用一个或多个其它集来定义的, 也就是说,它的成员来自于其它已存在的集
LINGO软件包的功能之一在于提供了一些复杂的矩阵生成 器的例子,更进一步说,LINGO实际上提供了建立最优化 模型的一种语言,有了它,使用者只用键入一行文字也可 以建立起成千条约束或目标函数项。这就使输入较大规模 问题的过程得到了简化。
LINGO模型的构成:4个段 模型的构成: 个段 模型的构成 •目标与约束段 目标与约束段 •集合段(SETS ENDSETS) 集合段( 集合段 ) •数据段(DATA ENDDATA) 数据段( 数据段 ) •初始段(INIT ENDINIT) 初始段( 初始段 )
例9 init: X, Y = 0, .1; endinit Y=@log(X); X^2+Y^2<=1; 好的初始点会减少模型的求解时间。
LINGO函数 函数
LINGO有9种类型的函数: 有 种类型的函数 种类型的函数: 1. 基本运算符:包括算术运算符、逻辑运算符和关系运 . 基本运算符:包括算术运算符、 算符 2. 数学函数:三角函数和常规的数学函数 . 数学函数: 3. 金融函数:LINGO提供的两种金融函数 . 金融函数: 提供的两种金融函数 4. 概率函数:LINGO提供了大量概率相关的函数 . 概率函数: 提供了大量概率相关的函数 5. 变量界定函数:这类函数用来定义变量的取值范围 . 变量界定函数: 6. 集操作函数:这类函数为对集的操作提供帮助 . 集操作函数: 7. 集循环函数:遍历集的元素,执行一定的操作的函数 . 集循环函数:遍历集的元素, 8. 数据输入输出函数:这类函数允许模型和外部数据源 . 数据输入输出函数: 相联系, 相联系,进行数据的输入输出 9. 辅助函数:各种杂类函数 . 辅助函数:
例:!集部分; sets: students:sex,age; endsets !数据部分; data: students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13; enddata
定义派生集必须声明: 定义派生集 集的名字; 父集 父集的名字; 可选,集成员,可选,集 成员的属性. 语法:
看到这个例子,可能会认为X被指定了1、4和2 三个值,因为它们是数值列中前三个,而正确 的答案是1、2和3。
2.参数 参数 在数据部分也可以指定一些标量变量 标量变量(scalar 标量变量 variables)。当一个标量变量在数据部分确 定时,称之为参数 参数。 参数
例:data: interest_rate = .085; enddata 也可以同时指定多个参数。 例:data: interest_rate,inflation_rat e = .085 .03; enddata
如何在LINGO中求解如下的LP问题:
min s.t.
2 x1 + 3x 2 x1 + x 2 ≥ 350 x1 ≥ 100
2 x1 + x 2 ≤ 600 x1 , x 2 ≥ 0
在模型窗口中输入如下代 码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。
集部分是LINGO模型的一个可选部分。集部分以 集部分 关键字“sets:”开始,以“endsets”结束。一个集 部分可以放置于模型的任何地方,但是一个集及 其属性在模型约束中被引用之前必须定义了它们。 定义原始集:集的名字,·可选,集的成员,·可选,集 定义原始集 成员的属性. 语法:setname[/member_list/][:attribute_list]; 集名字必须严格符合标准命名规则:以拉丁字母 或下划线(_)为首字符,其后由拉丁字母(A— Z)、下划线、阿拉伯数字(0,1,…,9)组成 的总长度不超过32个字符的字符串,且不区分大 小写。