《LINGO软件入门(数学建模所需)》由会员分享,可在线阅读,更多相关《LINGO软件入门(数学建模所需)(150页珍藏版)》请在人人文库网上搜索。
1、LINGOLINGO软件篇软件篇LINGO 9.0 for windowsLINGO 9.0 for windows任兴龙任兴龙建模时需要注意的几个基本问题建模时需要注意的几个基本问题 1、尽量使用实数优化,减少整数约束和整数变量尽量使用实数优化,减少整数约束和整数变量2、尽量使用光滑优化,减少非光滑约束的个数尽量使用光滑优化,减少非光滑约束的个数 如:尽量少使用绝对值、符号函数、多个变量求如:尽量少使用绝对值、符号函数、多个变量求最大最大/最小值、四舍五入、取整函数等最小值、四舍五入、取整函数等3、尽量使用线性模型,减少非线性约束和非线性变尽量使用线性模型,减少非线性约束和非线性变量的个数量
2、的个数 (如(如x/y 5 改为改为x5y)4、合理设定变量上下界,尽可能给出变量初始值合理设定变量上下界,尽可能给出变量初始值 5、模型中使用的参数数量级要适当模型中使用的参数数量级要适当 (如小于如小于103)否则会给警告信息,选择适当单位改变相对尺度否则会给警告信息,选择适当单位改变相对尺度scaling LP QP NLP IP 全局优化全局优化(选选) ILP IQP INLP LINGO软件的求解过程 LINDO/LINGO预处理程序预处理程序线性优化求解程序线性优化求解程序非线性优化求解程序非线性优化求解程序分枝定界管理程序分枝定界管理程序1. 确定常数确定常数2. 识别类型识别
3、类型1. 单纯形算法单纯形算法2. 内点算法内点算法(选选)1、顺序线性规划法、顺序线性规划法(SLP) 2、广义既约梯度法、广义既约梯度法(GRG) (选选) 3、多点搜索、多点搜索(Multistart) (选选) 又称障碍法又称障碍法barrierLINGOLINGO的文件类型的文件类型.LG4:LINGO格式的模型文件,保存了模型窗口中所格式的模型文件,保存了模型窗口中所能够看到的所有文本和其他对象及其格式信息;能够看到的所有文本和其他对象及其格式信息;.LNG:文本格式的模型文件,不保存模型中的格式信:文本格式的模型文件,不保存模型中的格式信息(如字体、颜色、嵌入对象等);息(如字体
4、、颜色、嵌入对象等);.LDT:LINGO数据文件;数据文件;.LTF:LINGO命令脚本文件;命令脚本文件;.LGR:LINGO报告文件;报告文件;.LTX: LINDO格式的模型文件;格式的模型文件;.MPS:示:示MPS(数学规划系统)格式的模型文件。(数学规划系统)格式的模型文件。除除“LG4”文件外,文件外,另外几种格式的文件另外几种格式的文件都是普通的文本文件,都是普通的文本文件,可以用任何文本编辑可以用任何文本编辑器打开和编辑。器打开和编辑。规划问题的傻瓜输入规划问题的傻瓜输入取整取整, 0,2100.23 . 02779max22222212121xxxxxxtsxxxxxx1
5、11 8 Model:Title:傻瓜输入法傻瓜输入法;!小程序可用,大程序不提倡小程序可用,大程序不提倡;st1x1+x2100;optmax=98*x1+277*x2-x12-0.3*x1*x2-2*x22;st2x1”(或(或“=”(或(或“=”)功能相同)功能相同LINGO模型以模型以“MODEL:”开始,开始,“END”结束。结束。目标函数为目标函数为“MAX=”。不需要写。不需要写“ST” 。变量与系数间有乘号运算符变量与系数间有乘号运算符“ * ”变量名以字母开头,不能超过变量名以字母开头,不能超过32个字符个字符变量名不区分大小写(包括变量名不区分大小写(包括LINGO中的关键
6、字)中的关键字)语句的顺序不重要语句的顺序不重要行号自动产生或人为定义。目标函数所在行是第一行,行号自动产生或人为定义。目标函数所在行是第一行,第二行起为约束条件第二行起为约束条件,约束行名字被放约束行名字被放“”中。中。行中注有行中注有“!”符号的后面部分为注释。符号的后面部分为注释。使用使用LINGOLINGO的一些注意事项的一些注意事项在模型的开头可以用在模型的开头可以用“TITLE” 对模型命名,对模型命名,变量可以放在约束右端变量可以放在约束右端每行(目标,约束,说明语句)后增加每行(目标,约束,说明语句)后增加 “;”开头都是函数调用;开头都是函数调用;上下界限定用上下界限定用BN
7、D,不计入模型的约束,也不能给出不计入模型的约束,也不能给出其松紧判断和敏感性分析其松紧判断和敏感性分析;缺省假定所有变量非负;可在模型的缺省假定所有变量非负;可在模型的“END”语句后语句后用用“FREE ”将变量的非负假定取消将变量的非负假定取消;对对0-1变量说明:变量说明:BIN;对整型变量说明:对整型变量说明:GIN模型由一系列语句组成,适当缩进,增强可读性模型由一系列语句组成,适当缩进,增强可读性LINGO状态窗口状态窗口变量数量变量数量TNInTNTNClassObInfeIteTypeObj求解花费时间求解花费时间非零系数数量非零系数数量内存使用数量内存使用数量约束数量约束数量
8、模型类型模型类型当前解状态当前解状态当前目标函数值当前目标函数值扩展求解器扩展求解器使用的特殊求解程序使用的特殊求解程序到目前的最佳目标值到目前的最佳目标值特殊求解程序特殊求解程序当前运行步数当前运行步数有效步数有效步数可能显示可能显示B-and-BGlobalMultistart可直接求可直接求解的变量解的变量不作为决不作为决策变量。策变量。一般线性规划问题的一般线性规划问题的影子价格与敏感性分析影子价格与敏感性分析1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或获利24元/公斤 获利16元/公斤 50桶牛奶桶牛奶 时间时间480小时小时 至多加工至多加工100公斤公斤A1 制订生产计
9、划,使每天获利最大制订生产计划,使每天获利最大 35元可买到元可买到1桶牛奶,买吗?若买,每天最多买多少桶牛奶,买吗?若买,每天最多买多少? 可聘用临时工人,付出的工资最多是每小时几元可聘用临时工人,付出的工资最多是每小时几元? A1的获利增加到的获利增加到 30元元/公斤,应否改变生产计划?公斤,应否改变生产计划? 每天:每天:加工奶制品的生产计划加工奶制品的生产计划1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或获利24元/公斤 获利16元/公斤 x1桶牛奶生产桶牛奶生产A1 x2桶牛奶生产桶牛奶生产A2 获利获利 243x1 获利获利 164 x2 原料供应原料供应 5021 xx
10、劳动时间劳动时间 48081221 xx加工能力加工能力 10031x决策变量决策变量 目标函数目标函数 216472xxzMax每天获利每天获利约束条件约束条件非负约束非负约束 0,21xx线性线性规划规划模型模型(LP)时间时间480小时小时 至多加工至多加工100公斤公斤A1 50桶牛奶桶牛奶 每天每天模型求解模型求解 OBJECTIVE FUNCTION VALUE 1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL P
11、RICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000 NO. ITERATIONS= 220桶牛奶生产桶牛奶生产A1, 30桶生产桶生产A2,利润,利润3360元。元。 Max=72*x1+64*x2;x1+x250;12*x1+8*x2480;3*x1100;模型求解模型求解 reduced cost值表值表示当该非基变量示当该非基变量增加一个单位时增加一个单位时(其他非基变量(其他非基变量保持不变)目标保持不变)目标函数减少的量函数减少的量(对对max型问题型问题) OBJECTIVE FUNCTION
12、 VALUE 1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000 NO. ITERATIONS= 2也可理解为:也可理解为:为了使该非基变为了使该非基变量变成基变量,量变成基变量,目标函数中对应目标函数中对应系数应增加的量系数应增加的量 OBJECTIVE FUNCTION VALUE
13、1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000原料无剩余原料无剩余时间无剩余时间无剩余加工能力剩余加工能力剩余40三三种种资资源源“资源资源” 剩余为零的约束为紧约束(有效约束)剩余为零的约束为紧约束(有效约束) 结果解释结果解释 Max=72*x1+64*x2;x1+x250;12
14、*x1+8*x2480;3*x1100; OBJECTIVE FUNCTION VALUE 1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000结果解释结果解释 最优解下最优解下“资源资源”增增加加1单位时单位时“效益效益”的的增量增量 原料增原料增1单位单位, 利润增利润增48 时间加时
15、间加1单位单位, 利润增利润增2 能力增减不影响利润能力增减不影响利润影子价格影子价格Shadow price 35元可买到元可买到1桶牛奶,要买吗?桶牛奶,要买吗? 35 48, 应该买!应该买! 聘用临时工人付出的工资最多每小时几元?聘用临时工人付出的工资最多每小时几元? 2元!元!对偶计算,包括对偶对偶计算,包括对偶价格和敏感性分析价格和敏感性分析LINGOOptionsGeneral Solver(通用求解程序通用求解程序)选项卡选项卡要使用敏感性分析要使用敏感性分析必须要在这选择必须要在这选择使用敏感性分析使用敏感性分析RANGES IN WHICH THE BASIS IS UNC
16、HANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 72.000000 24.000000 8.000000 X2 64.000000 8.000000 16.000000 RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 50.000000 10.000000 6.666667 3 480.000000 53.333332 80.000000 4 100
17、.000000 INFINITY 40.000000最优解不变时目标最优解不变时目标系数允许变化范围系数允许变化范围 x1系数范围系数范围(64,96) x2系数范围系数范围(48,72) A1获利增加到获利增加到 30元元/千克,应否改变生产计划千克,应否改变生产计划 x1系数由系数由24 3= 72 增加增加为为30 3= 90,在,在允许范允许范围内围内 不变!不变!(约束条件不变约束条件不变)结果解释结果解释 LINGORange结果解释结果解释 RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABL
18、E CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 72.000000 24.000000 8.000000 X2 64.000000 8.000000 16.000000 RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 50.000000 10.000000 6.666667 3 480.000000 53.333332 80.000000 4 100.000000 INFINITY 40.000000影子价格有意义影子价格有
19、意义时约束右端的允时约束右端的允许变化范围许变化范围 原料最多增加原料最多增加10 时间最多增加时间最多增加53 35元可买到元可买到1桶牛奶,每天最多买多少?桶牛奶,每天最多买多少?最多买最多买10桶?桶?(目标函数不变目标函数不变)注意注意: 充分但充分但可能不必要可能不必要LINGO的高级使用的高级使用 MODEL:TITLE EX060201;!简单的线性规划只需要修简单的线性规划只需要修改一下已有模型的集合段改一下已有模型的集合段和数据段和数据段;!直接输入为直接输入为 min=-5*x1-2*x2;2*x1+x2+x3=8;x1+x4=3;x2+x5=4; (为了避免中止说明语句,
20、(为了避免中止说明语句,这里用的是文本格式的分这里用的是文本格式的分号,在模型中是作为文本的)号,在模型中是作为文本的)SETS:HANG/1.3/:B;LIE/1.5/:C,X;XISHU(HANG,LIE):A;ENDSETSDATA:A= 2 1 1 0 0 1 0 0 1 0 0 1 0 0 1;C=-5 -2 0 0 0;B=8 3 4;ENDDATAOBJMIN=SUM(LIE:C*X);FOR(HANG(I):YUESHU SUM(LIE(J):A(I,J)*X(J)=B(I);END集合与属性集合与属性例例 SAILCO公司需要决定下四个季度的帆船生产量。下公司需要决定下四个季
21、度的帆船生产量。下四个季度的帆船需求量分别是四个季度的帆船需求量分别是40条,条,60条,条,75条,条,25条,条,这些需求必须按时满足。每个季度正常的生产能力是这些需求必须按时满足。每个季度正常的生产能力是40条帆船,每条船的生产费用为条帆船,每条船的生产费用为400美元。如果加班生产,美元。如果加班生产,每条船的生产费用为每条船的生产费用为450美元。每个季度末,每条船的美元。每个季度末,每条船的库存费用为库存费用为20美元。假定生产提前期为美元。假定生产提前期为0,初始库存为,初始库存为10条船。如何安排生产可使总费用最小?条船。如何安排生产可使总费用最小? 分析分析:用用DEM,RP
22、,OP,INV分别表示需求量、正常生分别表示需求量、正常生产的产量、加班生产的产量、库存量,则产的产量、加班生产的产量、库存量,则DEM,RP,OP,INV对每个季度都应该有一个对应的值,对每个季度都应该有一个对应的值,也就说他们都应该是一个由也就说他们都应该是一个由4个元素组成的数组,其中个元素组成的数组,其中DEM是已知的,而是已知的,而RP,OP,INV是未知数。是未知数。 集合元素及集合的属性确定的所有变量集合元素及集合的属性确定的所有变量集合QUARTERS的元素1234定义在集合QUARTERS上的属性DEM DEM(1) DEM(2) DEM(3) DEM(4)RPRP(1)RP
23、(2)RP(3)RP(4)OPOP(1)OP(2)OP(3)OP(4)INVINV(1)INV(2)INV(3)INV(4) MODEL:!集合段:定义集合集合段:定义集合SET,元素,元素member及其属性及其属性attribute; SETS: QUARTERS/1,2,3,4/:DEM,RP,OP,INV; ENDSETS!目标与约束段:没有开始和结束标记,顺序无关;目标与约束段:没有开始和结束标记,顺序无关; MIN=SUM(QUARTERS:400*RP+450*OP+20*INV); FOR(QUARTERS(I):RP(I)1(greater than)LINGOGenerat
24、eDisply Model(Ctrl+G)自动生成行号自动生成行号可得展开式可得展开式想求解时赋值可在数据段用语句想求解时赋值可在数据段用语句 “A=?;”例例0303-1例例 建筑工地的位置建筑工地的位置(用平面坐标用平面坐标a, b表示,距离单位:表示,距离单位:公里公里)及水泥日用量及水泥日用量d(吨吨)下表给出。有两个临时料场位下表给出。有两个临时料场位于于P (5,1), Q (2, 7),日储量各有日储量各有20吨。从吨。从A, B两料场分别两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。两个向各工地运送多少吨水泥,使总的吨公里数最小。两个新的料场应建在何处,节省的吨公里数有
25、多大?新的料场应建在何处,节省的吨公里数有多大?a1.258.750.55.7537.25b1.250.754.7556.57.75d3547611基本集合与派生集合基本集合与派生集合建立模型建立模型记工地的位置为记工地的位置为 ,水泥日用量为,水泥日用量为 ;料场;料场位置为位置为 ,日储量为,日储量为 ;从料场;从料场 向工地向工地 的的运送量为运送量为 。 ),(iiba6, 1,idi),(jjyx2 , 1,jejjiijc 2622112161MIN1s.t.,1,2,62,1,23ijjijijiijijijjifcxayacdicej使用现有临时料场时,决策变量只有使用现有临时
26、料场时,决策变量只有 (非负),所以这是(非负),所以这是LP模型;当为新模型;当为新建料场选址时决策变量为建料场选址时决策变量为 和和 ,由于目标函数,由于目标函数 对对 是非线性的,是非线性的,所以在新建料场时是所以在新建料场时是NLP模型。先解模型。先解NLP模型,而把现有临时料场的位置作模型,而把现有临时料场的位置作为初始解告诉为初始解告诉LINGO。 ijcijcjjyx ,fjjyx ,本例中集合的概念本例中集合的概念利用集合的概念,可以定义需求点利用集合的概念,可以定义需求点DEMAND和供应点和供应点SUPPLY两个集合,分别有两个集合,分别有6个和个和2个元素个元素(下标下标
27、)。但决。但决策变量策变量(运送量运送量) 与集合与集合DEMAND和集合和集合SUPPLY都都有关系的。该如何定义这样的属性?有关系的。该如何定义这样的属性?ijc集合的属性相当于以集合的元素为下标的数组。这里的集合的属性相当于以集合的元素为下标的数组。这里的 相当于二维数组。它的两个下标分别来自集合相当于二维数组。它的两个下标分别来自集合DEMAND和和SUPPLY,因此可以定义一个由二元对组,因此可以定义一个由二元对组成的新的集合,然后将成的新的集合,然后将 定义成这个新集合的属性。定义成这个新集合的属性。ijcijcMODEL:Title Location Problem;sets:
28、demand/1.6/:a,b,d; supply/1.2/:x,y,e; link(demand,supply):c;endsetsdata:!locations for the demand(需求点的位置需求点的位置);a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;!quantities of the demand and supply(供需量)(供需量);d=3,5,4,7,6,11; e=20,20;enddata基本集合基本集合primary set与与派生集合派生集合derived set(定义多维数组)(定义多维数
29、组)!初始段:对集合属性定义初值(迭代算法的迭代初值)初始段:对集合属性定义初值(迭代算法的迭代初值);init:!initial locations for the supply(初始点)(初始点);x,y=5,1,2,7;endinit!Objective function(目标)(目标);OBJ min=sum(link(i,j): c(i,j)*(x(j)-a(i)2+(y(j)-b(i)2)(1/2) );!demand constraints(需求约束)(需求约束);for(demand(i):DEMAND_CON sum(supply(j):c(i,j) =d(i););!sup
30、ply constraints(供应约束)(供应约束);for(supply(i):SUPPLY_CON sum(demand(j):c(j,i) =e(i); );for(supply: bnd(0.5,X,8.75); bnd(0.75,Y,7.75); );ENDLINGO对数值顺序按列赋值,即:对数值顺序按列赋值,即:x=5,2;y=1,7;标号自动在后加下标标号自动在后加下标 *_1 , _2比比free(x);free(y);要好,可减少计算工作量要好,可减少计算工作量激活全局最优解:激活全局最优解:LINGOOptionsGlobal SolverUse Global Solve
31、r集合段(集合段(SETS ENDSETS)数据段(数据段(DATA ENDDATA)初始段(初始段(INIT ENDINIT) 目标与目标与约束段约束段 局部最优:局部最优:89.8835(吨公里吨公里 ) LP:移到数据段:移到数据段LINGO模型的构成模型的构成(5)计算段计算段CALC:T_DEM=SUN(QUARTERS:DEM);!总需求;总需求;A_DEM=T_DEM/SIZE(QUARTERS);!平均需求;平均需求;ENDCALC在数据段输入完成之后在正式求解模型之前对原在数据段输入完成之后在正式求解模型之前对原始数据进行处理,语句是始数据进行处理,语句是顺序顺序执行的,不能
32、更换执行的,不能更换顺序,只能直接使用顺序,只能直接使用赋值语句赋值语句,不能包含需要经,不能包含需要经过解方程或经过求解优化问题以后才能决定的变过解方程或经过求解优化问题以后才能决定的变量。量。 包含了两个基本集合构成的所有二元有序对的派生包含了两个基本集合构成的所有二元有序对的派生集合称为集合称为稠密集合稠密集合(简称稠集简称稠集)。有时候,在实际问题中,。有时候,在实际问题中,一些属性一些属性(数组数组) 只在笛卡儿积的一个真子集合上定义,只在笛卡儿积的一个真子集合上定义,这种派生集合称为这种派生集合称为稀疏集合稀疏集合(简称疏集简称疏集)。稠密集合与稀疏集合稠密集合与稀疏集合最短路问题
33、最短路问题例例 (最短路问题最短路问题) 在纵横交错的公路网中,货车司机希望在纵横交错的公路网中,货车司机希望找到一条从一个城市到另一个城市的最短路找到一条从一个城市到另一个城市的最短路. 下图表示的下图表示的是公路网是公路网, 节点表示货车可以停靠的城市节点表示货车可以停靠的城市,弧上的权表示弧上的权表示两个城市之间的距离两个城市之间的距离(百公里百公里). 那么那么,货车从城市货车从城市S出发到出发到达城市达城市T,如何选择行驶路线如何选择行驶路线,使所经过的路程最短使所经过的路程最短?STA1 A2 A3 B1 B2 C1 C2 633665874678956分析分析 STA1 A2 A
34、3 B1 B2 C1 C2 633665874678956此例中可把从此例中可把从S到到T的行驶过程分成的行驶过程分成4个阶段个阶段,即即 SAi (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的最优行驶路线的路长的最优行驶路线的路长: 0;1min,.2YXL SL XL Yd Y XXS本例的计算本例的计算 12
35、31123321233112221221216,3,3;min6,8,7107;min5,6,474;min6,8158;min7,9169;min5,6205.L AL AL AL BL AL AL AL AL BL AL AL AL AL CL BL BL BL CL BL BL BL TL CL CL CSTA1 A2 A3 B1 B2 C1 C2 633665874678956所以, 从S到T的最优行驶路线的路长为20. 进一步分析以上求解过程, 可以得到从S到T的最优行驶路线为S A3 B2 C1 T.这种计算方法在数学上称为动态规划(Dynamic Programming) mod
36、el:SETS: CITIES /S,A1,A2,A3,B1,B2,C1,C2,T/: L; !属性属性L(i)表示城市表示城市S S到城市到城市i的最优行驶路线的路长的最优行驶路线的路长; ; ROADS(CITIES, CITIES)/ !派生集合派生集合ROADS表示的是网络中的道路(弧)表示的是网络中的道路(弧); S,A1 S,A2 S,A3 !由于并非所有城市间都有道路直接连接,所以将弧具体列出由于并非所有城市间都有道路直接连接,所以将弧具体列出; A1,B1 A1,B2 A2,B1 A2,B2 A3,B1 A3,B2 B1,C1 B1,C2 B2,C1 B2,C2 C1,T C2
37、,T/: D; !属性属性D( i, j) 是城市是城市i到到j的直接距离(已知)的直接距离(已知);ENDSETSDATA: D = 6 3 3 6 5 8 6 7 4 6 7 8 9 5 6; L= 0, , , , , , , , ; !因为因为L(S)=0;ENDDATA FOR( CITIES( i)|i#GT#index(S): !这行中这行中index(S)index(S)可以直接写成可以直接写成11; L( i) = MIN( ROADS( j, i): L( j) + D( j, i); ); !这就是前面写出的最短路关系式这就是前面写出的最短路关系式;endend定义稀疏集
38、合方法:枚举法定义稀疏集合方法:枚举法CITIES(i)中的)中的 i 指元素在集合中的位置顺序,指元素在集合中的位置顺序, index(S)即即:index(CITIES,S),S在在CITIES中的索引值。中的索引值。没有目标函数是允许的没有目标函数是允许的 0;1min,.2YXL SL XL Yd Y XXS例例 某班某班8名同学准备分成名同学准备分成4个调查队个调查队(每队两人每队两人)前往前往4个个地区进行社会调查。这地区进行社会调查。这8名同学两两之间组队的效率如名同学两两之间组队的效率如下表所示下表所示(由于对称性,只列出了严格上三角部分由于对称性,只列出了严格上三角部分),问
39、,问如何组队可以使总效率最高?如何组队可以使总效率最高?学生S1S2S3S4S5S6S7S8S1-9342156S2-173521S3-44292S4-1552S5-876S6-23S7-4 元素过滤法元素过滤法组队问题组队问题分析分析 这是一个匹配(MATCHING)问题。把上表的效率矩阵记为BENEFIT(由于对称性,这个矩阵只有严格上三角部分共28个数取非零值)。 用MATCH(Si,Sj)=1表示同学Si,Sj组成一队 ,而MATCH(Si,Sj)=0表示Si,Sj不组队。由于对称性,只需考虑ij共28个0-1变量(而不是全部32个变量)。 显然,目标函数正好是BENEFIT(Si,S
40、j)*MATCH(Si,Sj)对I,j之和。 约束条件是每个同学只能(而且必须在)某一组,即对于任意i有:只要属性MATCH的某个下标为i就加起来,此和应该等于1。 由上面的分析,因此,完整的数学模型如下(显然,这是一个0-1线性规划): 31.0)(21,2,3,4,I 1,)(. .1 ),(),(II,或J,KMATCHJ,KMATCHtsJI*MATCHJIBENEFITMinKJJIMODEL:SETS: STUDENTS /S1.S8/; PAIRS( STUDENTS, STUDENTS) | &2 #GT# &1: BENEFIT, MATCH;ENDSETSD
41、ATA: BENEFIT = 9 3 4 2 1 5 6 1 7 3 5 2 1 4 4 2 9 2 1 5 5 2 8 7 6 2 3 4;ENDDATAobjective MAX = SUM( PAIRS( I, J): BENEFIT( I, J) * MATCH( I, J);FOR(STUDENTS( I): constraints SUM( PAIRS( J, K) | J #EQ# I #OR# K #EQ# I: MATCH( J, K) =1);FOR(PAIRS( I, J): BIN( MATCH( I, J);END第二个父集合的索引值大于第一个父集合的索引值第二个父集
42、合的索引值大于第一个父集合的索引值LINGOSolution经验介绍经验介绍很多时候是程序写出来了,但是有很多错误,怎么很多时候是程序写出来了,但是有很多错误,怎么进行程序的进行程序的调试调试呢?可按下面步骤进行:呢?可按下面步骤进行:1.直接点击运行,如果出错会弹出错误提示,根据提直接点击运行,如果出错会弹出错误提示,根据提示做相应的修改;示做相应的修改;2.可以用可以用“!”把约束变成说明语句,而把这条语句把约束变成说明语句,而把这条语句屏蔽掉,缩小寻找出错的范围;屏蔽掉,缩小寻找出错的范围;3.可以边写程序边运行,保证每行书写都是正确的程可以边写程序边运行,保证每行书写都是正确的程序;序
43、;一般容易一般容易出错出错的地方有:的地方有:定义了多个长度一样的集合,而在使用中区分不明确;定义了多个长度一样的集合,而在使用中区分不明确;定义了同名的属性;定义了同名的属性; 掉了或多了括号;掉了或多了括号;分号不是英文半角输入;使用的字母没有定义;分号不是英文半角输入;使用的字母没有定义;循环语句中元素下标颠倒或者不明;循环语句中元素下标颠倒或者不明;约束错误变成不可行或无界;约束错误变成不可行或无界;关系运算符(如关系运算符(如“=”)使用逻辑运算符(如)使用逻辑运算符(如“#EQ#”););使用了非使用了非LINGO语言的输入;语言的输入;(比如比如%引导说明语句)引导说明语句)函数
44、调用错误;函数调用错误;函数的括号写错了地方等函数的括号写错了地方等.集合的不同类型及其关系集合的不同类型及其关系 集合集合派生集合派生集合稀疏集合稀疏集合稠密集合稠密集合基本集合基本集合元素列表法元素列表法 元素过滤法元素过滤法 直接列举法直接列举法 隐式列举法隐式列举法 集合的使用小结集合的使用小结基本集合的定义语法基本集合的定义语法 基本集合的定义格式为基本集合的定义格式为(方括号方括号“ ”中的内容是可选项中的内容是可选项, 可以没可以没有有):setname /member_list/ : attribute_list;其中其中setname为定义的集合名,为定义的集合名,membe
45、r_list为元素列表,为元素列表,attribute_list为属性列表。元素列表可以采用显式列举法为属性列表。元素列表可以采用显式列举法(即直接即直接将所有元素全部列出将所有元素全部列出,元素之间用逗号或空格分开元素之间用逗号或空格分开),也可以采用隐也可以采用隐式列举法。隐式列举法可以有几种不同格式,式列举法。隐式列举法可以有几种不同格式,类型类型隐式列举格式隐式列举格式示例示例示例集合表示的元素示例集合表示的元素数字型数字型1.n1.51, 2, 3, 4, 5字符字符-数字型数字型stringM.stringNCar101.car208Car101, car102, , car208
46、日期(星期)型日期(星期)型dayM.dayNMON.FRIMON, TUE, WED, THU, FRI月份型月份型monthM.monthNOCT.JANOCT, NOV, DEC, JAN年份年份-月份型月份型monthYearM.monthYearNOCT2001.JAN2002OCT2001, NOV2001, DEC2001, JAN2002 元素列表和属性列表都是可选的。 当属性列表不在集合定义中出现时,这样的集合往往只是为了将来在程序中作为一个循环变量来使用,或者作为构造更复杂的派生集合的父集合使用(匹配问题中的集合STUDENTS没有属性列表)。 而当元素列表不在基本集合的定
47、义中出现时,则必须在程序的数据段以赋值语句的方式直接给出元素列表。 例如,前例中SAILCO公司决定四个季度的帆船生产量模型的集合段和数据段可以分别改为:SETS: QUARTERS:DEM,RP,OP,INV; !注意没有给出集合的元素列表;ENDSETSDATA: QUARTERS DEM=1 40 2 60 3 75 4 25; !注意LINGO按列赋值的特点;ENDDATA基本集合的定义语法基本集合的定义语法 帆船生产量模型的源程序匹配问题的源程序派生集合的定义语法派生集合的定义语法 派生集合的定义格式为(方括号“ ”中的内容是可选项, 可以没有): setname(parent_se
48、t_list) /member_list/ : attribute_list;与基本集合的定义相比较多了一个parent_set_list(父集合列表)。父集合列表中的集合(如 set1,set2,等)称为派生集合setname的父集合,它们本身也可以是派生集合。当元素列表(member_list)不在集合定义中出现时,还可以在程序的数据段以赋值语句的方式给出元素列表;若在程序的数据段也不以赋值语句的方式给出元素列表,则认为定义的是稠密集合,即父集合中所有元素的有序组合(笛卡儿积)都是setname的元素。当元素列表在集合定义中出现时,又有“元素列表法”(直接列出元素)和“元素过滤法”(利用过
49、滤条件)两种不同方式。 当属性列表不在集合定义中出现时,这样的集合往当属性列表不在集合定义中出现时,这样的集合往往只是为了将来在程序中作为一个循环变量来使用,或往只是为了将来在程序中作为一个循环变量来使用,或者构造更复杂的派生集合的父集合使用。者构造更复杂的派生集合的父集合使用。 当元素列表不再基本集合的定义中出现时,则必须当元素列表不再基本集合的定义中出现时,则必须在程序的数据段以赋值语句的方式直接给出元素列表。在程序的数据段以赋值语句的方式直接给出元素列表。SETS:QUARERS:DEM,RP,OP,INV;ENDSETSDATA:QUARTERS DEM=1 40 2 60 3 75
50、4 25;ENDDATA算术运算符算术运算符加、减、乘、除、乘方等数学运算加、减、乘、除、乘方等数学运算(即数与数之即数与数之间的运算,运算结果也是数间的运算,运算结果也是数)。LINGO中的算术运算符有以下中的算术运算符有以下5种:种:+(加法),(加法),(减法或负号),(减法或负号),*(乘法),(乘法),/(除法),(除法), (求幂求幂)。运算符及其优先级运算符及其优先级逻辑运算符逻辑运算符运算结果只有运算结果只有“真真”(TRUE)和和“假假”(FALSE)两个值两个值(称为称为“逻辑值逻辑值”),LINGO中用数字中用数字1代表代表TRUE,其他值,其他值(典型典型的值是的值是0
51、)都是都是FALSE。在在LINGO中,逻辑运算中,逻辑运算(表达式表达式)通常作为过滤条件使用通常作为过滤条件使用,逻逻辑运算符有辑运算符有9种,可以分成两类:种,可以分成两类:#AND#(与与),#OR#(或或),#NOT#(非非):逻辑值之间的运算,它逻辑值之间的运算,它们操作的对象本身已经是逻辑值或逻辑表达式,计算结果们操作的对象本身已经是逻辑值或逻辑表达式,计算结果也是逻辑值。也是逻辑值。#EQ#(等于等于),#NE#(不等于不等于),#GT#(大于大于),#GE#(大于等大于等于于),#LT#(小于小于),#LE#(小于等于小于等于):是:是“数与数之间数与数之间”的比较的比较,也
52、就是它们操作的对象本身必须是两个数也就是它们操作的对象本身必须是两个数, 计算得到的结果计算得到的结果是逻辑值。是逻辑值。关系运算符关系运算符表示是表示是“数与数之间数与数之间”的大小关系,在的大小关系,在LINGO中用来表中用来表示优化模型的约束条件。示优化模型的约束条件。LINGO中关系运算符有中关系运算符有3种:种:(即即(即即=,大于等于,大于等于)(在优化模型中在优化模型中约束一般没有严格小于、严格大于关系约束一般没有严格小于、严格大于关系)运算符的优先级运算符的优先级 优先级优先级运算符运算符最高最高#NOT# (负号)(负号)* /+ (减法)(减法)#EQ# #NE# #GT#
53、 #GE# #LT# #LE# #AND# #OR#最低最低(=)三类运算符:三类运算符: 算术运算符算术运算符 逻辑运算符逻辑运算符 关系运算符关系运算符在LINGO中建立优化模型时可以引用大量的内部函数,这些函数以” 打头。LINGO中包括相当丰富的数学函数,这些函数的用法非常简单,下面一一列出。ABS(X):绝对值函数,返回X的绝对值。COS(X):余弦函数,返回X的余弦值(X的单位是弧度)。EXP(X):指数函数,返回eXFLOOR(X):取整函数,返回X的整数部分(向最靠近0的方向取整)。LGM(X) :返回X的伽玛(gamma)函数的自然对数值(当X为整数时LGM(X) = LOG
54、(X-1)!;当X不为整数时,采用线性插值得到结果)。LOG(X):自然对数函数,返回X的自然对数值。的值(其中e=2.718281.)。基本的数学函数基本的数学函数基本的数学函数基本的数学函数 MOD(X,Y):模函数,返回X对Y取模的结果,即X除以Y的余数,这里X和Y应该是整数。POW(X,Y):指数函数,返回XY的值。SIGN(X):符号函数,返回X的符号值(X = 0时返回+1)。SIN(X):正弦函数,返回X的正弦值(X的单位是弧度)。SMAX(list):最大值函数,返回一列数(list)的最大值。SMIN(list):最小值函数,返回一列数(list)的最小值。SQR(X):平方
55、函数,返回X的平方(即X*X)的值。SQRT(X):开平方函数,返回X的正的平方根的值。TAN(X):正切函数,返回X的正切值(X的单位是弧度)。集合循环函数集合循环函数 集合上的元素(下标)进行循环操作的函数, 一般用法如下:function(setname ( set_index_list) | condition : expression_list);其中:function 集合函数名,FOR、MAX、MIN、PROD、SUM之一; Setname 集合名;set_index_list 集合索引列表(不需使用索引时可以省略);Condition 用逻辑表达式描述的过滤条件(通常含有索引,
56、无条件时可以省略);expression_list 一个表达式(对FOR函数,可以是一组表达式。五个集合函数名的含义:FOR(集合元素的循环函数): 对集合setname的每个元素独立地生成表达式,表达式由expression_list描述(通常是优化问题的约束)。MAX(集合属性的最大值函数):返回集合setname上的表达式的最大值。MIN(集合属性的最小值函数):返回集合setname上的表达式的最小值。PROD(集合属性的乘积函数): 返回集合setname上的表达式的积。SUM(集合属性的求和函数):返回集合setname上的表达式的和。集合循环函数集合循环函数 INDEX( set
57、_name, primitive_set_element) 给出元素primitive_set_element在集合set_name中的索引值(即按定义集合时元素出现顺序的位置编号)。省略set_name,LINGO按模型中定义的集合顺序找到第一个含有该元素的集合,并返回索引值。如果没有找到该元素,则出错。 注: Set_name的索引值是正整数且只能位于1和元素个数之间。例:定义一个女孩姓名集合(GIRLS)和男孩姓名集合(BOYS) :SETS: GIRLS /DEBBIE, SUE, ALICE/; BOYS /BOB, JOE, SUE, FRED/;ENDSETS 都有SUE, GI
58、RLS在BOYS前定义,调用INDEX(SUE)将返2,相当于INDEX(GIRLS,SUE) 。要找男孩中名为SUE的小孩的索引,应该使用INDEX(BOYS, SUE),返3。集合操作函数集合操作函数 集合操作函数集合操作函数 IN( set_name, primitive_index_1 , primitive_index_2 .) 判断一个集合中是否含有某个索引值。如果集合set_name中包含由索引primitive_index_1 , primitive_index_2 .所对应元素,则返回1(逻辑值“真”),否则返回0(逻辑值“假”)。索引用“&1”、“&2”或I
59、NDEX函数等形式给出,这里“&1”表示对应于第1个父集合的元素的索引值,“&2”表示对应于第2个父集合的元素的索引值。 例:定义一个集合STUDENTS(基本集合),派生出集合PASSED和FAILED,定义: SETS: STUDENTS / ZHAO, QIAN, SUN, LI/:; PASSED( STUDENTS) /QIAN,SUN/:; FAILED( STUDENTS) | #NOT# IN( PASSED, &1):; ENDSETS 如果集合C是由集合A,B派生的,例如: SETS: A / 1.3/:; B / X Y Z/:; C( A, B)
60、 / 1,X 1,Z 2,Y 3,X/:; ENDSETS 判断C中是否包含元素(2,Y),则可以利用以下语句: X = IN( C, INDEX( A, 2), INDEX( B, Y);对本例,结果是X=1(真)。 注:X既是集合B的元素,又对X赋值1,在LINGO中这种表达是允许的,因为前者是集合的元素,后者是变量,逻辑上没有关系(除了同名外),所以不会出现混淆。集合操作函数集合操作函数 IN( set_name, primitive_index_1 , primitive_index_2 .)WRAP(I,N) 此函数对此函数对N1无定义无定义 当当I位于区间位于区间1, N内时直接返回内时直接返回I;一般地,返回;一般地,返回 J =