《lingo入门ppt课件》由会员分享,可在线阅读,更多相关《lingo入门ppt课件(122页珍藏版)》请在金锄头文库上搜索。
1、lingo优化软件入门(商用版)舒兴明一、lindo/lingo软件简介1、美国芝加哥大学的linus schrage教授于1980年前后开发的专门用于求解最优化问题的软件包,后经多年完善与扩充,并成立了lindo系统公司进行商业运作取得巨大成功。根据 lingo公司凯时尊龙官网主页(http:/)提供的信息,位列财富杂志500强的企业中,有一半以上使用lingo优化软件,前25强有23企业使用lingo优化软件。用户可以在 凯时尊龙官网主页自由下载各类子包的演示版和应用 例子。演示版和正式版功能类似,只是求解问题规模受到限制。各类版本的限制如下表版本类型总变量数整数变量数非线性变量数约束数演示版3003030150
2、求解包5005050250高级版20002002001000超级版80008008004000工业版320003200320016000扩展版无限无限无限无限 lingo是英文linear interactive and general optimizer首写字母的缩写,即“交互式线性和通用化求解器”。2、lindo/lingo软件内部有以下4个求解程序用于求解不同类型的优化模型(1)直接求解器(direct solver);(2)线性优化求解程序(linear solver);(3)非线性优化求解程序(nonlinear solver);(4)分支定界管理程序(branch and boun
3、d manager)。 对于已经输入的一个优化模型,一旦发出求解指令,第一步是对等式约束的直接处理,例如,如果约束中有三个等式约束xyz=30,x y=8,y=5则lingo软件能直接确定y=5,x=3,z=2,这三个变量就变成常数了。这样就尽量减少模型的规模(变量数和约束数),从而使得求解更加有效快捷。第二步就是识别模型的类型,根据类型调用不同的处理器来求解。 而处理器识别模型会在计算界面给出说明:lp:线性规划模型qp:二次规划模型nlp:非线性规划ilp:整数线性规划inlp:整数非线性规划iqp:整数二次规划二、建立优化模型应注意的几个问题1、尽量使用实数优化模型,尽量减少整数约束和整
4、数变量的个数;2、尽量使用光滑优化模型,尽量避免使用非光滑函数; 尽量少用绝对值函数(|x|)、符号函数(当x0时,函数为1)、多个变量求最大(或最小)、四舍五入函数、取整函数等。3、尽量使用线性优化模型,尽量减少非线性约束和非线性变量(非线性约束中的变量)的个数;4、合理设定变量的上下界,避免计算陷入“大海捞针”。5、模型中使用的单位的数量级要适当 lingo计算时,最大数尽量不要超过最小数的1000倍,如果出现100000000与0.1的计算,误差很大!小数湮没于大数!例1例1 化下列非线性规划化为线性规划解令,代入原规划模型,得解设,由此解得同理,有代入模型,注意增加约束解令,则此约束的
5、充分条件是所以,原模型等价于最高分越低越好!解 设,此约束等价于所以原模型等价于最低分越高越好!三、编写一个简单的lingo程序1、安装lingo优化软件 根据一般的程序安装方法,运行setup.exe文件,只要按照提示步骤,就可以顺利安装完毕。在第一次运行lingo(这里以lingo8.0为例)需要你输入密码(安装序列号),如果没有,就只有使用演示版(试用版),假设你购买的是正版,把复制好地秘密粘贴到此窗口即可。2、编写一个简单的lingo程序例2 在lingo的编辑窗口输入如下规划(二次规划)x1 x2100;x1=0时,不必在输入计算机中,相反,如果有变量x可以取负数,则应规范free(
6、x);(4)lingo中的=,替换,即不区分大于等于和大于,小于等于和小于;例如:y=sinx-1,数学上y取值于【-2,0】,如果是写在lingo程序中,就导致y=0!,(必须加上free(y)),为什么?(5)输入的多余的空格和回车都会被忽略,一个约束可以分两行或者多行书写;(6)lingo模型是由一系列语句构成,即语句是组成lingo模型的基本单位,每个语句都是以分号“;”结尾,但尽量一个语句用一行来书写;(7) 以感叹号“!”开始的语句是说明语句(注释语句,以便读者更好理解程序),但计算机在读取模型时,会忽略这样的语句。(8)在lingo中,以“”开头的都是调用函数,这在后面专门叙述。
7、3、计算摁这个按钮就可以开始计算,如果有错误,根据提示逐步修改。最终得到一个计算状态文档(如下所示)lingo程序常见错误:乘号“*”漏掉;分号“;”漏掉;变量名没有定义;函数标示“”漏掉;括号不配对;sets,endsets,data,enddata(不是enddate!)后加分号。同时也得到一个求解结果的窗口 global optimal solution found at iteration: 364 objective value: 11077.50 variable value reduced cost x1 35.00000 -1.999947 x2 65.00000 0.0000
8、00 row slack or surplus dual price 1 0.000000 6.500069 2 95.00000 0.000000 3 11077.50 1.000000得到最优解迭代次数为364次,目标值为11077.5,其中x1=35,x2=65,其余的解读后面再给出。例3 例3min=4*x11 12*x12 4*x13 11*x14 2*x21 10*x22 3*x23 9*x24 8*x31 5*x32 11*x33 6*x34;x11 x12 x13 x14=16;x21 x22 x23 x24=10;x31 x32 x33 x34=22;x11 x21 x3
9、1=8;x12 x22 x32=14;x13 x23 x33=12;x14 x24 x34=14;global optimal solution found at iteration: 6 objective value: 244.0000 variable value reduced cost x11 4.000000 0.000000 x12 0.000000 2.000000 x13 12.00000 0.000000 x14 0.000000 0.000000 x21 4.000000 0.000000 x22 0.000000 2.000000 x23 0.000000 1.0000
10、00 x24 6.000000 0.000000 x31 0.000000 9.000000 x32 14.00000 0.000000 x33 0.000000 12.00000 x34 8.000000 0.000000四、lingo运算符1、算术运算符 - * / 加 减 乘 除 幂2、逻辑运算符2.1 逻辑值之间的运算符#and# #or# #not# 与 或 非算术运算符是数与数之间的运算,结果也是数。 参与运算的是逻辑值,结果也是逻辑值,逻辑值只有“真”(true=1)和“假”(false=0)两个值。2.2 逻辑表达式的比较符#eq# #ne# #gt# #ge# #lt# #
11、le# 等于 不等于 大于 大于等于 小于 小于等于 这6个操作符实际还是“数与数之间的”比较,而逻辑表达式计算的结果是逻辑值。3、关系运算符 (=) =小于(小于等于) 大于(大于等于) 等于这三个符号表示数与数之间的大小关系4、运算符的优先级别 优先级 运算符最高最低#not# -(负号)* / -(减法)#eq# #ne# #gt# #ge# #lt# #le#and# #or# 括号“()”优先,同行从左往右计算顺序。五、函数abs(x): 绝对值函数,返回x的绝对值;cos(x):x的余弦值,x是弧度值;sin(x):x的正弦值,x是弧度值;tan(x):x的正切值,x是弧度值;e
12、xp(x):ex;log(x):ln(x);lgm(x):返回x的伽玛函数的自然对数,当x为整数时,lgm(x)=ln(x-1)!,如果x不是整数采用线性插值的结果;例如:lgm(2.3)0.7lgm(2) 0.3lgm(3)。1、基本函数mod(x,y):模函数,即x除以y的余数,x,y是整数;pow(x,y):xy;sign(x):返回x的符号值,x0,sign(x)=1,x0,sign(x)=-1,x=0,sign(x)=0;smax(list):返回数列list的最大值;smin(list):返回数列list的最小值;sqr(x):x*x;sqrt(x):x的平方根;floor(x):
13、取整(返回x的整数部分);prod(list):返回连乘的积;2、变量定界函数bnd(l,x,u):限制lxu;bin(x):限制x为0或1;gin(x):限制x只能取整数;free(x):取消对x的符号限制,可以取负数,0,正数.六、在lingo中使用集合模型(例4)例4 某部门有三个生产同一产品的工厂(产地),生产的产品运往四个销售点(销地)出售,各个工厂的生产量、各销地的销量(单位:吨)、从各个工厂到各个销售点的单位运价(元/吨)如下表,研究如何调运才能使得总运费最小。产地销地1 2 3 4 产量123销 量 4 12 4 11 162 10 3 9 108 5 11 6 228 14
14、12 14 48分析 一个完整的调运方案,要明确地给出从每个产地运往各个销地的具体运输量(当然是总运输费用越小,方案越好)。符号设置xij:表示从第i产地调运到第j销地的运输量; i=1,2,3;j=1,2,3,4cij:表示从第i产地运往第j销地的单位运价;ai:表示第i产地的产量;i=1,2,3bj:表示第j销地的销售量;j=1,2,3,4调运量表格运价表格总的调运费用为(每条道路运费之和)对每个产地来说,调运量总和不超过该产地的产量对每个销售地来说,调运量总和必须满足销售需求各种调运量非负数学模型 如果此模型扩展到有50个产地和100个销售地的规模,从理解问题的角度看,就是让i=1,2,
15、50;j=1,2,100就行了,但是为了让计算机处理,还是按照前面的一行一个语句逐字逐句地输入,工作量就太大了。lingo就有节约时间的输入方式,且计算机也能理解,那就是集合式输入法。1、集合(下标)部分这一部分定义集合以及属性(这里以例4为例叙述)规范格式sets:chandi/1,2,3/:a;endsets 这样就定义了集合chandi=1,2,3,对应的属性(与这个下标有关的量)a,于是上述语句就定有了a(1),a(2),a(3)这三个变量名(可能是决策变量,也可能是已知量),表示是三个产地的产量。 在计算过程中,只要出现chandi,就表示按顺序取值于1,2,3。 上面的集合定义,如
16、果集合元素比较多,则采用下面的定义方式sets:chandi/1.3/:a;endsets如果是sets:chandi/1.50/:a;endsets那就定义了50个变量名a(1),a(2),a(50)。 而例4中,有三个产地(及其产量),四个销售地(相应的产量),则可以如下定义 这样就定义了chandi这个集合,与这个集合有关的属性a,xiaodi这个集合,与这个集合有关的属性b,直接定义了a(1),a(2),a(3),b(1),b(2),b(3),b(4),这样直接定义的集合称为基本集合。 例4中,还有形如x12,c12这样的变量名如何定义呢?这样的变量既与产地有关,又与销地有关,于是就由
17、chandi这个集合与xiaodi这个集合联合生成一个笛卡尔集,称为派生集合(关联变量的下标范围):sets:chandi/1.3/:a;xiaodi/1.4/:b;link(chandi,xiaodi):x,c;endsets 这样就增加了一个新的集合link,它由chandi和xiaodi两个集合生成,从数学看与之有关的属性为x,c,就定义了如下变量名x(1,1),x(1,2),x(1,3),x(1,4),x(2,1),x(2,2),x(2,3),x(2,4),x(3,1),x(3,2),x(3,3),x(3,4)c(1,1),c(1,2),c(1,3),c(1,4),c(2,1),c(,
18、2,2),c(2,3),c(2,4),c(3,1),c(3,2),c(3,3),c(3,4)2、数据部分这部分格式:data:a=16,10,22;b=8,14,12,14;c=4 12 4 11 2 10 3 9 8 5 11 6;enddata 以”data:”开始,以“enddata”结束。不管变量是行还是列,都采用行写,行元素见可以逗号“,”隔开,也可以空格隔开。而矩阵输入时,先行后列,每行输入完毕,就回车(enter),再输入一行,直到输入完毕,再分号“;”每个变量的数据输入完毕,都用分号“;”结束。3、模型部分 这样部分要把模型的约束和目标函数全部反应出来(仍然以例4为例书写),如
19、下约束即对每个产地i(i=1,2,3)来说,从这里运往各个销地(j=1,j=2,j=3,j=4)的运输量之和:不超过产地i 的产量a(i),即x(i,1) x(i,2) x(i,3) x(i,4)x(i,1) x(i,2) x(i,3) x(i,4)= a(i),i=1,2,3对每个i:for(chandi(i):)对所有销地j求和sum(xiaodi(j):x(i,j)x(i,1) x(i,2) x(i,3) x(i,4)= a(i),i=1,2,3对每个i:for(chandi(i): )对所有销地j求和sum(xiaodi(j):x(i,j)按照这个逻辑,合并为:for(chandi(i
20、): sum(xiaodi(j): x(i,j) = b(j) );目标是将所有线路的运费求和,并使之最小化,即min= sum( link(i,j): c(i,j)*x(i,j);求和对象求和范围求和函数目标标识注意:以上写法中,注意括号匹配,分号结束。注意:以上写法中,注意括号匹配,分号结束。4、初始值部分 在针对线性规划时,这个部分不需要。但是针对非线性规划,这个部分就有必要了,给出决策值的迭代始点,更容易找到局部最优解,同时,给出不同的初始值,可以尝试寻找不同的局部最优解,然后加以比较,找到较好的局部最优解,作为全局最优解使用。例5min=exp(-x1-x2)*(2*x12 3*x2
21、2);init:x1=2;x2=2;endinit例6 将数学模型翻译成lingo模型sets:bianliang/1.4/:x,c;fangcheng/1.3/:b;link(fangcheng,bianliang):a;endsetsdata:c=-3 4 -2 5;b=-2 14 -2;a=4 -1 2 -1 1 1 -1 2 2 -3 -1 1;enddatamin=sum(bianliang(j):c(j)*x(j);for(fangcheng(i)|i#eq#1:sum(link(i,j):a(i,j)*x(j)=b(i);for(fangcheng(i)|i#gt#1:sum(l
22、ink(i,j):a(i,j)*x(j)b(i);free(x(4);生成模型,以检查对错!生成结果: min - 3 x( 1) 4 x( 2) - 2 x( 3) 5 x( 4) subject to 2 4 x( 1) - x( 2) 2 x( 3) - x( 4) = - 2 3 x( 1) x( 2) - x( 3) 2 x( 4) = 14 4 2 x( 1) - 3 x( 2) - x( 3) x( 4) = - 2 end free x( 4)和前面的模型一样! min - 3 x( 1) 4 x( 2) - 2 x( 3) 5 x( 4) su
23、bject to 2 4 x( 1) - x( 2) 2 x( 3) = - 2 3- x( 1) x( 2) x( 3) = 14 4- x( 1) 2 x( 2) 2 x( 3) need(i);ordered(i)need(i);ordered(i)need(i);ordered(i)supply(i);data:cost=file(d:shuju11.ldt);need=file(d:shuju11.ldt);supply=file(d:shuju11.ldt);enddata1122334455模型的集合和数据段共5次使用file函数,分别调用shuju11.ld
24、t中的5个段落的数据。2、通过电子表格传递数据 当所给的参数的数据庞大,再一个个录入lingo编辑窗口的数据段,显得麻烦,就直接在lingo模型的数据段,用命令调入电子表格的数据名称和相关数据就可以了。在前面的例4中,假设数据录入在电子表格中:上面的数据存放在d:shuju22.xls再分别插入名称,操作如下:插入名称定义 也就是在文件shuju22.xls中,把三个数据块分别给定名称:运费数据cc,产量数据aa,销量数据bb。 然后在lingo模型的数据段加以调用就可,调用格式:ole(spreadsheet_file,range_name_list其中,spreadsheet_file是电
25、子表格的名称,应当包括扩展名.xls,还包括完整的路径名,只要不超过64字符数就可。range_name_list是指文件中包括数据单元范围。以上面的例子来说明:sets:chandi/1.3/:a;xiaodi/1.4/:b;yunfei(chandi,xiaodi):c,x;endsetsmin=sum(yunfei(i,j):c(i,j)*x(i,j);for(chandi(i):sum(xiaodi(j):x(i,j)=b(j);data:a=ole(d:shuju22.xls,aa);b=ole(d:shuju22.xls,bb);c=ole(d:shuju22.xls,cc);en
26、ddata运行结果如下: global optimal solution found at iteration: 8 objective value: 244.0000 variable value reduced cost a( 1) 16.00000 0.000000 a( 2) 10.00000 0.000000 a( 3) 22.00000 0.000000 b( 1) 8.000000 0.000000 b( 2) 14.00000 0.000000 b( 3) 12.00000 0.000000 b( 4) 14.00000 0.000000 c( 1, 1) 4.000000 0
27、.000000 c( 1, 2) 12.00000 0.000000 c( 1, 3) 4.000000 0.000000 c( 1, 4) 11.00000 0.000000 c( 2, 1) 2.000000 0.000000 c( 2, 2) 10.00000 0.000000 c( 2, 3) 3.000000 0.000000 在上面的计算例子中,也可以应用ole函数,将lingo计算的结果返回到shuju22.xls中的某个名称(这个名称必须先在shuju22.xls中先命名,格式如下sets:chandi/1.3/:a;xiaodi/1.4/:b;yunfei(chandi,xi
28、aodi):c,x;endsetsmin=sum(yunfei(i,j):c(i,j)*x(i,j);for(chandi(i):sum(xiaodi(j):x(i,j)=b(j);data:a=ole(d:shuju22.xls,aa);b=ole(d:shuju22.xls,bb);c=ole(d:shuju22.xls,cc);ole(d:shuju22.xls,xx)=x;!将计算结果返回数据文件中;enddata在shuju22.xls相应模块就添加了计算结果3、将lingo模型嵌入、链接到电子表格文件中 将刚才的shuju22.xls文件打开,另存为shuju23.xls,在此文件
29、执行”插入|对象”,出现如下对话框:在对话框中选择“lingo document”,然后再“确定”这时在shuju23.xls中出现一个lingo文本框,双击这个文本框,就会发现电子表格的菜单工具栏变成了lingo 有关的应用菜单工具栏。如果你想运行lingo程序,就直接执行”lingo|solver”命令就可以了(注意,要将lingo模型中=ole调用文件改为shuju23.xls,就会发现刚才的xx模块的数据自动修改了。十一、解的读取1、对偶问题例7 产品加工问题的逆问题(对偶问题)例8 在例1中,如果有另一家工厂,想把这家工厂的三种资源收买过来,它至少应付出多大代价,才能使这家工厂放弃生
30、产活动,出让自己的资源。(拓展思考:如果你拥有资源,你会有哪些选择?(1)自己组织生产赚取利润;(2)把资源出租,收取适当租金。 试想一下:如果你长期在(1)和(2)中作决策,那么会发现哪一个方案能赚取更多利润。 首先可以肯定,这家工厂肯定不会把设备和原材料按照进货原价转让给另一家工厂(否则,还不如自己组织生产,获取利润27500元。也就是说,两家工厂彼此都了解这些生产资料的成本,两家工厂最终达成协议,在成本价的基础上,每种生产资料增加租金(转让代价)为y1,y2,y3。及工厂把设备每小时再增加y1元,原料a再增加y2元/kg,原料b再增加y3元/小时。那么y1,y2,y3满足什么条件,工厂才
31、愿意出让资料呢?再来看看表格: 工厂本身可以用1小时设备,2kg原料a,0kg原料b可以生产获利50元,则这些量的资料组合出租,获取的利润也不应低于50元。即y1,y2,y3应该满足不等式同样的道理,1小时设备,1kg原料a,1kg原料b组合出租,获取租金不应低于100元,即并且,y1,y2,y3为追加的租金,应该y1,y2,y3=0。综上所述,出租资料的一方的出租条件为而另外一方,承租方总是不愿意多出钱租金,即双方的意见综合为如下数学模型 可以想象,如果这个问题没有最优解,即不存在买卖双方满意的解,则双方的生产资料的转让就不可能实现。当上述模型有最有解时,不妨设为y1*,y2*,y3*,则双
32、方就会在此价格基础上达成转让协议。 称这个模型为资源转让模型,那么与原来的生产计划模型都是描述相同资源的处理,它们的系数和解之间的关系如下s.t.生产模型i转让模型ii 对比可以发现,模型i的价值系数为模型ii的资源系数;模型i的资源系数为模型ii的价值系数;模型i的系数矩阵与模型ii的系数矩阵互为转置;模型i目标最大化,约束=;且两个模型的决策变量都非负。经济学上称模型i与模型ii互为对偶问题(i为原问题时,ii就是i的对偶问题;ii为原问题时,i就是ii的对偶问题)。它们反应的在拥有生产技术情况下,对同一批资源的不同处理,它们的解之间应该有联系。s.t. global optimal so
33、lution found at iteration: 6 objective value: 27500.00 variable value reduced cost y( 1) 50.00000 0.000000 y( 2) 0.000000 50.00000 y( 3) 50.00000 0.000000 row slack or surplus dual price 1 27500.00 -1.000000 2 0.000000 -50.00000 3 0.000000 -250.0000 global optimal solution found at iteration: 3 obje
34、ctive value: 27500.00 variable value reduced cost x( 1) 50.00000 0.000000 x( 2) 250.0000 0.000000 row slack or surplus dual price 1 27500.00 1.000000 2 0.000000 50.00000 3 50.00000 0.000000 4 0.000000 50.00000转让模型生产模型2、解的解读生产模型i转让模型ii30035025050100surplus=0500slack=00slack or surplus的意义:资源剩余或松弛。由此可见
35、,当剩余或松弛为0时,对应的转让租金就大于0,当剩余或松弛变量大于0时,对应的转让租金就等于0.surplus=0500slack=00slack or surplus的意义:资源剩余或松弛。由此可见,当剩余或松弛为0时,对应的转让租金就大于0,当剩余或松弛变量大于0时,对应的转让租金就等于0. 这与常识相符:在最优生产条件下,当一种资源被用完(剩余或松弛为0),则这种资源对于同类生产来说是稀缺资源,所以在各个工厂之间转让就会增加租金,所以就造成追加租金(对偶问题的决策变量)大于0。两个问题的目标函数的最优值相等,即 这样才不会出现稀缺资源长期被囤积,更不会造成稀缺资源过度用于生产(因为有人囤
36、积待价)。生产模型i转让模型ii30035025050100 对于生产模型i来说,其对偶问题的最优解y1*,y2*,y3*分别称为生产资源b1=300,b2=400,b3=250的影子价格(也称对偶价格dual price),即转让租金;即当生产者想转换经营模式时,考虑把三种资源转让出去时,应在成本基础上追加的租金。由于yi*也表示在最优生产条件下,资源bi每增加一单位,最大利润的增加值,即是一种边际利润。生产模型i转让模型ii30035025050100 对转让模型ii来说,其对偶问题的最优解x1*,x2*也称为转让模型的两种资源c1,c2的影子价格(对偶价格,dual price),其意义
37、如下:当一个经营资源转让的经营者如果想转变经营模式,改为自己组织生产来赚取利润,则他用着三种资源生产产品时,两种产品的每件产品必须提供的利润是x1*和x2*,这样才能保证新的经营模式不比原来的模式少赚取利润。3、reduced cost的意义 观察计算结果,发现只有当 variable的值value=0时,对应的项的reduced cost就大于0.如上所示y(2)=0时,reduced_cost(2)=500。若目函数最小化(min),则当y(2)的价值系数b(2)减少50后,对应的变量y(2)才会大于0;如果目标函数 最大化(max),则当y(2)的价值系数b(2)增加50后,y(2)才会
38、大于0.(如果你学过线性规划的单纯形算法,reduaced cos就相当于每个变量的检验数) global optimal solution found at iteration: 6 objective value: 27500.00 variable value reduced cost y( 1) 50.00000 0.000000 y( 2) 0.000000 50.00000 y( 3) 50.00000 0.000000(可以利用excel中的文档验证!siliao.xls;duiou.xls等)十一、灵敏度分析例9 美佳公司计划制造i、ii两种家电产品,已知各制造一件时分别占用的
39、设备a、设备b、调试工序的时间以及明天可以生产这两种家电的能力、各售出一件获得的利润情况如下表所示,问该公司应制造两种家电各多少件建模以及计算结果见d:meijia.xls文件iii每天可用能力设备a(h)0515设备b(h)6224调试工序(h)115利润(元)21最大利润(元)最优产量(件)3.51.58.5例10 在例9的美佳公司的案例中,(1)若其它因素不变化,家电i的利润在什么范围内变化时,美佳公司的生产计划不发生变化(所谓生产计划不改变,是指产品结构和对应的产量都不改变)?(2)其它因素不改变的情况下,只是调试工序的能力变化,问调试工序的能力在什么范围变化是,产品结构不变?分析 这
40、种问题的分析方法体现在lingo软件的应用是: (1)先计算例9,其结果保留;(2)再调整lingo 属性,如下图: 即打开lingo|options|general solver,同时在dual computatios|prices&range(做价值系数和右端系数的范围分析)操作结果如下: ranges in which the basis is unchanged: objective coefficient ranges current allowable allowable variable coefficient increase decrease x( 1) 2.000000 1
41、.000000 1.000000 x( 2) 1.000000 1.000000 0.3333333 righthand side ranges row current allowable allowable rhs increase decrease 2 15.00000 infinity 7.500000 3 24.00000 6.000000 6.000000 4 5.000000 1.000000 1.000000(1)根据计算,其它因素不变,只是家电i的价值系数c1=2的基础上,增加1和减少1,则最优生产计划不改变,即c1在1,3单独变化时,生产计划不改变。 ranges in wh
42、ich the basis is unchanged: objective coefficient ranges current allowable allowable variable coefficient increase decrease x( 1) 2.000000 1.000000 1.000000 x( 2) 1.000000 1.000000 0.3333333 righthand side ranges row current allowable allowable rhs increase decrease 2 15.00000 infinity 7.500000 3 24
43、.00000 6.000000 6.000000 4 5.000000 1.000000 1.000000(2)根据计算,其它因素不改变,当调试工序的时间单独在4,6变化时,产品结构不改变。例11 (83页,数学模型,姜启源) 一奶制品加工厂用牛奶生产a1,a2两种奶制品,1桶牛奶可以在甲类设备上用12小时加工生成3kga1,或者在乙类设备上用8小时加工成4公斤a2,根据市场需求,生产的a1,a2全部能售出,且每公斤a1获利24元,每公斤a2获利16元。现在加工厂每天能够得到50桶牛奶的供应,每天正式工人总的劳动时间为480小时,并且甲类设备每天之多能够加工100kga1,乙类设备的加工能力没
44、有限制。试为该厂制定一个生产计划,使每天获利最大,并进一步讨论一下三个附属问题:(1)若35元可以买到1桶牛奶,是否做这项投资,若投资,每天最多购买多少桶牛奶?(2)若可以聘用临时工以增加劳动时间,付给临时工工资最多每小时几元?(3)由于市场需求变化,每公斤a1获利增加到30元,是否应该改变生产计划?一桶牛奶甲类设备12小时3kg a124元/kg限制100kg乙类设备无限制8小时4kg a216元/kg480小时限制共50桶变量设置设每天50桶牛奶中,x1桶生产a1,x2桶生产a2,总利润为z;x1x2建立模型目标函数约束条件原料奶牛限制一桶牛奶甲类设备12小时3kg a124元/kg限制1
45、00kg乙类设备无限制8小时4kg a216元/kg480小时限制共50桶x1x2劳动时间限制产品限量非负约束一桶牛奶甲类设备12小时3kg a124元/kg限制100kg乙类设备无限制8小时4kg a216元/kg480小时限制共50桶x1x2数学模型求解max=72*x1 64*x2;x1 x250;12*x1 8*x2480;3*x1100; global optimal solution found at iteration: 4 objective value: 3360.000 variable value reduced cost x1 20.00000 0.000000 x2
46、30.00000 0.000000 row slack or surplus dual price 1 3360.000 1.000000 2 0.000000 48.00000 3 0.000000 2.000000 4 40.00000 0.000000 即安排20桶牛奶生产产品a1,其余30桶生产a2,这天获利3360元。回答问题(1),(2),(3)的额外计算(1)若35元可以买到1桶牛奶,是否做这项投资,若投资,每天最多购买多少桶牛奶?(2)若可以聘用临时工以增加劳动时间,付给临时工工资最多每小时几元?(3)由于市场需求变化,每公斤a1获利增加到30元,是否应该改变生产计划?问题(1
47、),需要知道第一个约束代表的资源(原料奶牛桶数)约束的对偶价格,对比才能回答;问题(2)需要知道第二个约束(时间资源)的对偶价格,才能回答;问题(3)是依据最优解不改变时,产品a1的价格单独变化的范围来回答。关于价值系数price和资源范围range范围的分析计算: ranges in which the basis is unchanged: objective coefficient ranges current allowable allowable variable coefficient increase decrease x1 72.00000 24.00000 8.000000
48、x2 64.00000 8.000000 16.00000 righthand side ranges row current allowable allowable rhs increase decrease 2 50.00000 10.00000 6.666667 3 480.0000 53.33333 80.00000 4 100.0000 infinity 40.00000回答问题(1) 根据前面的计算,牛奶资源的对偶价格为48元/桶,即牛奶在当前50桶的基础上,再增加一桶,带来的利润为48元;如果市面上有35元/桶的奶牛,当然应该投资。回答问题(2) 根据前面的计算,劳动时间的影子价
49、格为2元/小时,即劳动时间在当前480小时的基础上,再增加1小时,带来的利润为2元。因此,如果雇佣临时工,付给的工资最多2元/小时。回答问题(3) 根据灵敏度分析的计算,x1的价值系数在72基础上,若要保持最优解不变,最多增加24,最多减少8。即当x1的价值系数在64,96上变化时,生产计划不变。当每公斤a1的价格增加到30元/kg时,那么每桶牛奶x1获得的价值为90元/桶,没有超过上述变化范围,故生场计划部变化。例12 (88页,数学模型,姜启源)一桶牛奶甲类设备12小时3kg a124元/kg限制100kg乙类设备无限制8小时4kg a216元/kg480小时限制共50桶x1x22小时3元
50、2.4kg b12小时3元3kg b244元/kg32元/kg制定一个生产计划,并回答如下问题:(1)若投资30元可以增加1桶奶牛,投资3元可以增加1小时劳动时间,应否作这些投资?若每天投资150元,可赚回多少?(2)每公斤高级奶制品b1,b2的获利经常有10%的波动,对制订的生产计划有无影响?若每公斤b1的利润下降10%,计划应该改变吗?一桶牛奶甲类设备12小时3kg a124元/kg限制100kg乙类设备无限制8小时4kg a216元/kg480小时限制共50桶x1x22小时3元2.4kg b12小时3元3kg b244元/kg32元/kg变量设置y11 为产品a1(直接销售)的产量(kg
51、);y12 为产品b1的产量(kg);y21 为产品a2(直接销售)的产量(kg);y22 为产品b2的产量(kg);y12y11y21y22建立模型一桶牛奶甲类设备12小时3kg a124元/kg限制100kg乙类设备无限制8小时4kg a216元/kg480小时限制共50桶x1x22小时3元2.4kg b12小时3元3kg b244元/kg32元/kgy12y11y21y22目标函数原料约束:一桶牛奶甲类设备12小时3kg a124元/kg限制100kg乙类设备无限制8小时4kg a216元/kg480小时限制共50桶x1x22小时3元2.4kg b12小时3元3kg b244元/kg32
52、元/kgy12y11y21y22生产时间约束:非负约束:max=24*y11 44*y12 16*y21 32*y22-3*10/8*y12-3*4/3*y22;x1 x250;3*x1100;3*x1-y11-10/8*y12=0;4*x2-y21-4/3*y22=0;12*x1 8*x2 2*10/8*y12 2*4/3*y22480;计算结果为 global optimal solution found at iteration: 8 objective value: 3460.800 variable value reduced cost y11 0.000000 1.680000 y
53、12 19.20000 0.000000 y21 168.0000 0.000000 y22 0.000000 2.026667 x1 8.000000 0.000000 x2 42.00000 0.000000 row slack or surplus dual price 2 0.000000 37.92000 3 76.00000 0.000000 4 0.000000 -25.68000 5 0.000000 -16.00000 6 0.000000 3.260000灵敏度和范围分析结果 objective coefficient ranges current allowable al
54、lowable variable coefficient increase decrease y11 24.00000 1.680000 infinity y12 40.25000 19.75000 3.166667 y21 16.00000 8.150000 2.100000 y22 28.00000 2.026667 infinity x1 0.0 8.400000 7.600000 x2 0.0 7.600000 8.400000 righthand side ranges row current allowable allowable rhs increase decrease 2 5
55、0.00000 10.00000 23.33333 3 100.0000 infinity 76.00000 4 0.0 60.00000 40.00000 5 0.0 168.0000 infinity 6 480.0000 253.3333 80.00000 最优生产计划:50桶牛奶中8桶加工为产品a1,产品a1全部深加工为产品b1,得到19.2kgb1;42桶牛奶加工为产品a2,且不用深加工,直接销售a2.问题(1)的回答: 根据第一次计算的结果知,关于原料牛奶的对偶价格为37.92元/桶,关于劳动时间的对偶价格为3.26元/小时。如果市面有30元/桶的牛奶,可以购买;且如果有劳动力3元
56、/小时,也可以增加雇佣劳动时间。150元可以购买5桶原料牛奶,可以获利37.92x5=189.6元。根据右端系数的范围分析可知,保持最优基不变化的50-23.3333,50 10=26.6667,60,即在现有50桶牛奶的基础上,最多可以购买10桶。而根据前面的范围分析,最优解不变的b1和b2的价值系数变化范围分别为问题(2)的回答: 深加工产品b1和b2的当前价值系数为40.25和28,分别波动10%,即增减4.025和2.8,即b1的价值系数变化范围为 36225,44.275,或b2的价值系数变化范围为25.2,30.8,40.25-3.16667,40.25 19.75(-,28 2.
57、0267 由此可见,产品b1和b2的价值系数有10%的波动,则已经超出最优解规定的范围,即一定引起最优解改变,此时吧改变后的价值系数代入模型,从新计算即可。例13 (130页,习题1) 某银行经理计划用一笔资金进行有价证券的投资,可供购进的证券及其信用等级、收益、到期年限如下表所示。按规定,市证券收益可以免税,其他证券的收益需按照50%的税率纳税。此外还有以下限制:(1)政府及代办机构的证券总共至少要购进400万元;(2)所购证券的平均信用等级不超过1.4;(3)所购证券的平均到期年限不超过5年。回答下列问题:1 若该经理有1000万元资金,如何投资?2 如果能够以2.75%的利润接到不超过1
58、00万资金,该经理如何操作?3 在1000万元资金情况下,若证券a的税前收益增加4.5%,投资是否改变?若c的税前收益减少4.5%,投资是否改变?证券名称 证券种类 信用等级 到期年限 到期税前收益% a 市政 2 9 4.3 b 代办机构 2 15 5.4 c 政府 1 4 5.0 d 政府 1 3 4.4 e 市政 5 2 4.5变量设置 设各种证券的投资额为x1,x2,x3,x4,x5(万元);z为总收益。建立模型目标函数投资金额约束投资要求约束信用要求年限要求需要线性化需要线性化变量非负约束数学模型归纳为s.t. max .043 x1 .027 x2 .025 x3 .0
59、22 x4 .045 x5 subject to 2 x1 x2 x3 x4 x5 = 400 4 .6 x1 .6 x2 - .4 x3 - .4 x4 3.6 x5 = 0 5 4 x1 10 x2 - x3 - 2 x4 - 3 x5 = 0 endmax=0.043*x1 0.5*(0.054*x2 0.05*x3 0.044*x4) 0.045*x5;x1 x2 x3 x4 x5400;0.6*x1 0.6*x2-0.4*x3-0.4*x4 3.6*x50;4*x1 10*x2-x3-2*x4-3*x50;p=0.0275;计算结果: g global
60、 optimal solution found at iteration: 4 objective value: 29.83636 variable value reduced cost x1 218.1818 0.000000 x2 0.000000 0.3018182e-01 x3 736.3636 0.000000 x4 0.000000 0.6363636e-03 x5 45.45455 0.000000 p 0.2750000e-01 0.000000 row slack or surplus dual price 1 29.83636 1.000000 2 0.000000 0.2
61、983636e-01 3 336.3636 0.000000 4 0.000000 0.6181818e-02 5 0.000000 0.2363636e-02 6 0.000000 0.000000lobal objective coefficient ranges current allowable allowable variable coefficient increase decrease x1 0.4300000e-01 0.3500000e-02 0.1300000e-01 x2 0.2700000e-01 0.3018182e-01 infinity x3 0.2500000e
62、-01 0.1733333e-01 0.5600000e-03 x4 0.2200000e-01 0.6363636e-03 infinity x5 0.4500000e-01 0.5200000e-01 0.1400000e-01 righthand side ranges row current allowable allowable rhs increase decrease 2 1000.000 infinity 456.7901 3 400.0000 336.3636 infinity 4 0.0 1057.143 200.0000 5 0.0 1000.000 1200.000 即
63、证券a投资218.18万元,证券c投资736.36万元,证券e投资45.46万元。到第十五年末可以获得净收益为29.83636万元。回答问题1回答问题2 根据上面的计算,第一个约束方程(资金总额约束)的对偶价格为0.0298 ,即再单独增加1万元的投资,可以带来0.0298万元的收益,而借贷利息才0.0275,低于对偶价格。因此经理可以办理此借贷。而又根据右端变量的范围分析,投资总额的范围在1000万的基础上,可以无限增加,即完全可以把100万元的贷款再用于投资。回答问题3 根据价值系数的范围分析可知,保持最优解不变化的证券a的变化范围为(-,0.0465,当a的税前收益增加到4.5%时,最优
64、解不变化。 证券c的变化范围是0.0245,0.042,如果证券c的税前收益减少到4.8%,再扣除税收,即减少到2.4%,这个值超出了上述范围,投资计划将改变。问题修正:如果现在有1000万元现金,为了实现在第十五年末获得的收益最大,应该如何投资?补充知识:若银行的年利率为p,(1)现在有a这么多资金,到n年后的资金有多少?(2)若想n年后有资金a这么多,则现在应该存入多少到银行里? 将a资金存入银行,第二年年初资金为a(1 p);第三年年初资金为a(1 p)2;第n年年初a(1 p)n-1,第n年年末资金为a(1 p)n。即将现值a的资金存入银行,第n年末资金值为an=a(1 p)n;如果第n年年末的值为a,则现在需要存入银行的资金为b,则a=b(1 p)nb=a(1 p)-n,n=1,2,上面的目标函数是不同年份的资金,不能直接相加,需要换算到同一年才能相加,可以向前算,也可以向后算,则目标函数(p=0.0275)费用都转化为将来值(以证券b的年限为参考)