lingo入门
LINGO入门介绍
LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
一般来说LINGO 多用于解决大规模数学规划。用时要注意以下几点: (1)每条语句后必须使用分号“;”结束。问题模型必须由MODEL 命令开始,END 结
束。
(2)用MODEL 命令来作为输入问题模型的开始,格式为MODEL :statement (语句)。 (3)目标函数必须由“min =”或“max =”开头。
§1 LINGO 快速入门
当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:
,6002100
350.
.32min 21211
2121≥≤+≥≥++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;
lingo入门教程(共55张)
问题(wèntí):最小运量89.8835是不是全局最优
为减少计算工作量,对X,Y的此时取目值标再函做数一值些的限下制界。(虽O然bj理论上 新建料场的位置可以是任意的B,ou但nd显=8然5.2最63佳8)的与料目场前位得置到不的应最该好离 工地太远,至少不应该超出现的在可6行个解工的地目所标决函定数的值坐(标B的est最大、
•LINGO中函数一律需要以“@”开头,其中整型变量函数 (@BIN、@GIN)和上下界限定函数(@FREE、@SUB、 @SLB),@BIN函数在0-1规划中有广泛应用 @BND( L,X,U)表示L<=X<=U
第5页,共55页。
输出(shūchū)结果: 运行菜单命令“LINGO|Solve”
局部最优解X(1)=7.249997, X(2)=5.695940,Y(1)=7.749998, Y(2)=4.928524,C(略),
最小运量=89.8835(吨公里)。 问题:最小运量89.8835是不是全局最优
是用“LINGO|Options”菜单命令打开选项对话框,在 “Global Solver”选项卡上选择“Use Global Solver”, 激 活全局最优求解程序。
略2去),最小运量136.2275(吨公里)。
1
3
5
0
0
1
2
3
lingo入门
LINGO 使用教程
LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门
当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:
,6002100
350.
.32min 21211
212
1≥≤+≥≥++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):
LINGO基础知识
LINGO 使用教程
LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门
当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:
,6002100
350.
.32min 21211
212
1≥≤+≥≥++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));
LINGO教程(基本语法)
初始点数(对Multistart程序)
第15页,共152页。
• 运行状态窗口
LINGO 教 程
注:凡是可以从一个约束直接解出变量取值时,这个变量就不 认为是决策变量而是固定变量,不列入统计中;只含有固定变 量的约束也不列入约束统计中。
•每行(目标、约束和说明语句)后面增加一个分号“;”;
•约束的名字被放到 “[ ]”中,不放在右半括号“)”前; •LINGO中模型以“MODEL:”开始,以“END” 结束。对 简单的模型,这两个语句也可以省略。
18
第18页,共152页。
LINGO 教 程
一个简单的LINGO程序
例 直接用LINGO来解如下二次规划问题:
INV (0) 10
加上变量的非负约束
26
第26页,共152页。
LINGO 教 程
注:LINDO中没有数组,只能对每个季度分别定义变量,如正 常产量就要有RP1,RP2,RP3,RP4 4个变量等。写起来就比 较麻烦,尤其是更多(如1000个季度)的时候。
• 内置建模语言,允许以简练、直观的方式描述较大规模 的优化问题,所需的数据可以以一定格式保存在独立的 文件中。
7
第7页,共152页。
LINGO 教 程
在LINGO中使用LINDO模型
Lingo语言入门
6.1 特点 1. 面向对象:接近人类的思维方式
以对象为基础,以事件来驱动 对象:包括数据(属性)和方法(操作)
例: sprite(1).forecolor=35 前景色为红色 sprite(1).play() 播放通道1中精灵
事件:能被对象识别的动作。当事件发生后(如鼠标 单击等), 会发出消息,然后进入相应的事件处 理程序
以它为母体的精灵都具有此脚本 生成方法:选中演员后单击“演员脚 本工具按钮” 不是单独的演员(包含在演员身上)
2.
帧脚本
对此帧中所有精灵都有效 生成方法:双击“脚本通道”某一帧 会在演员表中生成帧脚本演员 在上例中添加“停在当前帧”帧脚本(先删除原来的行为)
3.
精灵脚本
只对当前精灵有效 生成方法:选中精灵后,运行右键快捷菜
为小数 字符串: 常量:
6.7 常用Lingo语句
条件判断语句
1. If 语句 1. 基本形式:
If 逻辑表达式 then 命令序列 End if
2.
多种情况判断
If 逻辑表达式1 then 命令序列1 Else if 逻辑表达式2 then 命令序列2 ∶ End if
运行“P154_if.dir”
6.5 基本语法规则
园括号
函数 关键词后,放精灵或演员的名称
LINGO教程(PDF)
示例
所产生集成员
1..n
1..5
1,2,3,4,5
StringM..StringN
Car2..car14
Car2,Car3,Car4,…,Car14
DayM..DayN
Mon..Fri
Mon,Tue,Wed,Thu,Fri
共 53 页 3
LINGO 教程
MonthM..MonthN
Oct..Jan
!男学生和女学生的联系集:友好程度属性 friend,[0,1]之间的数。 ;
linkmf(students,students)|sex(&1) #eq# 1 #and# sex(&2) #eq# 0: friend;
!男学生和女学生的友好程度大于 0.5 的集;
linkmf2(linkmf) | friend(&1,&2) #ge# 0.5 : x;
49538582 52197433 76739271 23957265 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮 即可。 为了能够使用 LINGO 的强大功能,接着第二节的学习吧。
§2 LINGO 中的集
对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通 工具和雇工等等。LINGO 允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集, 就可以利用集来最大限度的发挥 LINGO 建模语言的优势。
lingo使用入门
attribute_ list可以指定一个或多个集成员的属性,属性之间必须用逗号隔开。
可以把集、集成员和集属性同C语言中的结构体作个类比。如下图:
集 集成员 集属性
←→ ←→ ←→
结构体 结构体的域 结构体实例
LINGO内置的建模语言是一种描述性语言,用它可以描述现实世界中的一些 问题,然后再借助于LINGO求解器求解。因此,集属性的值一旦在模型中被确定, 就不可能再更改。在LINGO中,只有在初始部分中给出的集属性值在以后的求解 中可更改。 (2)定义派生集 为了定义一个派生集,必须详细声明: · 集的名字
(1)原始集的定义 为了定义一个原始集,可用下面的语句定义:
setname[/member_list/][:attribute_list];
setname: 集的名字,最好具有较强的可读性, 。集名字必须严格符合标准命名规 则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z)、下划线、阿拉
注:A variable is considered to be nonlinear if it enters into any nonlinear relationship in any constraint in the model,如X*Y=10,而X+Y=10则认为X,Y都是线 性的;在X*X+Y=100中,X是非线性的,Y是线性的;在X=1,X+Y=3中,则认为X和Y 都不是变量。 2、约束框(Constraints)显示的是模型约束的总数和非线性约束的总数。 3、非零框(Nonzeros)显示的是模型中的非零系数的总数和非线性变量中非零系数的 总数。 4、内存时间框(Generator Memory Used)显示正在使用的模型所需的内存大小。 5、耗用时间框(Elapsed Runtime)显示用于编译和求解模型所需的时间。 6、求解状态框(Solver Status)显示模型类型和最优解的状态 Model:模型类型,可能的结果是:LP,NLP,QP,IP,ILP,INLP,PIP,MIP,IQP,PIQP,PINP等 State:给出现行解得状态,可能的结果是:全局最优解(Global Opt),局部最优解 (Local/Relative Opt),可行解(Feasible solution),不可行解(Infeasible solution),无界 解(Unbounded),中断(Interrupt),未定(Undetermined) Objective:给出当前目标函数值
lingo入门教程
•限定变量取整数值的语句为“@GIN(X1)”和 “@GIN(X2)”,不可以写成“@GIN(2)”,否则 LINGO将把这个模型看成没有整数变量。
•LINGO中函数一律需要以“@”开头,其中整型变量 函数(@BIN、@GIN)和上下界限定函数(@FREE、 @SUB、@SLB),@BIN函数在0-1规划中有广泛应 用@BND( L,X,U)表示L<=X<=U
1 2 3 456
a 1.25 8.75 0.5 5.75 3 7.25
b 1.25 0.75 4.75 5 6.5 7.75
d3
5
4
7 6 11
建立模型
记工地的位置为(a ,b ) ,水泥日用量为d , i 1,6 ;料场
ii
i
位置为(x j , y j ),日储量为e j , j 1,2 ;从料场 j 向工地i 的
运送量为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
LINGO基础知识
LINGO基础知识
LINGO⽤于构建和求解线性、⾮线性及整数最优化模型,⽅便灵活,执⾏速度快,能与EXCEL等其他软件交换数据。
2.1 LINGO窗⼝介绍
2.1.1 LINGO⽂件菜单(File Menu)
2.1.2 LINGO编辑菜单(Edit Mene)
2.1.3 LINGO模型求解菜单
灵敏性分析:产⽣当前模型的灵敏度分析报告:研究当前⽬标函数的费⽤系数和约束右端项在什么范围(此时假定其他系数不变)时,最优基保持不变。
默认不激活,激活:LINGO | Options ->General Solver Tab -> Dual Computations -> Prices and Ranges
2.1.4 窗⼝菜单(Windows Menu)
(1) 命令⾏窗⼝(Open Command Window)
(2)状态窗⼝(Status Window)
2.1.5 LINGO的命令⾏命令
共有9类,可在命令⾏窗⼝中输⼊COM查询。
2.2 LINGO 中的集
集的内容是⼀群或多群相联系的对象
2.2.1 定义原始集
setname[/menber_list/] [: attribute_list]; 集成员可显式罗列或隐式罗列。
2.3 LINGO基本运算符
基本运算符包括算术运算符、逻辑运算符和关系运算符。
2.3.1 算术运算符
⼆元运算符:+、-、*、/、^
⼀元运算符:~(取反)
2.3.2 逻辑运算符
主要⽤于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时⽤在成员资格过滤器中,共9种。#not#:⼀元,否定该操作数的逻辑值。
lingo入门
lingo入门
lingo入门教程之一--- 初识lingo
ingo对于一些线性或者非线性的规划,优化问题非常有效
首先介绍一下,在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(约束数量):
Lingo入门
• • • • • • • • • • • •
model: sets: jihe/1..8/:xq,zc,jb,kc; endsets data: xq=40,60,75,25,30,65,50,20; enddata min=@sum(jihe:400*zc+450*jb+20*kc); @for(jihe:zc<=40); kc(1)=10+zc(1)+jb(1)-xq(1); @for(jihe(i)|i#gt#1:kc(i)=kc(i-1)+zc(i)+jb(i)-xq(i)); end
• (1)一个完整的Lingo程序必然以“model:”开始,以“end” 结束。 • (2)集合定义部分(从“sets:”到“endsets”):内容是定 义集合及其属性,命令格式为 “ 集合名/集合的全部元素/:全体 属性 ”。本程序中jihe/1..8/:xq,zc,jb,kc; ,这里的“1..8”等同于 “1,2,3,4,5,6,7,8” 。 • (3)数据输入部分(从“data:”到“enddata”):内容是输 入已知数据。 • (4)其它部分:包括目标函数、约束条件。 • 本程序中,@sum(jihe:400*zc+450*jb+20*kc),是求和函数, • @for(jihe:zc<=40),是循环函数,zc的所有分量都不大于40, • @for(jihe(i)|i#gt#1:kc(i)=kc(i-1)+zc(i)+jb(i)-xq(i)),表示对集合 jihe中的所有大于1的i,都满足该项约束。
lingo教程入门
LINGO是解决线性和非线性优化问题的简单工具。LINGO内置了一种用于建立优化模型的语言,可以方便地表达大规模的问题,并且可以使用LINGO的高效解算器快速求解和分析结果。
行话通常用于求解大规模的数学规划。
使用时应注意以下几点:
1每个语句后面必须有分号;结尾。问题模型必须以MODEL命令开始并结束。
2使用MODEL命令作为输入问题模型的开始,格式为MODEL:Statement。
三。目标函数必须以“min=”或“Max=”开头。
建模时需要注意的几个基本问题
1.尽量使用实数优化,减少整数约束和整数变量。
2.尽量使用光滑优化,减少非光滑约束的个数。如:尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等。
3.尽量使用线性模型,减少非线性约束和非线性变量的个数。
4.合理设定变量上下界,尽可能给出变量初始值。
5.模型中使用的参数数量级要适当,否则会给警告信息,选择适当单位改变相对尺度。
注意事项
1.“>”(或“<”)号与“>=”(或“<=”)功能相同
2.LINGO模型以“MODEL:”开始,“END”结束。
3.目标函数为“MAX=”。不需要写“ST”。
4.变量与系数间有乘号运算符“* ”
5.变量名以字母开头,不能超过32个字符
6.变量名不区分大小写(包括LINGO中的关键字)
7.语句的顺序不重要
8.行号自动产生或人为定义。目标函数所在行是第一行,第二行起为约束条件,约束行名字被放“〔〕”中。
9.行中注有“!”符号的后面部分为注释。
10.在模型的开头可以用“TITLE”对模型命名。
lingo教程
LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门
当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:
0,6002100
350.
.32min 21211
212
1≥≤+≥≥++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)); !产量约束;
lingo入门
最优解下“资源”增加 VARIABLE 1单位时“效益”的增 X1 X2 量 影子价格
ROW
SLACK OR SURPLUS
原料增1单位, 利润增48 时间加1单位, 利润增2 能力增减不影响利润
2) 3) 4)
35元可买到1桶牛奶,要买吗?
35 <48, 应该买!
聘用临时工人付出的工资最多每小时几元?
I 1, 2,3, 4
约束条件主要有两个: 1)能力限制:
RP( I ) 40, I 1,2,3,4
INV (0) 10
2)产品数量的平衡方程:
INV ( I ) INV ( I 1) RP( I ) OP( I ) DEM ( I ), I 1,2,3,4
集合的基本用法和LINGO模型的基本 要素
1桶 牛奶 或 12小时 3公斤A1 4公斤A2 获利24元/公斤 获利16元/公斤
8小时
每天: 50桶牛奶
时间480小时 至多加工100公斤A1
制订生产计划,使每天获利最大 35元可买到1桶牛奶,买吗?若买,每天最多买多少? 可聘用临时工人,付出的工资最多是每小时几元?
A1的获利增加到 30元/公斤,应否改变生产计划?
Max z 72x1 64x2
x1 x2 50
12x1 8x2 480
劳动时间
lingo入门
集合JD的元素 DEM 定义在集 合JD上的 属性 RP OP INV
1 DEM(1) RP(1) OP(1) INV(1)
2 DEM(2) RP(2) OP(2) INV(2)
3 DEM(3) RP(3) OP(3) INV(3)
4 DEM(4) RP(4) OP(4) INV(4)
下面我们看看在LINGO中如何定义集合及其属性,例1在LINGO中可以 分成三部分:见图2-1. (1)集合定义部分(从”SETS:”开始到”ENDSETS”结束):定义集合及其属性,语 句 “JD/1,2,3,4/:DEM,RP,OP,INV;”定义了表2-1所列出的16个变量名(并不一定都 是决策变量,如DEM是一个已知数组).
c 6个和2个元素(下标).但是你可能会遇到一个困难:决策变量(运输量) ij
既不只是集合demand的相关属性,也不只是集合supply的相关属性,而是与这两个 都有关系.这样的属性应该如何定义呢?
这里
cij
的两个下标不正相当于二维数组吗?它的两个下标分别来自集合
demand和supply,这就启发我们可以利用集合demand和supply,来定义一个由二 元数对组成的新集合,然后将 cij 定义成它的属性. 编写LINGO程序:首先集合段如下: sets: demand/1..6/:a,b,d; supply/1,2/:x,y,e; link(demand,supply):c; endsets 这一段定义了三个集合,其中demand和supply集合的属性的含义与前类似,而link
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
lingo入门教程之一--- 初识lingo
ingo对于一些线性或者非线性的规划,优化问题非常有效
首先介绍一下,在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(变量数量):
变量总数(Total)、
非线性变量数(Nonlinear)、
整数变量数(Integer)。
Constraints(约束数量):
约束总数(Total)、
非线性约束个数(Nonlinear)。
Nonzeros(非零系数数量):
总数(Total)、
非线性项系数个数(Nonlinear)。
GeneratorMemory Used (K) (内存使用量)
ElapsedRuntime (hh:mm:ss)(求解花费的时间)
运行之后页面介绍(这里的运行界面并不是与上面的运行过程中出现界面一致,即并非来自于同一个程序运行出现)
第一行表示在经过457次迭代后得到局部最优解
第二行给出该局部最优解的具体值
下面给出取局部最优值时,x1 x2的具体取值
这里求解的是局部最优解,如果想求出全局最优解,可以进行页面设置:lingo --> option --> global solver --> 勾选use global solver
对于运行结果也可以另存为,格式一般为ldt,因为有时候对于求解一个问题,或许需要运行很久才可以得出结果,所以没必要每次为了看结果都运行,而是运行成功一次后便把结果保存下来
注意事项
LINGO总是根据“MAX=”或“MIN=”寻找目标函数;
程序语句的顺序一般不重要,既可以随意调换;
程序运用函数时都是以@开头;
程序中的变量默认为非负数,想要改变变量类型必须有相应函数调整
程序中变量不区分大小写;
语句必须以分号结尾;
注释以!开始,且注释语句后面必须也有分号,注释默认注释到第一个分号处,意思是分号前面会全部被注释掉。例题:
[plain]view plain copy
lingo入门教程之二--- 集合运用
lingo中的集合用法很多,这里主要通过几个例题来进行讲解
对于每一个问题,都要先找到对应的目标函数,然后对相应值进行初始化,然后找到约束条件等进行求解例1:SAILCO公司需要决定下四个季度的帆船生产量。下四个季度的帆船需求量分别是40条,60条,75条,25条,这些需求必须按时满足。每个季度正常的生产能力是40条帆船,每条船的生产费用为400美元。如果加班生产,每条船的生产费用为450美元。每个季度末,每条船的库存费用为20美元。假定生产提前期为0,初始库存为10条船。如何安排生产可使总费用最小?
分析:用DEM,RP,OP,INV分别表示需求量、正常生产的产量、加班生产的产量、库存量,则DEM,RP,OP,INV 对每个季度都应该有一个对应的值,也就说他们都应该是一个由4个元素组成的数组,其中DEM是已知的,而RP,OP,INV是未知数。
接下里这里例子会讲到关于集合的派生问题,这个跟c++里面的继承与派生比较相像
例2:建筑工地的位置(用平面坐标a,b表示,距离单位:公里)及水泥日用量d(吨)下表给出。有两个临时料场位于P (5,1), Q (2, 7),日储量各有20吨。从A, B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。两个新的料场应建在何处,节省的吨公里数有多大?
例3:(最短路问题) 在纵横交错的公路网中,货车司机希望找到一条从一个城市到另一个城市的最短路.下图表示的是公路网,节点表示货车可以停靠的城市,弧上的权表示两个城市之间的距离(百公里).那么,货车从城市S出发到达城市T,如何选择行驶路线,使所经过的路程最短?
分析:
假设从S到T的最优行驶路线P 经过城市C1, 则P中从S到C1的子路也一定是从S到C1的最优行驶路线;假设P 经过城市C2, 则P中从S到C2的子路也一定是从S到C2的最优行驶路线.因此, 为得到从S 到T的最优行驶路线, 只需要先求出从S到C k(k=1,2)的最优行驶路线,就可以方便地得到从S到T的最优行驶路线. 同样,为了求出从S到Ck(k=1,2)的最优行驶路线, 只需要先求出从S到Bj(j=1,2)的最优行驶路线;为了求出从S到Bj(j=1,2)的最优行驶路线, 只需要先求出从S到Ai(i=1,2,3)的最优行驶路线. 而S到
Ai(i=1,2,3)的最优行驶路线是很容易得到的(实际上, 此例中S到Ai(i=1,2,3)只有唯一的道路) .
此例中可把从S到T的行驶过程分成4个阶段,即S→Ai(i=1,2或3),Ai→Bj(j=1或2),Bj→Ck(k=1或2),Ck→ T. 记d(Y,X)为城市Y与城市X之间的直接距离(若这两个城市之间没有道路直接相连,则可以认为直接距离为∞),用L(X)表示城市S到城市X的最优行驶路线的路长: