lingo-简单教程1
8 25 x1 8 15 x2 1800 x1 0, x2 0 x , x 为整数 1 2
线性规划模型:
min z 40 x1 36 x2
gongren.lg4
Model: min=40*x1+36*x2; 5*x1+3*x2>45; @gin(x1); @gin(x2); end
5 x1 3x2 45 s.t. x1 0, x2 0 x , x 为整数 1 2
• 问题2:某医院负责人每日至少需要下列数量的护士:
班次 时间 最少护士数
1 2 3 4 5 6
6时~10时 10时~14时 14时~18时 18时~22时 22时~02时 02时~06时
使用LINGO的一些注意事项
6. 每条语句都以分号结束(结束行end除外),最好一 行只写一条语句
7. 运算符号的应用如:min = 及系数 “*”变量
7. 可用“@FREE()”将变量的非负假定取消 8. 对0-1变量说明: @bin ( ) 9. 对整数变量说明: @gin ( )
例题荟萃
一般线性规划
问题1: 某厂每日8小时的产量不低于1800件。为了进行
质量控制,计划聘请两种不同水平的检验员。一级检验员的 标准为:速度25件/小时,正确率98%,计时工资4元/小时; 二级检验员的标准为:速度15件/小时,正确率95%,计时工 资3元/小时。检验员每错检一次,工厂要损失2元。为使总检 验费用最省,该工厂应聘一级、二级检验员各几名? 解 设需要一级和二级检验员的人数分别为x1、x2人, 则应付检验员的工资为:
6
x1 x6 60 x1 x2 70 x2 x3 60 x3 x4 50 x4 x5 20 x5 x6 30 xi 0, (整数),i 1,..., 6.
Lingo求解 hushi.lg4
5
6
22时~02时
02时~06时
20
30
每班的护士在值班开始时间向病 房报到,连续工作8小时.医院领导 为满足每班所需要的护士数,最 少需雇佣多少护士?
LINDO 公司软件产品简要介绍
美国芝加哥(Chicago)大学的Linus Schrage教授于1980 年前后开发, 后来成立 LINDO系统公司(LINDO Systems Inc.), 网址:
LINDO: Linear INteractive and Discrete Optimizer LINGO: Linear INteractive General Optimizer What’s Best!: (SpreadSheet e.g. EXCEL) (V6.1) (V9.0) (V8.0)
7个选项卡(可设置80-90个控制参数)
详细说明 (略)
使用LINGO的一些注意事项
1. “>”(或“<”)号与“>=”(或“<=”)功能相同 2. 变量名以字母开头 3. 变量名不区分大小写
4. 缺省假定所有变量非负;
5. 行中注有“!”符号的后面部分为注释,以分号结 束,如: ! It’s Comment;
非 线 性 规 划
整 数 规 划
组 合 优 化
不 确 定 规 划
多 目 标 规 划
目 标 规 划
网 络 优 化
动 态 规 划
约束优化的 简单分类
数学规划 连 续 优 化 离 散 优 化
min s.t.
f ( x) hi ( x) 0, i 1,...,m g j ( x ) 0, j 1,...,l xD
n
• 线性规划(LP) 目标和约束均为线性函数 • 非线性规划(NLP) 目标或约束中存在非线性函数 二次规划(QP) 目标为二次函数、约束为线性 • 整数规划(IP) 决策变量(全部或部分)为整数 整数线性规划(ILP),整数非线性规划(INLP) 纯整数规划(PIP), 混合整数规划(MIP) 一般整数规划,0-1(整数)规划
非线性规划 (NLP) LINGO
LINDO
• 例 如何在LINGO中求解如下的LP问题:
min s.t. x1 x 2 350 x1 100 2 x1 x 2 600 x1 , x 2 0 2 x1 3 x 2
• 在LINGO模型窗口中输入如下代码: model: min 2 x1 3 x 2 min=2*x1+3*x2; s.t. x1+x2>=350; x1 x 2 350 x1>=100; x1 100 2*x1+x2<=600; end 2 x1 x 2 600 • 然后点击工具条上的按钮 x1 , x 2 0 即可。
8 4 x1 8 3 x2 32 x1 24 x2
因检验员错检而造成的损失为:
ห้องสมุดไป่ตู้
(8 25 2% x1 8 15 5% x2 ) 2 8x1 12 x2
故目标函数为:
min z (32 x1 24 x2 ) (8x1 12 x2 ) 40 x1 36 x2
juli2.lg4
0-1整数线性规划
max z x1 1.2 x2 0.9 x3 1.1x4
2 x1 3x2 3x3 4 x4 6 s.t. x1 , x2为0,1变量 x 为整数 Model: 3 max=x1+1.2*x2+0.9*x3+1.1*x4; 2*x1+3*x2+3*x3+4*x4<=6; @bin(x1); @bin(x2); juli3.lg4 @gin(x3); @free(x4) ; end
60 70 60 50 20 30
每班的护士在值班开始时间向病房报到,连续工作8小 时.医院领导为满足每班所需要的护士数,最少需雇佣 多少护士?
班次 1 2 3 4
时间 6时~10时 10时~14时 14时~18时 18时~22时
最少 60 70 60 50
min s.t.
z xi
i 1
LINDO API: LINDO Application Programming Interface (V3.0)
演示(试用)版、学生版、高级版、超级版、工业版、 扩展版… (求解问题规模和选件不同)
LINDO和LINGO软件能求解的优化模型
优化模型
连续优化
整数规划(IP)
线性规划 (LP)
二次规划 (QP)
(最)优化理论是运筹学的基本内容
OR/ MS/ DS 运筹学(OR: Operation Research)
管理科学(MS: Management Science)
决策科学 (DS: Decision Science)
优化(Optimization), 规划(Programming)
无 约 束 优 化 线 性 规 划
juli1.lg4
整数线性规划
max z 3 x1 2 x2 14 2 x1 3 x2 s.t. 2 x1 x2 9 x , x 为整数 1 2
Model: max=3*x1+2*x2; 2*x1+3*x2<=14; 2*x1+x2<=9; @gin(x1); @gin(x2); end
max z 110 x1 75 x2 60 x3 50 x1 x2 x3 1 1 1 s.t. x1 x2 x3 20 3 4 2 x1 , x2 0
在lingo模型窗口中输入: Model: max=110*x1+75*x2+60*x3; x1+x2+x3<=50; 1/2*x1+1/3*x2+1/4*x3<=20; @free(x3); end
状态窗口
详细说明
Model Class: LP, QP,ILP, IQP,PILP, PIQP,NLP, INLP,PINLP
State: • Global Optimum • Local Optimum • Feasible • Infeasible • Unbounded • Interrupted • Undetermined Solver Type: • B-and-B • Global • Multistart
LINGO使用教程
LINGO 使用教程LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));!这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
LINGO快速入门
概率函数
• 7.@phg(pop,g,n,x) • 超几何(Hypergeometric)分布的累积分布函数。pop表示产品总数,g是正
品数。从所有产品中任意取出n(n≤pop)件。pop,g,n和x都可以是非整数, 这时采用线性插值进行计算。
变量界定函数
• 变量界定函数实现对变量取值范围的附加限制,共4种: • @bin(x) 限制x为0或1 • @bnd(L,x,U) 限制L≤x≤U • @free(x) 取消对变量x的默认下界为0的限制,即x可
以取任意实数 • @gin(x) 限制x为整数 • 在默认情况下,LINGO规定变量是非负的,也就是说下界
• @smax(x1,x2,...,xn)返回 x1 , x2 , … , xn 中的 最大值
• @smin(x1,x2,...,xn)返回 x1 , x2 , … , xn 中的最 小值
例 给定一个直角三角形,求包含该三角形的最小正方形。
解:如图所示。ABCDDAEabx
求最小的正方形就相当于求如下的最优化问题:
• data:
• sex,age = 1 16
•
0 14
•
0 17
•
0 13;
• friend = 0.3 0.5 0.6;
• enddata
基本运算符
• ^ 乘方 •﹡ 乘 •/ 除 •﹢ 加 •﹣ 减
: LINGO具有9种逻辑运算符
• #not# 否定该操作数的逻辑值,# not #是一个一元运算符 • #eq# 若两个运算数相等,则为 true ;否则为 flase • #ne# 若两个运算符不相等,则为 true ;否则为 flase • #gt# 若左边的运算符严格大于右边的运算符,则为 true ;否则
lingo教程
使用LINGO软件,编制程序如下:
model:
!6发点8收点运输问题;
sets:
warehouses/wh1..wh6/: capacity;
vendors/v1..v8/: demand;
links(warehouses,vendors): cost, volume;
endsets !目标函数;
Mon..Fri
Mon,Tue,Wed,Thu,Fri
MonthM..MonthN
Oct..Jan
Oct,Nov,Dec,Jan
MonthYearM..MonthYearN Oct2001..Jan2002 Oct2001,Nov2001,Dec2001,Jan2002
③ 集成员不放在集定义中,而在随后的数据部分来定义。
23
(A,N,1)
34
(A,N,2)
45
(B,M,1)
56
(B,M,2)
67
(B,N,1)
78
(B,N,2)
成员列表被忽略时,派生集成员由父集成员所有的组合构成,这样
的派生集成为稠密集。如果限制派生集的成员,使它成为父集成员所有
组合构成的集合的一个子集,这样的派生集成为稀疏集。同原始集一
样,派生集成员的声明也可以放在数据部分。一个派生集的成员列表有
许多稀疏集的成员都满足一些条件以和非成员相区分。我们可以把这些
逻辑条件看作过滤器,在LINGO生成派生集的成员时把使逻辑条件为假
的成员从稠密集中过滤掉。
例2.4
sets:
!学生集:性别属性sex,1表示男性,0表示女性;年龄属性age. ;
students/John,Jill,Rose,Mike/:sex,age;
LINGO教程
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));!这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
Lingo教程[参照]
LINGO教程LINGO是用来求解线性和非线性优化问题的简易工具。
LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。
§1 LINGO快速入门●安装:实验室的所有电脑都已经事先安装好了Lingo 8(或者9,10,11)。
如果要在自己的电脑上安装这个软件,建议从网上下载一个破解版的,按照提示一步一步地安装完毕。
●简单例子:当你在windows系统下开始运行LINGO时,会得到类似于下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都要在该窗口内编码实现。
下面举两个例子。
例 1某工厂在计划期内要安排生产I、II两种产品,已知生产单位产品所需的设备台时及A、B两种原材料的消耗,如表所示。
产品I产品II设备 1 28台时原材料A 4 016kg原材料B 0 412kg该工厂每生产一件产品I可获利2元,每生产一件产品II可获利3元,问应该如何安排生产计划使该厂获利最多?我们用下面的数学模型来描述这个问题。
设x_1、x_2分别表示在计划期内产品I、II的产量。
因为设备的有效台时是8,这是一个限制产量的条件,所以在确定产品I、II的产量时,要考虑不超过设备的有效台时数,即可用不等式表示为x_1 + 2x_2 <=8同理,因原材料A、B的限量,可以得到以下不等式4x_1 <=164x_2 <=12该工厂的目标是在不超过所有资源限量的条件下,如何确定产量x_1、x_2以得到最大的利润。
若用z表示利润,这时z=2x_1+3x_2.综合上述,该计划问题可用数学模型表示为:目标函数 max z=2x_1+3x_2约束条件 x_1 + 2x_2 <=84x_1 <=164x_2 <=12x_1、x_2 >=0一般来说,一个优化模型将由以下三部分组成:1.目标函数(Objective Function):要达到的目标。
lingo入门教程
运送量为cij 。
2 6
2
2
MIN f
cij x j ai y j bi
1
j1 i1
2
s.t.
cij di , i 1, 2,L , 6
2
j 1
6
cij ej , j 1, 2
3
i 1
使用现有临时料场时,决策变量只有 c(ij 非负),所以这是LP模型;当为新
建料场选址时决策变量为
c ij
和
x j , y j,由于目标函数
f对
x ,y
j
j
是非线性的,
所以在新建料场时是NLP模型。先解NLP模型,而把现有临时料场的位置作
为初始解告诉LINGO。
本例中集合的概念
利用集合的概念,可以定义需求点DEMAND和供应点 SUPPLY两个集合,分别有6个和2个元素(下标)。但决 策变量(运送量) cij 与集合DEMAND和集合SUPPLY都 有关系的。该如何定义这样的属性?
输出结果: 运行菜单命令“LINGO|Solve”
最大利润=11077.5
最优整数解 X=(35,65)
一个简单的LINGO程序
LINGO的基本用法的几点注意事项
•LINGO中不区分大小写字母;变量和行名可以超过8个字符,但 不能超过32个字符,且必须以字母开头。 •用LINGO解优化模型时已假定所有变量非负(除非用限定变量取 值范围的函数@free或@sub或@slb另行说明)。 •变量可以放在约束条件的右端(同时数字也可放在约束条件的左 端)。但为了提高LINGO求解时的效率,应尽可能采用线性表达 式定义目标和约束(如果可能的话)。 •语句是组成LINGO模型的基本单位,每个语句都以分号结尾,编 写程序时应注意模型的可读性。例如:一行只写一个语句,按照 语句之间的嵌套关系对语句安排适当的缩进,增强层次感。 •以感叹号开始的是说明语句(说明语句也需要以分号结束))。
Lingo教程
LINGO教程LINGO是用来求解线性和非线性优化问题的简易工具。
LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。
§1 LINGO快速入门●安装:实验室的所有电脑都已经事先安装好了Lingo 8(或者9, 10, 11)。
如果要在自己的电脑上安装这个软件,建议从网上下载一个破解版的,按照提示一步一步地安装完毕。
●简单例子:当你在windows系统下开始运行LINGO时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都要在该窗口内编码实现。
下面举两个例子。
例 1 某工厂在计划期内要安排生产I、II两种产品,已知生产单位产品所需的设备台时及A、B两种原材料的消耗,如表所示。
产品I 产品II设备 1 2 8台时原材料A 4 0 16kg原材料B 0 4 12kg该工厂每生产一件产品I可获利2元,每生产一件产品II可获利3元,问应该如何安排生产计划使该厂获利最多?我们用下面的数学模型来描述这个问题。
设x_1、x_2分别表示在计划期内产品I、II的产量。
因为设备的有效台时是8,这是一个限制产量的条件,所以在确定产品I、II的产量时,要考虑不超过设备的有效台时数,即可用不等式表示为x_1 + 2x_2 <=8同理,因原材料A、B的限量,可以得到以下不等式4x_1 <=164x_2 <=12该工厂的目标是在不超过所有资源限量的条件下,如何确定产量x_1、x_2以得到最大的利润。
若用z表示利润,这时z=2x_1+3x_2.综合上述,该计划问题可用数学模型表示为:目标函数 max z=2x_1+3x_2约束条件 x_1 + 2x_2 <=84x_1 <=164x_2 <=12x_1、x_2 >=0一个优化模型一般有三部分组成:1.目标函数(Objective Function):要达到的目标。
LINGO使用教程
LINGO 使用教程LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min212112121≥≤+≥≥++x x x x x x x t s x x 在模型窗口中输入如下代码:min =2*x1+3*x2;x1+x2>=350;x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如model :!6发点8收点运输问题;sets :warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min =@sum (links: cost*volume);!需求约束;@for (vendors(J):@sum (warehouses(I): volume(I,J))=demand(J));!产量约束;@for (warehouses(I):@sum (vendors(J): volume(I,J))<=capacity(I));!这里是数据;data :capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮 即可。
Lingo教程(一)
本章和下一章扼要介绍在 Microsoft Windows 环境下运行的 LINDO 6.1,LINGO 8.0 最新版本的使用方法,并包括社会、经济、工程等方面的一些实际应用问题的数学建模和求 解实例。
xyz=30
x+y=8
y=5 则 LINDO/LINGO 软件能直接确定出 y=5, 然后确定出 x=3,最后确定出 z=2, 这三个变量就是 常量了。经过这样的处理,将尽量减小模型中实际需要求解的决策变量的个数,使问题的规 模有所下降,从而使求解更有效。
LINDO/LINGO 预处理程序
LP QP
5、模型中使用的单位的数量级要适当 如果同一模型甚至同一约束中有的数很小而有的数很大, 如 0.01 和 10000000000, 则这两 个数的数量级相差太大了,不利于优化模型求解,因为大的数与小的数运算时误差会很大, 运算精度降低。LINDO/LINGO 通常希望模型中数据之间的数量级不要相差超过 103,否则会 给出警告提示信息,这时你应该尽量选择适当的单位,使数据之间的数量级相差减小。
优化模型
连续优化
整数规划
线性规划
二次规划
非线性规划
LINDO
LINGO
图 3-1 LINDO 和 LINGO 软件能求解的优化模型
第 37 页 共 112 页
谢金星:MATLAB 优化工具箱和 LINDO/LINGO 优化软件
第 38 页 共 112 页
lingo入门
lingo入门lingo入门教程之一--- 初识lingoingo对于一些线性或者非线性的规划,优化问题非常有效首先介绍一下,在lingo中运行程序时出现的页面(在工具栏点击类似靶子一样的图标便可运行)Solver status:求解器(求解程序)状态框Model Class:当前模型的类型:LP,QP,ILP,IQP,PILP,PIQP,NLP,INLP,PINLP(以I开头表示IP,以PI 开头表示PIP)State:当前解的状态:"Global Optimum", "LocalOptimum", "Feasible", "Infeasible“(不可行), "Unbounded “(无界), "Interrupted“(中断), "Undetermined“(未确定)Object:解的目标函数值Infeasibility:当前约束不满足的总量(不是不满足的约束的个数):实数(即使该值=0,当前解也可能不可行,因为这个量中没有考虑用上下界命令形式给出的约束)Iteration:目前为止的迭代次数Extend solverstatus:扩展的求解器(求解程序)状态框Solver type:使用的特殊求解程序:Bestobj :目前为止找到的可行解的最佳目标函数值Objbound:目标函数值的界Steps:特殊求解程序当前运行步数:Active:有效步数Variables(变量数量):变量总数(T otal)、非线性变量数(Nonlinear)、整数变量数(Integer)。
Constraints(约束数量):约束总数(T otal)、非线性约束个数(Nonlinear)。
Nonzeros(非零系数数量):总数(Total)、非线性项系数个数(Nonlinear)。
GeneratorMemory Used (K) (内存使用量)ElapsedRuntime (hh:mm:ss)(求解花费的时间)运行之后页面介绍(这里的运行界面并不是与上面的运行过程中出现界面一致,即并非来自于同一个程序运行出现)第一行表示在经过457次迭代后得到局部最优解第二行给出该局部最优解的具体值下面给出取局部最优值时,x1 x2的具体取值这里求解的是局部最优解,如果想求出全局最优解,可以进行页面设置:lingo --> option --> global solver --> 勾选use globalsolver对于运行结果也可以另存为,格式一般为ldt,因为有时候对于求解一个问题,或许需要运行很久才可以得出结果,所以没必要每次为了看结果都运行,而是运行成功一次后便把结果保存下来注意事项LINGO总是根据“MAX=”或“MIN=”寻找目标函数;程序语句的顺序一般不重要,既可以随意调换;程序运用函数时都是以@开头;程序中的变量默认为非负数,想要改变变量类型必须有相应函数调整程序中变量不区分大小写;语句必须以分号结尾;注释以!开始,且注释语句后面必须也有分号,注释默认注释到第一个分号处,意思是分号前面会全部被注释掉。
