1、数学建模协会软件交流 Lingo软件,张旺 09测控2班,厚德载物,厚积薄发,数学建模协会,厚德载物,厚积薄发,数学建模协会,Lingo软件界面介绍 Lingo程序编辑 一般编辑格式 常用的运算符号和逻辑运算符号 常用函数 Lingo在数学建模中的应用,厚德载物,厚积薄发,数学建模协会,2011/11/12,厚德载物,厚积薄发,数学建模协会,厚德载物,厚积薄发,数学建模协会,LINGO软件界面,厚德载物,厚积薄发,数学建模协会,查找编辑程序里面的一些变量,符号,函数等等,厚德载物,厚积薄发,数学建模协会,查找定位的行,厚德载物,厚积薄发,数学建模协会,查找匹配的括号,执行命令,选择性显示所要的
2、结果,并可以对变量值或者结果以图形的进行直观的表示出来,厚德载物,厚积薄发,数学建模协会,参数设置命令窗口,厚德载物,厚积薄发,数学建模协会,例:某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆工。生产数据如下表所示:,若要求桌子的生产量不超过5件,如何安排三种产品的生产可使利润最大?,Lingo 程序编辑,厚德载物,厚积薄发,数学建模协会,例1 如何在LINGO中求解如下的LP问题:,厚德载物,厚积薄发,数学建模协会,PART1: 在lingo里面进行编辑程序如下: Model: objmax=60*x1+30*x2+20*x3; 8*x1+6*x2+x3=48; 4*x1+
3、2*x2+1.5*x3=20; 2*x1+1.5*x2+.5*x3=8; x2=5; End 然后点击 (solve)按钮 或窗口LINGO solve运行程序,厚德载物,厚积薄发,数学建模协会,弹出来的对话框是:,Variables(变量数量):变量总数(Total)、非线性变量数(Nonlinear)、 整数变量数(Integer)。,Constraints(约束数量):约束总数(Total)、非线性约束个数(Nonlinear)。,Nonzeros(非零系数数量):总数(Total)、非线性项系数个数(Nonlinear)。,Elapsed Runtime (hh:mm:ss)(求解花费
4、的时间),Generator Memory Used (K) (内存使用量),厚德载物,厚积薄发,数学建模协会,求解器(求解程序)状态框,当前模型的类型 :LP,QP,ILP,IQP,PILP, PIQP,NLP,INLP,PINLP (以I开头表示IP,以PI开头表示PIP),当前解的状态 : “Global Optimum“, “Local Optimum“, “Feasible“, “Infeasible“(不可行), “Unbounded“(无界), “Interrupted“(中断), “Undetermined“(未确定),解的目标函数值,当前约束不满足的总量(不是不满足的约束的个
5、数):实数(即使该值=0,当前解也可能不可行,因为这个量中没有考虑用上下界命令形式给出的约束),目前为止的迭代次数,厚德载物,厚积薄发,数学建模协会,使用的特殊求解程序 : B-and-B (分枝定界算法) Global (全局最优求解程序) Multistart(用多个初始点求解的程序),目前为止找到的可行解的最佳目标函数值,目标函数值的界,特殊求解程序当前运行步数: 分枝数(对B-and-B程序); 子问题数(对Global程序); 初始点数(对Multistart程序),有效步数,扩展的求解器(求解程序)状态框,厚德载物,厚积薄发,数学建模协会,基变量,非基变量,松弛变量,对偶价格,紧约
6、束,非紧约束,厚德载物,厚积薄发,数学建模协会,非基变量:value值为零的变量 基 变 量:value值非零的变量Reduced Cost:表示当变量单位增加或者减少时, 目标函数的变化值。 max型问题,假如 reduced cost的值为A(A非零),并且其他的变量不变化的情况下,表示对应变量X增加一个单位长度时,目标函数减少的一个A。 min型问题,则目标函数的增加一个A。 以上面的结果为例:假如其他的条件是不变的,让变量x2=1,则我们的目标函数值变为: 280-5=275,厚德载物,厚积薄发,数学建模协会,Slack or Surplus:松弛变量或者是剩余变量。指的是约束条件可以
7、改变的范围,此时并不改变目标函数的值。 当其值是0时,称此行约束为紧约束 不为0时,称此约束为非紧约束,Dual price:对偶价格。主要针对紧约束而言。在其他约束不变化时,让某一紧约束改变单位长度,目标函数增加或者减少一个对偶价格。 max型问题,表示目标函数增加一个对偶价格 min型问题,指的是目标函数减少一个对偶价格2*x1+1.5*x2+.5*x38 ; 紧约束 假如更改为 2*x1+1.5*x2+.5*x39; 得到目标函数的值为:280+10=290,厚德载物,厚积薄发,数学建模协会,灵敏度分析(range analysis),设置步骤: LINGO OPTIONS genera
8、l solver Dual computation然后再下拉框内选择Price&Range 然后点击“应用”按钮,再点击“ok”按钮关闭对画框,灵敏性分析表示的是最优基变量保持不变的系数范围。,厚德载物,厚积薄发,数学建模协会,设置好options之后,首先选中你的程序编辑窗口,将之执为当前页。然后在菜单栏找到LINGO选项,在下拉框下找到Range,点击即可。,厚德载物,厚积薄发,数学建模协会,结果分析,Objective Coefficient Ranges选项: 对于变量x1的系数是60,允许增加(Allowable Increase)20,允许减少(Allowable Decrease
9、)量为4,说明当它在60-4,60+20=56,80范围变化时,最优基保持不变也就是变量保持不变。Righthand Side Ranges选项下的内容形式与上面的一致,厚德载物,厚积薄发,数学建模协会,一、程序编写一般形式,LINGO中建立的优化模型可以由五个部分组成,或称为五“段”(SECTION):,(1)集合段(SETS):以“ SETS:” 开始,“ENDSETS”结束,定义必要的集合变量(SET)及其元素(MEMBER,含义类似于数组的下标)和属性(ATTRIBUTE,含义类似于数组)。 例如: sets: x/13/:a,b; x代表数组1 2 3,而,b代表的是拥有三量的向量
10、y/13/:c,d; links(x,y):w; 同理w是3行3列的矩阵 Endsets,厚德载物,厚积薄发,数学建模协会,(2)目标与约束段,(3)数据段(DATA):以 “DATA:” 开始, “ENDDATA”结束,对集合的属性(数组)输入必要的常数数据。 格式为:“attribute(属性) = value_list(常数列表);” 常数列表(value_list)中数据之间可以用逗号“,”分开,也可以用空格分开。(数据通过文件导入) 如data:DEM=40 60 75 25; 向量 A= 6 2 6 7 4 2 5 矩阵4 9 5 3 8 5 85 2 1 9 7 4 37 6 7
11、 3 9 2 72 3 9 5 7 2 6; Enddata,厚德载物,厚积薄发,数学建模协会,(4)初始段(INIT):以“INIT: ”开始, “ENDINIT”结束,对集合的属性(数组)定义初值(因为求解算法一般是迭代算法,所以用户如果能给出一个比较好的迭代初值,对提高算法的计算效果是有益的)。 其用法同数据段,(5)计算段(CALC):以“CALC: ”开始, “ENDCALC”结束,对一些原始数据进行计算处理。 在实际问题中,输入的数据通常是原始数据,不一定能在模型中直接使用,可以在这个段对这些原始数据进行一定的“预处理”,得到模型中真正需要的数据 一般这一段没有用到,数据简单的计算
12、在下面进行,厚德载物,厚积薄发,数学建模协会,二、运算符号,算术运算符: 乘方 乘 除 加 减,厚德载物,厚积薄发,数学建模协会,#not# 否定该操作数的逻辑值 #eq # 若两个运算数相等,则为true;否则为flase #ne # 若两个运算符不相等,则为true;否则为flase #gt # 若左边的运算符严格大于右边的运算符,则true;否则为flase #ge # 若左边的运算符大于或等于右边的,则为true;否则为flase #lt # 若左边的运算符严格小于右边的,则为true;否则 为flase #le # 若左边的运算符小于或等于右边的,则为true;否则为flase #a
13、nd# 仅当两个参数都为true时,结果为true;否则为flase #or# 仅当两个参数都为false时,结果为false;否则为true,逻辑运算符号:,厚德载物,厚积薄发,数学建模协会,数学函数: abs(x) 返回x的绝对值 sin(x) 返回x的正弦值,x采用弧度制 cos(x) 返回x的余弦值 tan(x) 返回x的正切值 exp(x) 返回常数e的x次方 log(x) 返回x的自然对数 sign(x) 如果x=0时,返回不超 过x的最大整数;当x0时,返回不低于x的最大整数。 smax(x1,x2,xn) 返回x1,x2,xn中的最大值 smin(x1,x2,xn) 返回x1,
14、x2,xn中的最小值,常用的函数,厚德载物,厚积薄发,数学建模协会,常用其他函数 for: 循环函数 sum: 求和函数 bin(x) 限制x为0或1 bnd(L,x,U) 限制LxU free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数 gin(x) 限制x为整数 if(logical_condition,true,false) 条件函数,厚德载物,厚积薄发,数学建模协会,我们利用新的格式对上面的例题进行编程,此次利用向量和矩阵来表示约束条件和目标函数:,目标函数:,厚德载物,厚积薄发,数学建模协会,PART2 编辑的程序是: model: sets: var1/13/:x,
15、coefficient; var2/14/:y; 集合段 links(var2,var1):m; endsets data: y=48 20 8 5; coefficient=60 30 20; m=8 6 14 2 1.5 2 1.5 0.50 1 0; enddata objmax= sum(var1(i): x(i)*coefficient(i); for(var2(j): sum(var1(i): m(j,i)*x(i)y(j); end,数据段,目标与约束段,展厅保安监控问题海湾艺术馆考虑安装一系列摄像安全系统以减少其保安费用。下图是海湾艺术馆用于展览的8间展厅的示意图。各展厅之间的
16、通道显示为 - 。一家保安公司建议在一些通道安装双向摄像机。每架摄象机都可以很好地监控通道两侧的展厅。例如:在通道处安装摄象机,则展厅 1 和 4 就可以完全被监控到,等等。管理层用最少数量的双向摄像机覆所有的8间展厅。,数学建模协会软件交流 Lingo软件,张旺 09测控2班,厚德载物,厚积薄发,数学建模协会,厚德载物,厚积薄发,数学建模协会,Lingo软件界面介绍 Lingo程序编辑 一般编辑格式 常用的运算符号和逻辑运算符号 常用函数 Lingo在数学建模中的应用,厚德载物,厚积薄发,数学建模协会,2011/11/12,厚德载物,厚积薄发,数学建模协会,厚德载物,厚积薄发,数学建模协会,
17、LINGO软件界面,厚德载物,厚积薄发,数学建模协会,查找编辑程序里面的一些变量,符号,函数等等,厚德载物,厚积薄发,数学建模协会,查找定位的行,厚德载物,厚积薄发,数学建模协会,查找匹配的括号,执行命令,选择性显示所要的结果,并可以对变量值或者结果以图形的进行直观的表示出来,厚德载物,厚积薄发,数学建模协会,参数设置命令窗口,厚德载物,厚积薄发,数学建模协会,例:某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆工。生产数据如下表所示:,若要求桌子的生产量不超过5件,如何安排三种产品的生产可使利润最大?,Lingo 程序编辑,厚德载物,厚积薄发,数学建模协会,例1 如何在LIN
18、GO中求解如下的LP问题:,厚德载物,厚积薄发,数学建模协会,PART1: 在lingo里面进行编辑程序如下: Model: objmax=60*x1+30*x2+20*x3; 8*x1+6*x2+x3=48; 4*x1+2*x2+1.5*x3=20; 2*x1+1.5*x2+.5*x3=8; x2=5; End 然后点击 (solve)按钮 或窗口LINGO solve运行程序,厚德载物,厚积薄发,数学建模协会,弹出来的对话框是:,Variables(变量数量):变量总数(Total)、非线性变量数(Nonlinear)、 整数变量数(Integer)。,Constraints(约束数量):
19、约束总数(Total)、非线性约束个数(Nonlinear)。,Nonzeros(非零系数数量):总数(Total)、非线性项系数个数(Nonlinear)。,Elapsed Runtime (hh:mm:ss)(求解花费的时间),Generator Memory Used (K) (内存使用量),厚德载物,厚积薄发,数学建模协会,求解器(求解程序)状态框,当前模型的类型 :LP,QP,ILP,IQP,PILP, PIQP,NLP,INLP,PINLP (以I开头表示IP,以PI开头表示PIP),当前解的状态 : “Global Optimum“, “Local Optimum“, “Feas
20、ible“, “Infeasible“(不可行), “Unbounded“(无界), “Interrupted“(中断), “Undetermined“(未确定),解的目标函数值,当前约束不满足的总量(不是不满足的约束的个数):实数(即使该值=0,当前解也可能不可行,因为这个量中没有考虑用上下界命令形式给出的约束),目前为止的迭代次数,厚德载物,厚积薄发,数学建模协会,使用的特殊求解程序 : B-and-B (分枝定界算法) Global (全局最优求解程序) Multistart(用多个初始点求解的程序),目前为止找到的可行解的最佳目标函数值,目标函数值的界,特殊求解程序当前运行步数: 分枝
21、数(对B-and-B程序); 子问题数(对Global程序); 初始点数(对Multistart程序),有效步数,扩展的求解器(求解程序)状态框,厚德载物,厚积薄发,数学建模协会,基变量,非基变量,松弛变量,对偶价格,紧约束,非紧约束,厚德载物,厚积薄发,数学建模协会,非基变量:value值为零的变量 基 变 量:value值非零的变量Reduced Cost:表示当变量单位增加或者减少时, 目标函数的变化值。 max型问题,假如 reduced cost的值为A(A非零),并且其他的变量不变化的情况下,表示对应变量X增加一个单位长度时,目标函数减少的一个A。 min型问题,则目标函数的增加一
22、个A。 以上面的结果为例:假如其他的条件是不变的,让变量x2=1,则我们的目标函数值变为: 280-5=275,厚德载物,厚积薄发,数学建模协会,Slack or Surplus:松弛变量或者是剩余变量。指的是约束条件可以改变的范围,此时并不改变目标函数的值。 当其值是0时,称此行约束为紧约束 不为0时,称此约束为非紧约束,Dual price:对偶价格。主要针对紧约束而言。在其他约束不变化时,让某一紧约束改变单位长度,目标函数增加或者减少一个对偶价格。 max型问题,表示目标函数增加一个对偶价格 min型问题,指的是目标函数减少一个对偶价格2*x1+1.5*x2+.5*x38 ; 紧约束 假
23、如更改为 2*x1+1.5*x2+.5*x39; 得到目标函数的值为:280+10=290,厚德载物,厚积薄发,数学建模协会,灵敏度分析(range analysis),设置步骤: LINGO OPTIONS general solver Dual computation然后再下拉框内选择Price&Range 然后点击“应用”按钮,再点击“ok”按钮关闭对画框,灵敏性分析表示的是最优基变量保持不变的系数范围。,厚德载物,厚积薄发,数学建模协会,设置好options之后,首先选中你的程序编辑窗口,将之执为当前页。然后点击 按钮,厚德载物,厚积薄发,数学建模协会,结果分析,Objective C
24、oefficient Ranges选项: 对于变量x1的系数是60,允许增加(Allowable Increase)20,允许减少(Allowable Decrease)量为4,说明当它在60-4,60+20=56,80范围变化时,最优基保持不变也就是变量X1的值保持不变。注意边界处X1可能会有跳跃,希望大家注意!Righthand Side Ranges选项下的内容形式与上面的一致,厚德载物,厚积薄发,数学建模协会,一、程序编写一般形式,LINGO中建立的优化模型可以由五个部分组成,或称为五“段”(SECTION):,(1)集合段(SETS):以“ SETS:” 开始,“ENDSETS”结束
25、,定义必要的集合变量(SET)及其元素(MEMBER,含义类似于数组的下标)和属性(ATTRIBUTE,含义类似于数组)。 例如: sets: x/13/:a,b; x代表数组1 2 3,而,b代表的是拥有三量的向量 y/13/:c,d; links(x,y):w; 同理w是3行3列的矩阵 Endsets,厚德载物,厚积薄发,数学建模协会,(2)目标与约束段,(3)数据段(DATA):以 “DATA:” 开始, “ENDDATA”结束,对集合的属性(数组)输入必要的常数数据。 格式为:“attribute(属性) = value_list(常数列表);” 常数列表(value_list)中数据
26、之间可以用逗号“,”分开,也可以用空格分开。(数据通过文件导入) 如data:DEM=40 60 75 25; 向量 A= 6 2 6 7 4 2 5 矩阵4 9 5 3 8 5 85 2 1 9 7 4 37 6 7 3 9 2 72 3 9 5 7 2 6; Enddata,厚德载物,厚积薄发,数学建模协会,(4)初始段(INIT):以“INIT: ”开始, “ENDINIT”结束,对集合的属性(数组)定义初值(因为求解算法一般是迭代算法,所以用户如果能给出一个比较好的迭代初值,对提高算法的计算效果是有益的)。 其用法同数据段,(5)计算段(CALC):以“CALC: ”开始, “ENDC
27、ALC”结束,对一些原始数据进行计算处理。 在实际问题中,输入的数据通常是原始数据,不一定能在模型中直接使用,可以在这个段对这些原始数据进行一定的“预处理”,得到模型中真正需要的数据 一般这一段没有用到,数据简单的计算在下面进行,厚德载物,厚积薄发,数学建模协会,二、运算符号,算术运算符: 乘方 乘 除 加 减,厚德载物,厚积薄发,数学建模协会,#not# 否定该操作数的逻辑值 #eq # 若两个运算数相等,则为true;否则为flase #ne # 若两个运算符不相等,则为true;否则为flase #gt # 若左边的运算符严格大于右边的运算符,则true;否则为flase #ge # 若
28、左边的运算符大于或等于右边的,则为true;否则为flase #lt # 若左边的运算符严格小于右边的,则为true;否则 为flase #le # 若左边的运算符小于或等于右边的,则为true;否则为flase #and# 仅当两个参数都为true时,结果为true;否则为flase #or# 仅当两个参数都为false时,结果为false;否则为true,逻辑运算符号:,厚德载物,厚积薄发,数学建模协会,数学函数: abs(x) 返回x的绝对值 sin(x) 返回x的正弦值,x采用弧度制 cos(x) 返回x的余弦值 tan(x) 返回x的正切值 exp(x) 返回常数e的x次方 log(
29、x) 返回x的自然对数 sign(x) 如果x=0时,返回不超 过x的最大整数;当x0时,返回不低于x的最大整数。 smax(x1,x2,xn) 返回x1,x2,xn中的最大值 smin(x1,x2,xn) 返回x1,x2,xn中的最小值,常用的函数,厚德载物,厚积薄发,数学建模协会,常用其他函数 for: 循环函数 sum: 求和函数 bin(x) 限制x为0或1 bnd(L,x,U) 限制LxU free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数 gin(x) 限制x为整数 if(logical_condition,true,false) 条件函数,厚德载物,厚积薄发,数
30、学建模协会,我们利用新的格式对上面的例题进行编程,此次利用向量和矩阵来表示约束条件和目标函数:,目标函数:,厚德载物,厚积薄发,数学建模协会,PART2 编辑的程序是: model: sets: var1/13/:x,coefficient; var2/14/:y; 集合段 links(var2,var1):m; endsets data: y=48 20 8 5; coefficient=60 30 20; m=8 6 14 2 1.5 2 1.5 0.50 1 0; enddata objmax= sum(var1(i): x(i)*coefficient(i); for(var2(j): sum(var1(i): m(j,i)*x(i)y(j); end,数据段,目标与约束段,展厅保安监控问题海湾艺术馆考虑安装一系列摄像安全系统以减少其保安费用。下图是海湾艺术馆用于展览的8间展厅的示意图。各展厅之间的通道显示为 - 。一家保安公司建议在一些通道安装双向摄像机。每架摄象机都可以很好地监控通道两侧的展厅。例如:在通道处安装摄象机,则展厅 1 和 4 就可以完全被监控到,等等。管理层用最少数量的双向摄像机覆所有的8间展厅。,数学建模协会,厚德载物,厚积薄发,数学建模协会,Thank you!,