经济管理中的优化问题_含LINGO或MATLAB程序_摘自《数学建模算法与程序》(司守奎2007)
Lingo_生产与服务运作管理中的优化问题

Lingo_生产与服务运作管理中的优化问题2006年8月com精确定位问题例57 飞机在飞行过程中能够收到地面上各个监控台发来的关于飞机当前位置的信息根据这些信息可以比较精确地确定飞机的位置如图所示VOR是高频多向导航设备的英文缩写它能够得到飞机与该设备连线的角度信息DME是距离测量装置的英文缩写它能够得到飞机与该设备的距离信息图中飞机接收到来自3个VOR给出的角度和1个DME给出的距离括号内是测量误差限并已知这4种设备的xy坐标假设飞机和这些设备在同一平面上如何根据这些信息精确地确定当前飞机的位置 0 y x VOR2 x 629 y 375 30900 130 8643 20 飞机 x y VOR1 x 764 y 1393 16120 080 VOR3 x 1571 y 259 4510 060 北 DME x 155 y 987 图飞机与监控台问题分析记4种设备VOR1VOR2VOR3DME的坐标为 xi yi 以km为单位 i 1 2 3 4VOR1VOR2VOR3测量得到的角度为i 从图中可以看出按照航空飞行管理的惯例该角度是从北开始沿顺时针方向的角度取值在003600之间角度的误差限为ii 1 2 3DME测量得到的距离为d4 km 距离的误差限为4设飞机当前位置的坐标为 x y 则问题就是由下表的已知数据计算 x y 20 km 8643 km 987 155 DME 130 00227弧度 30900 539307弧度 259 1571 VOR3 060 00105弧度 4510 078714弧度 375 629 VOR2 080 00140弧度 16120 281347弧度 1393 746 VOR1 i 原始的i 或d4 yi xi 模型1及求解图中角度i是点 xi yi 和点 x y 的连线与y 轴的夹角以y 轴正向为基准顺时针方向夹角为正而不考虑逆时针方向的夹角于是角度i的正切 i 1 2 3 对DME测量得到的距离显然有直接利用上面得到的4个等式确定飞机的坐标x y这时是一个求解超定非线性方程组的问题在最小二乘准则下使计算值与测量值的误差平方和最小越接近0越好这是一个非线性无约束最小二乘拟合问题则需要求解 MODEL SETS VOR13 x y cita sigma ENDSETS DATA x y citasigma 746 1393 281347 00140 629 375 078714 001051571 259 539307 00227 x4 y4 d4 sigma4 155 9878643 20 ENDDATA XXYY表示飞机坐标 min sum VOR sqrxx-x yy-y - tan cita sqr d4 - sqrt sqr xx-x4 sqryy-y4 END 很容易写出其LINGO程序如下求解该模型得到的解为只列出部分结果Local optimal solution found Objective value 1280226 Variable Value Reduced Cost XX 2434204 01315903E-08 YY 1263734 0000000 显然这个解的目标函数值很大 1280226 因此我们怀疑是一个局部最小点用LINGOOPTIONS菜单命令启动Global Solver选项卡上的Use GlobalSolver选项然后求解可以得到全局最优解如下 Global optimalsolution found Objective value07050440E-03 Variable Value Reduced Cost XX 9806926 0000000 YY 7315666 0000000 这个解的目标函数值很小 0000705 飞机坐标为98069267315666 可以将非线性的优化目标改写为如下线性优化目标 Min T st T x13 t13 T x23 t23 T x33 t33 T x43 t43 Min T st xij tij xi j1 i1 2 3 4j 1 2 xij tij–xkjTyik i k1 2 3 4 j 1 2 3 i k xkj tkj–xijT 1–yik i k1 2 3 4 j 1 2 3 i k xi3 ti3T i1 2 3 4 这个问题的0-1非线性规划模型当然所有变量还有非负约束变量yik还有0-1约束 Model min T T x13 t13T x23 t23 T x33 t33 T x43 t43 x11 t11 x12 x12 t12x13 x21 t21 x22 x22 t22 x23 x31 t31 x32 x32 t32 x33x41 t41 x42 x42 t42 x43 求解模型这个模型可以如下输入LINGO x11 t11 - x21 Ty12 x21 t21 - x11 T 1-y12 x12t12 - x22 Ty12 x22 t22 - x12 T 1-y12 x13 t13 - x23 Ty12x23 t23 - x13 T 1-y12 x11 t11 - x31 Ty13 x31 t31 - x11 T1-y13 x12 t12 - x32 Ty12 x32 t32 - x12 T 1-y13 x13 t13- x33 Ty13 x33 t33 - x13 T 1-y13 x11 t11 - x41 Ty14 x41 t41 - x11 T 1-y14 x12 t12 - x42 Ty14 x42 t42 - x12T 1-y14 x13 t13 - x43 Ty14 x43 t43 - x13 T 1-y14 x21 t21- x31 Ty23 x31 t31 - x21 T 1-y23 x22 t22 - x32 Ty23 x32t32 - x32 T 1-y23 x23 t23 - x33 Ty23 x33 t33 - x23 T1-y23 x21 t21 - x41 Ty24 x41 t41 - x21 T 1-y24 x22 t22- x42 Ty24 x42 t42 - x22 T 1-y24 x23 t23 - x43 Ty24 x43t43 - x23 T 1-y24 x31 t31 - x41 Ty34 x41 t41 - x31 T1-y34 x32 t32 - x42 Ty34 x42 t42 - x32 T 1-y34 x33 t33- x43 Ty34 x43 t43 - x33 T 1-y34 t11 13 t12 15 t13 20 t2110 t22 20 t23 18 t31 20 t32 16 t33 10 t41 8 t42 10 t43 15 biny12 bin y13 bin y14 bin y23 bin y24 bin y34 End 用LINGO求解得到 Local optimal solution found at iteration 4357Objective value 8400000 Variable Value Reduced Cost T 8400000 0000000 X13 3600000 0000000 T13 2000000 0000000 X23 5600000 0000000 T23 1800000 0000000 X33 7400000 0000000 T33 1000000 0000000 X43 2100000 0000000 T43 1500000 0000000 X11 8000000 0000000 T11 1300000 0000000 X12 2100000 0000000 T12 1500000 0000000 Variable ValueReduced Cost X21 2100000 0000000T21 1000000 0000000 X22 3600000 0000000 T22 2000000 0000000 X31 3750000 0000000 T31 2000000 0000000 X32 5775000 0000000 T32 1600000 0000000 X41 0000000 09999970 T41 8000000 0000000 X42 1100000 0000000 T42 1000000 0000000 Y12 0000000-8399950 Y13 0000000 0000000Y14 1000000 8399950 Y23 0000000 -8399950 Y24 1000000 0000000 Y34 1000000 0000000 即所有面试完成至少需要84分钟面试顺序为4-1-2-3 即丁-甲-乙-丙早上800面试开始最早924面试可以全部结束同样如果利用LINGO的建模语言可以编写一个更一般的LINGO模型先准备一个数据文件文本文件exam0505txt 其中的内容如下被面试者集合 1 2 34 面试阶段的集合 1 2 3 已知的面试所需要的时间 13 15 2010 20 18 20 16 10 8 10 15 数据结束 LINGO模型如下 Model Title 面试问题 SETS Person 被面试者集合Stage面试阶段的集合 PersonFILE exam0505txt StageFILE exam0505txtT 已知的面试所需要的时间X 面试开始时间 PXS PersonStageT X Y ik 1 k排在i前0否则 PXP PersonPerson 1 LT 2 Y ENDSETS DATA T FILE exam0505txt ENDDATA [obj] min T T是面试的最后结束时间 T PXS ij jEQsize stage x ij t ij 只有参加完前一个阶段的面试后才能进入下一个阶段 for PXS ij jLTsize stage [ORDER]x ij t ij x ij1 同一时间只能面试1名同学 for Stage j for PXP ik [SORT1]x i j t i j -x kj TY ik for PXP ik [SORT2]x kj t kj -x i j T 1-Y ik for PXP bin y End 求解这个模型得到的结果与前面的完全相同可以很清楚地看到使用LINGO建模语言的集合和属性概念得到的模型具有非常好的结构性反映了相应的优化模型的本质目标决策变量约束一清二楚容易阅读和理解而且还可以让数据与程序完全分离这种优越性是LINDO软件无法与之相比的消防车调度问题例56 某市消防中心同时接到了三处火警报告根据当前的火势三处火警地点分别需要2辆2辆和3辆消防车前往灭火三处火警地点的损失将依赖于消防车到达的及时程度记tij为第j辆消防车到达火警地点i的时间分钟则三处火警地点的损失分别为6t114t127t213t229t318t325t33 目前可供消防中心调度的消防车正好有7辆分别属于三个消防站可用消防车数量分别为3辆2辆2辆消防车从三个消防站到三个火警地点所需要的时间如表5-6所示该公司应如何调度消防车才能使总损失最小如果三处火警地点的损失分别为 4t116t123t217t225t318t329t33 调度方案是否需要改变消防站到三个火警地点所需要的时间 10 9 6 消防站3 11 8 5 消防站2 9 7 6 消防站1 火警地点3 火警地点2 火警地点1 时间分钟问题分析本题考虑的是为每个火警地点分配消防车的问题初步看来与线性规划中经典的运输问题有些类似本题的问题可以看成是指派问题和运输问题的一种变形我们下面首先把它变成一个运输问题建模求解决策变量为了用运输问题建模求解很自然地把3个消防站看成供应点如果直接把3个火警地点看成需求点我们却不能很方便地描述消防车到达的先后次序因此难以确定损失的大小下面我们把7辆车的需求分别看成7个需求点分别对应于到达时间t11 t12 t21 t22 t31 t32 t33 用xi j表示消防站i是否向第j个需求点派车 1表示派车0表示不派车则共有21个0-1变量决策目标题目中给出的损失函数都是消防车到达时间的线性函数所以由所给数据进行简单的计算可知如果消防站1向第6个需求点派车即消防站1向火警地点3派车但该消防车是到达火警地点3的第二辆车则由此引起的损失为89 72同理计算可以得到损失矩阵元素分别记为ci j 50 80 90 27 63 24 36 消防站i 3 55 88 99 24 56 20 30 消防站i 2 45 72 81 21 49 24 36 消防站i 1 j 7 j 6 j 5 j 4 j 3 j 2 j 1 火警地点3 火警地点2 火警地点1 ci j 于是使总损失最小的决策目标为约束条件约束条件有两类一类是消防站拥有的消防车的数量限制另一类是各需求点对消防车的需求量限制消防站拥有的消防车的数量限制可以表示为x11x12x13x14x15x16x17 3 x21x22x23x24x25x26x27 2x31x32x33x34x35x36x37 2 各需求点对消防车的需求量限制可以表示为模型求解将如上构成的线性规划模型输入LINDO 消防车问题Min36x1124x1249x1321x1481x1572x1645x1730x2120x2256x2324x2499x2588x2655x2736x3124x3263x3327x3490x3580x3650x37 SUBJECT TOx11x12x13x14x15x16x17 3 x21x22x23x24x25x26x27 2 x31x32x33x34x35x36x37 2 x11x21x31 1 x12x22x32 1 x13x23x33 1 x14x24x34 1 x15x25x35 1x16x26x36 1 x17x27x37 1 END求解得到如下结果 OBJECTIVE FUNCTION VALUE 1 3290000VARIABLE VALUE REDUCED COST X11 0000000 10000000 X12 0000000 8000000 X13 1000000 0000000X14 0000000 2000000 X15 1000000 0000000 X16 1000000 0000000 X17 0000000 3000000X21 1000000 0000000 X22 1000000 0000000 X23 0000000 3000000 X24 0000000 1000000X25 0000000 14000000 X26 0000000 12000000 X27 0000000 9000000 VARIABLE VALUE REDUCED COSTX31 0000000 2000000 X32 0000000 0000000 X33 0000000 6000000 X34 1000000 0000000X35 0000000 1000000 X36 0000000 0000000 X37 1000000 0000000 也就是说消防站1应向火警地点2派1辆车向火警地点3派2辆车消防站2应向火警地点1派2辆车消防站3应向火警地点23各派1辆车最小总损失为329 讨论 1 这个问题本质上仍然和经典的运输问题类似可以把每辆车到达火场看作需求点消防站可作供应点在上面模型中我们虽然假设xij为0-1变量但求解时是采用线性规划求解的也就是说没有加上xij为0-1变量或整数变量的限制条件但求解得到的结果中xij正好是0-1变量这一结果不是偶然的而是运输问题特有的一种性质 2 在上面模型中我们没有考虑消防车到达各火警地点的先后次序约束但得到的结果正好满足所有的先后次序约束这一结果却并不总是必然的而只是巧合如对例题后半部分的情形结果就不是这样了显然此时只需要修改损失矩阵元素仍然分别记为cij 90 80 50 63 27 36 24消防站i 3 99 88 55 56 24 30 20 消防站i 2 81 72 45 49 21 36 24消防站i 1 j 7 j 6 j 5 j 4 j 3 j 2 j 1 火警地点3 火警地点2 火警地点1 ci j 此时将重新构成的线性规划模型输入LINDO求解可以得到新的最优解 x14 x16 x17 x21 x22 x33 x35 1 其他变量为0 最小总损失仍为329 实际上损失矩阵中只是12列交换了位置34列交换了位置57列交换了位置因此不用重新求解就可以直接看出以上新的最优解但是以上新的最优解却是不符合实际情况的例如x14 x33 1表明火警地点2的第一辆消防车来自消防站3第二辆消防车来自消防站1但这是不合理的因为火警地点2与消防站3有9分钟的距离大于与消防站1的7分钟的距离分配给火警地点3的消防车也有类似的不合理问题为了解决这一问题我们必须考虑消防车到达各火警地点的先后次序约束也就是说必须在简单的运输问题模型中增加一些新的约束以保证以上的不合理问题不再出现首先考虑火警地点2由于消防站1的消防车到达所需时间 7分钟小于消防站2的消防车到达所需时间 8分钟并都小于消防站3的消防车到达所需时间 9分钟因此火警地点2的第2辆消防车如果来自消防站1则火警地点2的第1辆消防车也一定来自消防站1火警地点2的第2辆消防车如果来自消防站2则火警地点2的第1辆消防车一定来自消防站1或2因此必须增加以下约束 x14x13x24x13 x23 x16 x15 x17 x16 x36 x15x35 2x37 x15x16x35x36 同理对火警地点1必须增加以下约束 x22x21 对火警地点3必须增加以下约束此时将重新构成的线性规划模型输入LINDO软件如下消防车调度 Min 36x1224x1149x1421x1381x1772x1645x15 30x2220x2156x2424x2399x2788x2655x2536x3224x3163x3427x3390x3780x3650x35 SUBJECT TOx11x12x13x14x15x16x17 3 x21x22x23x24x25x26x27 2 x31x32x33x34x35x36x37 2 x11x21x31 1 x12x22x32 1 x13x23x33 1 x14x24x34 1 x15x25x35 1 x16x26x36 1 x17x27x37 1 X22 - X21 0 X14 - X13 0 X24 - X23 - X13 0X16 - X15 0 X17 - X16 0 X36 - X15 - X35 0 2X37 -X15 -X16-X35 -X36 0 END INT 21 求解可以得到新的解为 OBJECTIVEFUNCTION VALUE 1 326667 VARIABLE VALUE REDUCEDCOST X12 0000000 9333333X11 0000000 7333333 X14 1000000 0000000 X13 1000000 0000000 X17 0333333 0000000X16 0333333 0000000 X15 0333333 0000000 X22 1000000 0000000 X21 1000000 0000000X24 0000000 2333333 X23 0000000 1000000 VARIABLE VALUE REDUCED COST X27 0000000 13000000X26 0000000 12000000 X250000000 9000000 X32 0000000 2000000 X31 0000000 0000000X34 0000000 5333333 X33 0000000 0000000 X37 0666667 0000000 X36 0666667 0000000X35 0666667 0000000 但是我们发现此时的解中xij并不都是0–1变量或整数变量因此还是不符合题意这是因为此时的模型已经不再是标准的运输模型所以得到的解不一定自然地为正数解的缘故所以我们还必须显式地加上xij为0–1变量的约束加上xij为0-1变量的约束后求解可以得到x13 x14 x15 x21 x22 x36 x37 1 其他变量为0 最小总损失仍为335也就是说消防站1应向火警地点2派2辆车向火警地点3派1辆车消防站2应向火警地点1派2辆车消防站3应向火警地点3派2辆车经过检验可以发现此时的派车方案是合理的 55 飞机定位和飞行计划问题即按照模式2切割15根原料钢管按模式5切割5根按模式7切割5根共27根可算出总余料量为35米与上面得到的结果相比总余料量增加了8米但是所用的原料钢管的总根数减少了2根在余料没有什么用途的情况下通常选择总根数最少为目标问题2的求解问题分析按照解问题1的思路可以通过枚举法首先确定哪些切割模式是可行的但由于需求的钢管规格增加到4种所以枚举法的工作量较大下面介绍的整数非线性规划模型可以同时确定切割模式和切割计划是带有普遍性的方法同1类似一个合理的切割模式的余料不应该大于或等于客户需要的钢管的最小尺寸本题中为4米切割计划中只使用合理的切割模式而由于本题中参数都是整数所以合理的切割模式的余量不能大于3米此外这里我们仅选择总根数最少为目标进行求解模型建立决策变量由于不同切割模式不能超过3种可以用xi 表示按照第i种模式i 1 2 3切割的原料钢管的根数显然它们应当是非负整数设所使用的第i种切割模式下每根原料钢管生产4米长5米长6米长和8米长的钢管数量分别为r1i r2i r3i r4i非负整数决策目标以切割原料钢管的总根数最少为目标即目标为 37 约束条件为满足客户的需求应有 38 39 40 41 每一种切割模式必须可行合理所以每根原料钢管的成品量不能超过19米也不能少于16米余量不能大于3米于是 42 43 44 模型求解3744构成这个问题的优化模型由于在3841式中出现了决策变量的乘积所以这是一个整数非线性规划模型虽然用LINGO软件可以直接求解但我们发现在较低版本的LINGO软件中需要运行很长时间也难以得到最优解为了减少运行时间可以增加一些显然的约束条件从而缩小可行解的搜索范围例如由于3种切割模式的排列顺序是无关紧要的所以不妨增加以下约束 45 又例如我们注意到所需原料钢管的总根数有着明显的上界和下界首先无论如何原料钢管的总根数不可能少于根其次考虑一种非常特殊的生产计划第一种切割模式下只生产4米钢管一根原料钢管切割成4根4米钢管为满足50根4米钢管的需求需要13根原料钢管第二种切割模式下只生产5米6米钢管一根原料钢管切割成1根5米钢管和2根6米钢管为满足10根5米和20根6米钢管的需求需要10根原料钢管第三种切割模式下只生产8米钢管一根原料钢管切割成2根8米钢管为满足15根8米钢管的需求需要8根原料钢管于是满足要求的这种生产计划共需1310831根原料钢管这就得到了最优解的一个上界所以可增加以下约束46 将3746构成的模型输入LINGO如下将3746构成的模型输入LINGO如下 model Title 钢管下料 - 最小化钢管根数的LINGO模型min x1x2x3 x1r11x2r12x3r13 50 x1r21x2r22x3r23 10x1r31x2r32x3r33 20 x1r41x2r42x3r43 15 4r115r216r318r4119 4r125r226r328r42 19 4r135r236r338r43 194r115r216r318r41 16 4r125r226r328r42 16 4r135r236r338r4316 x1x2x3 26 x1x2x3 31 x1 x2 x2 x3 gin x1 gin x2 ginx3 gin r11 gin r12 gin r13 gin r21 gin r22 gin r23 gin r31gin r32 gin r33 gin r41 gin r42 gin r43 end 经过LINGO求解得到输出如下Local optimal solution found Objective value 2800000 Extended solversteps 72 Total solver iterations 3404Model Title 钢管下料-最小化钢管根数的LINGO模型 VariableValue Reduced Cost X1 1000000 1000000 X2 1000000 1000000 X3 8000000 1000000 R11 2000000 0000000 R12 3000000 0000000 R13 0000000 0000000 R21 10000000000000 R22 0000000 0000000 R23 0000000 0000000 R31 1000000 0000000 R32 1000000 0000000 R33 0000000 0000000 R41 0000000 0000000 R42 0000000 0000000 R43 2000000 0000000 即按照模式123分别切割10108根原料钢管使用原料钢管总根数为28根第一种切割模式下一根原料钢管切割成3根4米钢管和1根6米钢管第二种切割模式下一根原料钢管切割成2根4米钢管1根5米钢管和1根6米钢管第三种切割模式下一根原料钢管切割成2根8米钢管如果充分利用LINGO建模语言的能力使用集合和属性的概念可以编写以下LINGO程序这种方法更具有一般的通用性并有利于输入更大规模的下料问题的优化模型 model Title 钢管下料 - 最小化钢管根数的LINGO模型 SETSNEEDS14LENGTHNUM 定义基本集合NEEDS及其属性LENGTHNUMCUTS13X 定义基本集合CUTS及其属性X PATTERNS NEEDSCUTS R 定义派生集合PATTERNS这是一个稠密集合及其属性R ENDSETS DATA LENGTH 4 5 6 8 NUM 50 10 20 15 CAPACITY 19 ENDDATA min SUM CUTS I X I 目标函数FOR NEEDS I SUM CUTS J X J R IJ NUM I 满足需求约束 FOR CUTS J SUM NEEDS I LENGTH I R IJ CAPACITY 合理切割模式约束FOR CUTS J SUM NEEDS I LENGTH I R IJ CAPACITY -MIN NEEDS I LENGTH I 合理切割模式约束 SUM CUTS I X I 26 SUM CUTS I X I 31 人为增加约束 FOR CUTS I ILTSIZE CUTS X I X I1 人为增加约束 FOR CUTS J GIN X J FOR PATTERNS IJ GIN R IJ end 求解这个模型得到的结果与前面的结果完全相同§com下料问题例54 某公司采用一套冲压设备生产一种罐装饮料的易拉罐这种易拉罐是用镀锡板冲压制成的参见图5-3易拉罐为圆柱形包括罐身上盖和下底罐身高10厘米上盖和下底的直径均为5厘米该公司使用两种不同规格的镀锡板原料规格1的镀锡板为正方形边长24厘米规格2的镀锡板为长方形长宽分别为32和28厘米由于生产设备和生产工艺的限制对于规格1的镀镀锡板原料只可以按照图2中的模式12或3进行冲压对于规格2的镀锡板原料只能按照模式4进行冲压使用模式1234进行每次冲压所需要的时间分别为15213秒模式1 模式2 模式3 模式4 上盖下底罐身图5-3 易拉罐下料模式该工厂每周工作40小时每周可供使用的规格12的镀锡板原料分别为5万张和2万张目前每只易拉罐的利润为010元原料余料损失为0001元厘米2如果周末有罐身上盖或下底不能配套组装成易拉罐出售也看作是原料余料损失工厂应如何安排每周的生产已知上盖和下底的直径d 5厘米可得其面积为 196厘米2 表5-4 4种冲压模式的特征 3 1695 5 4 模式4 1 2618 16 0 模式3 2 1833 4 2 模式2 15 2226 10 1 模式1 冲压时间秒余料损失厘米2 底盖个数罐身个数问题的目标显然应是易拉罐的利润扣除原料余料损失后的净利润最大约束条件除每周工作时间和原料数量外还要考虑罐身和底盖的配套组装模型建立决策变量用xi 表示按照第i种模式的冲压次数i 1 2 3 4y1表示一周生产的易拉罐个数为计算不能配套组装的罐身和底盖造成的原料损失用y2表示不配套的罐身个数y3表示不配套的底盖个数虽然实际上xi和y1y2y3应该是整数但是由于生产量相当大可以把它们看成是实数从而用线性规划模型处理决策目标假设每周生产的易拉罐能够全部售出公司每周的销售利润是01y1原料余料损失包括两部分4种冲压模式下的余料损失和不配套的罐身和底盖造成的原料损失按照前面的计算及表2的结果总损失为00012226x1 1833x2 2618x3 1695x4 1571y2 196y3 于是决策目标为 47 约束条件时间约束每周工作时间不超过40小时 144000秒由表2最后一列得 48 原料约束每周可供使用的规格12的镀锡板原料分别为50000张和20000张即 49 50 配套约束由表2一周生产的罐身个数为x1 2x2 4x4 一周生产的底盖个数为10x14x2 16x3 5x4因为应尽可能将它们配套组装成易拉罐销售所以y1满足 51 这时不配套的罐身个数y2和不配套的底盖个数y3应为52 53 4753就是我们得到的模型其中51是一个非线性关系不易直接处理但是它可以等价为以下两个线性不等式 54 55 模型求解将模型4750和5255直接输入LINDO输入LINGO也可以求解时LINDO发出警告信息程序和警告信息参见图5-4 图中错误编号66的含义参见第4章的错误代码表是模型中数据不平衡所以发出警告信息注意只是警告信息所以仍然可以继续求解求解结果是OBJECTIVE FUNCTION VALUE 1 4298337 VARIABLEVALUE REDUCED COST Y1 160250000000 0000000 X1 0000000 0000050 X2 40125000000 0000000 X3 3750000000 0000000 X4 20000000000 0000000 Y2 0000000 0223331 Y3 0000000 0036484 图5-4 模型中数据不平衡的警告信息这个结果可靠吗由于LINDO警告模型中数据之间的数量级差别太大所以我们可以进行预处理缩小数据之间的差别实际上约束4850中右端项的数值过大与左端的系数相比较LINDO在计算中容易产生比较大的误差所以出现此警告信息为了解决这一问题可以将所有决策变量扩大10000倍相当于xi以万次为单位yi以万件为单位此时目标47可以保持不变记住得到的结果单位为万元就可以了而约束4850改为 56 57 58 将模型47和5258输入LINDO 易拉罐下料均衡数据0100y1 - 02226x1 - 01833x2 -02618x3 - 01695 x4 - 01571y2 - 00196y3 st 15x1 20x210x3 30x4 144 x1 x2 x3 5 x4 2 x1 2x2 4x4 - y1 0 10x1 4x2 16x3 5x4 - 2y1 0x1 2x2 4x4 - y1 - y2 0 10x1 4x2 16x3 5x4 - 2y1 - y30 end 求解得到 OBJECTIVE FUNCTION VALUE 1 04298337VARIABLE VALUE REDUCED COST Y1 16025000 0000000 X1 0000000 0000050 X2 4012500 0000000X3 0375000 0000000 X4 2000000 0000000 Y2 0000000 0223331 Y3 0000000 0036484 即模式1不使用模式2使用40125次模式3使用3750次模式4使用20000次可生产易拉罐160250个罐身和底盖均无剩余净利润为4298元 54面试顺序与消防车调度问题面试顺序问题例55 有4名同学到一家公司参加三个阶段的面试公司要求每个同学都必须首先找公司秘书初试然后到部门主管处复试最后到经理处参加面试并且不允许插队即在任何一个阶段4名同学的顺序是一样的由于4名同学的专业背景不同所以每人在三个阶段的面试时间也不同如表5-5所示单位分钟这4名同学约定他们全部面试完以后一起离开公司假定现在时间是早晨800请问他们最早何时能离开公司表5-5 面试时间要求 15 10 8 同学丁 10 10 20 同学丙 18 20 10 同学乙 20 15 13同学甲经理面试主管复试秘书初试建立模型实际上这个问题就是要安排4名同学的面试顺序使完成全部面试所花费的时间最少记tij为第i名同学参加第j阶段面试需要的时间已知令xij表示第i名同学参加第j阶段面试的开始时刻不妨记早上800面试开始为0时刻 i 1 2 3 4j 1 2 3 T为完成全部面试所花费的最少时间优化目标为 a 时间先后次序约束每人只有参加完前一个阶段的面试后才能进入下一个阶段xij tij xij1 i 1 2 3 4j 1 2 b每个阶段j同一时间只能面试1名同学用0-1变量yik表示第k名同学是否排在第i名同学前面 1表示是0表示否则 xij tij–xkjTyik i k 1 2 3 4 j 1 2 3 i k xkj tkj–xijT 1–yik ik 1 2 3 4 j 1 2 3 i k 约束条件假设该工厂每次生产计划的计划期为6周即每次制定未来6周的生产计划只有最终产品A有外部需求目前收到的订单的需求件数按周的分布如表5-1第2行所示部件BC是在该工厂最关键的设备可以称为瓶颈设备上组装出来的瓶颈设备的生产能力非常紧张具体可供能力如表5-1第3行所示第2周设备检修不能使用BC的能力消耗系数分别为5和8即生产1件B需要占用5个单位的能力即生产1件C需要占用8个单位的能力对于每种零部件或产品如果工厂在某一周订购或者生产该零部件或产品工厂需要付出一个与订购或生产数量无关的固定成本称为生产准备费用如果某一周结束时该零部件或产品有库存存在则工厂必须付出一定的库存费用与库存数量成正比这些数据在表5-1第56行给出按照工厂的信誉要求目前接收的所有订单到期必须全部交货不能有缺货发生此外不妨简单地假设目前该企业没有任何零部件或产品库存也不希望第6周结束后留下没有任何零部件或产品库存最后假设不考虑生产提前期即假设当周采购的零件马上就可用于组装组装出来的部件也可以马上用于当周组装成品A 在上述假设和所给数据下如何制定未来6周的生产计划§com 建立模型问题分析这个例子考虑的是在有限的计划期内给定产品结构生产能力和相关费用及零部件或成品以下统称为生产项目在离散的时间段上这里是周也可以是天月等的外部需求之后确定每一生产项目在每一时间段上的生产量即批量使总费用最小由于每一生产项目在每一时间段上生产时必须经过生产准备 Setup 所以通常的讨论中总费用至少应考虑生产准备费用和库存费用其实细心的读者一定会问是否需要考虑生产的直接成本如原材料成本人力成本电力成本等符号说明为了建立这类问题的一般模型我们定义如下数学符号 N -------- 生产项目总数本例中N 7 T -------- 计划期长度本例中T 6 K -------- 瓶颈资源种类数本例中K 1 M -------- 一个充分大的正数在模型中起到使模型线性化的作用 ----- 项目i在t时段的外部需求本例中只有产品A有外部需求 ----- 项目i在t时段的生产批量 ----- 项目i在t时段的库存量 ----- 项目i在t 时段是否生产的标志 0不生产 1生产 ----- 产品结构中项目j对项目i的消耗系数 S i ----- 产品结构中项目i的直接后继项目集合 ----- 项目i在t时段生产时的生产准备费用 ----- 项目i在t时段的单件库存费用----- 资源k在t时段的能力上限 --- 项目i在t时段生产时生产单个产品占用资源k 的能力δ x ---- 这个函数当且仅当x 0时取值1 否则取值0 在上述数学符号中只有为决策变量其余均为已知的计划参数目标函数这个问题的目标是使生产准备费用和库存费用的总和最小因此目标函数应该是每个项目在每个时段上的生产准备费用和库存费用的总和即 28 约束条件这个问题中的约束有这么几类每个项目的物流应该守恒资源能力限制应该满足每时段生产某项目前必须经过生产准备和非负约束对Yij是0-1约束 29 资源能力限制比较容易理解即 30 所谓物流守恒假设Ii0 0 31 每时段生产某项目前必须经过生产准备也就是说当Xit 0时Yit 0Xit 0时Yit 1这本来是一个非线性约束但是通过引入参数M很大的正数表示每个项目每个时段的最大产量可以化成线性约束即总结这个问题的优化模型就是在约束293031下使目标函数28达到最小§com 求解模型本例生产项目总数N 7 ABCDEFG 计划期长度T 6周瓶颈资源种类数K 1只有A有外部需求所以dit中只有d1t可以取非零需求即表5-1中的第2行的数据其他全部为零参数sit hit只与项目i有关而不随时段t变化所以可以略去下标t其数值就是表5-1中的最后两行数据由于只有一种资源参数Ckt可以略去下标k其数值就是表5-1中的第3行的数据而akIt只与项目i有关而不随时段t变化所以可以同时略去下标k和t即a2 5a3 8其他ai为0从图6-2中容易得到项目i的直接后继项目集合S i 和消耗系数准备以下的数据文件文本文件exam0502LDT可以看到其中也可以含有注释语句项目集合 A B C D E F G 计划期集合 1 2 3 4 5 6 需求 40 0 100 0 90 10 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 能力 10000 0 5000 5000 1000 1000 生产准备费400500 1000 300 200 400 100 库存费 12 06 10 004。
Matlab中的优化问题求解方法与示例分析

Matlab中的优化问题求解方法与示例分析介绍在科学与工程领域,优化问题是一个常见且重要的研究方向。
优化问题的目标是在给定的约束条件下,找到使得目标函数取得最优值的变量取值。
Matlab作为一个著名的科学计算软件,提供了丰富的优化问题求解方法。
本文将介绍Matlab中常用的优化问题求解方法,并通过实例分析来展示其应用。
一、线性规划问题的求解方法线性规划问题(Linear Programming)是一类目标函数与约束条件均为线性关系的优化问题。
Matlab中提供了线性规划问题求解的函数“linprog”和“intlinprog”。
1. linprog函数linprog函数用于求解线性规划问题,其使用方法如下:```[x, fval, exitflag, output] = linprog(f, A, b, Aeq, beq, lb, ub)```其中,f为目标函数的系数向量,A和b为不等式约束的系数矩阵和常数向量,Aeq和beq为等式约束的系数矩阵和常数向量,lb和ub为变量的下界和上界。
2. intlinprog函数intlinprog函数用于求解整数线性规划问题,即变量取值为整数的线性规划问题。
其使用方法与linprog类似,但需要添加一个参数“options”,用于设置求解器的选项。
二、非线性规划问题的求解方法非线性规划问题(Nonlinear Programming)是一类目标函数或约束条件存在非线性关系的优化问题。
Matlab中提供了多种非线性规划问题求解的函数,包括“fminunc”、“fmincon”和“lsqnonlin”。
1. fminunc函数fminunc函数用于求解没有约束条件的非线性规划问题,其使用方法如下:```[x, fval, exitflag, output] = fminunc(fun, x0)```其中,fun为目标函数的句柄,x0为变量的初始猜测值。
2. fmincon函数fmincon函数用于求解带约束条件的非线性规划问题,其使用方法如下:```[x, fval, exitflag, output, lambda] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub)```参数的含义与linprog函数中的相对应参数相似,但需要注意的是,A、b、Aeq 和beq都是针对不等式约束和等式约束的系数矩阵和常数向量;lb和ub为变量的下界和上界。
MATLAB优化问题

• 建立数学模型(优化模型),求最优策略(决策)
很多实际问题与优化有关,规模大,需软件求解
优化问题的一般形式
优化问题三要素:决策变量;目标函数;约束条件
min f (x)
s.t. hi (x) 0, i 1,...,m g j (x) 0, j 1,...,l
决策变量
x D n
目标函数
HessUpdate = ‘dfp’ (DFP算法) HessUpdate = ‘steepdesc’(最速下降算法) 搜索步长的算法选择(缺省:quadcubic) LineSearchType='quadcubic' 混合2, 3次多项式插值 LineSearchType='cubicpoly' 3次多项式插值
• OR/MS/DS的基础:OR(运筹学,Operations/-al Research)
MS(管理科学,Management Science)
DS(决策科学,Decision Science)
•解工决程优技化术/决/经策济问管题理的/科手学段研究/社会生活中经常遇到
• 经验积累,主观判断
• 作试验,比优劣
例5. min f (x, y) 100 ( y x2 )2 (1 x)2
精确解:x=y=1, f(x,y)=0
计算结果
方向 步长
最优解x
最优值f
n
BFGS 2,3次 (9.9997e-001 9.9994e-001) 1.0944e-009 165
DFP 2,3次 (9.9997e-001 9.9994e-001) 2.1173e-009 165
2. MATLAB优化工具箱使用简介 (Optimization Toolbox)
运用Lingo和Matlab软件求解线性规划问题比较

运用Lingo和Matlab软件求解线性规划问题比较运用Lingo和Matlab软件求解线性规划问题的比较研究摘要:本文就一个给定的线性规划模型,通过介绍优化软件lingo和科学计算软件matlab中求解线性规划问题的命令和函数,指出lingo软件在求解线性规划问题上占有一定优势。
关键词:线性规划 lingo软件 matlab软件最优解线性规划由前苏联经济学家康托洛维奇提出,它主要研究的是在线性等式(或不等式)约束条件下,使某一线性目标函数取得最大值(或最小值)的问题。
随着计算机技术的发展,借助软件可以快速对线性规划问题进行求解和分析。
目前,能够求解规划问题的数学软件比较多,常见的有优化软件lingo和科学计算软件matlab。
本文以如下线性规划为例,分别利用这二种软件来求解,并就它们在求解线性规划上的差异进行对比分析。
minz=10.8x11+10.95x12+11.1x13+11.25x14+11.1x22+11.25x23+11.4x24+11x33+11.15x34+11.3x44;s.t.x11+x12+x13+x14”“x(3,1) 0.000000x(3,2) 0.000000x(3,3) 25.00000x(3,4) 5.000000x(4,1) 0.000000x(4,2) 0.000000x(4,3) 0.000000x(4,4) 10.00000显然最优解同上,只是输出格式不同而已。
2 matlab求解线性规划2.1 matlab软件简介目前,matlab提供了四十多个工具箱,这些工具箱专门针对某些具体应用领域。
matlab优化工具箱中提供了linprog函数来求解线性规划问题。
2.2 matlab求解线性规划的命令介绍 matlab中一般使用“[ ]”、“,”或空格以及“;”来创建数组,“[ ]”中给出数组的所有元素,同行间的元素用“,”或者空格隔开,不同行之间用分号“;”隔开,并且用符号“?”置于矩阵右上角表示矩阵的转置运算。
Matlab中的优化问题求解方法

Matlab中的优化问题求解方法在数学和工程领域,优化问题是一个重要的研究方向。
通过寻找最优解,可以提高系统的效率和性能。
Matlab提供了丰富的工具箱和函数,可以用于解决各种不同类型的优化问题。
本文将介绍一些常见的优化问题求解方法,并针对它们在Matlab中的应用进行分析和讨论。
第一种常见的优化问题求解方法是线性规划(Linear Programming,LP)。
在线性规划中,目标函数和约束条件都是线性的。
通过寻找使得目标函数达到最大或最小的变量取值,可以获得问题的最优解。
Matlab中的优化工具箱提供了linprog函数,可以用于求解线性规划问题。
该函数采用单纯形算法或内点算法进行求解,并且可以处理带有等式和不等式约束的问题。
用户只需提供目标函数系数、约束矩阵和约束向量,即可得到问题的最优解和最优值。
除了线性规划,二次规划(Quadratic Programming,QP)也是常见的优化问题求解方法。
在二次规划中,目标函数是一个二次函数,约束条件可以是线性的或二次的。
Matlab中的优化工具箱提供了quadprog函数,可以用于求解二次规划问题。
该函数基于内点算法或者信赖域反射算法进行求解。
用户只需提供目标函数的二次项系数、一次项系数以及约束矩阵和约束向量,即可得到问题的最优解和最优值。
除了线性规划和二次规划,非线性规划(Nonlinear Optimization)也是常见的优化问题求解方法。
与线性规划和二次规划不同,非线性规划中的目标函数和约束条件可以是非线性的。
Matlab中的优化工具箱提供了fmincon函数,可以用于求解约束非线性优化问题。
该函数采用内点法、SQP法或者信赖域反射法进行求解。
用户需要提供目标函数、约束函数以及约束类型,并设定初始解,即可得到问题的最优解和最优值。
除了上述三种基本的优化问题求解方法,约束最小二乘(Constrained Least Squares)问题也是一个重要的优化问题。
经济管理中的决策分析与优化方法

经济管理中的决策分析与优化方法在经济管理领域中,决策分析与优化方法在帮助企业和组织做出决策时起着重要的作用。
通过运用这些方法,管理者能够更好地评估各种选择的风险和收益,并最大程度地优化决策结果。
本文将介绍几种常见的决策分析与优化方法,包括决策树、线性规划和灰色关联度分析。
首先,决策树是一种常用的决策分析方法。
通过构建树状结构,决策树可以帮助管理者理清决策过程中的各种选择路径,并根据不同的决策结果进行最终判断。
决策树的构建需要考虑不同选择的概率和相应的收益或成本,进而通过计算预期收益或成本来进行决策。
决策树可以直观地展示不同选择的决策路径和结果,帮助管理者更好地选择最优策略。
其次,线性规划是一种常用的优化方法。
线性规划通过建立数学模型,将目标函数与约束条件相结合,从而确定最佳决策方案。
在线性规划中,目标函数是需要最大化或最小化的数值,约束条件是对变量的限制条件。
通过使用线性规划模型,管理者可以优化资源的利用、最大限度地满足需求,并找到最优解。
线性规划可应用于各种经济管理问题,如生产计划、资源配置和供应链优化等。
最后,灰色关联度分析是一种可以帮助管理者评价指标之间关联性的方法。
在决策分析中,有时需要评估不同指标之间的关联程度,以辅助决策。
灰色关联度分析通过计算指标之间的相关系数,来判断它们的关联程度。
关联度越高,说明指标之间的关联程度越紧密,对决策的影响力越大。
灰色关联度分析可以用于市场营销决策、供应链管理和绩效评估等领域,帮助管理者更好地理解和评估指标之间的相互关系。
综上所述,在经济管理中,决策分析与优化方法对于帮助管理者做出明智的决策至关重要。
决策树、线性规划和灰色关联度分析是其中的几种常用方法。
通过运用这些方法,管理者能够更好地评估各种选择的风险和收益,并最大程度地优化决策结果。
在实际应用中,管理者应根据具体情况选择合适的方法,并结合实际情况进行分析和决策,以实现企业和组织的目标。
matlab--算法大全--第26章__经济与金融中的优化问题

第二十六章经济与金融中的优化问题本章主要介绍用LINGO软件求解经济、金融和市场营销方面的几个优化问题的案例。
§1 经济均衡问题及其应用在市场经济活动中,当市场上某种产品的价格越高时,生产商越是愿意扩大生产能力(供应能力),提供更多的产品满足市场需求;但市场价格太高时,消费者的消费欲望(需求能力)会下降。
反之,当市场上某种商品的价格越低时,消费者的消费欲望(需求能力)会上升,但生产商的供应能力会下降。
如果生产商的供应能力和消费者的需求能力长期不匹配,就会导致经济不稳定。
在完全市场竞争的环境中,我们总是认为经济活动应当达到均衡(equilibrium),即生产和消费(供应能力和需求能力)达到平衡,不再发生变化,这时该商品的价格就是市场的清算价格。
下面考虑两个简单的单一市场及双边市场的具体实例,并介绍经济均衡思想在拍卖与投标问题、交通流分配问题中的应用案例。
1.1 单一生产商、单一消费者的情形例1 假设市场上只有一个生产商(记为甲)和一个消费者(记为乙)。
对某种商品,他们在不同价格下的供应能力和需求能力如表1所示。
举例来说,表中数据的含义是:当单价低于2万元但大于或等于1万元时,甲愿意生产2t产品,乙愿意购买8t产品;当单价等于或低于9万元但大于4.5万元时,乙愿意购买2t产品,甲愿意生产8t 产品;依次类推。
那么的市场价格应该是多少?表1 不同价格下的供应能力和需求能力生产商(甲)消费者(乙)单价(万元/t)供应能力(t)单价(万元/t)需求能力(t)1 22 43 64 89 2 4.5 4 3 6 2.25 8(1)问题分析仔细观察一下表1就可以看出来,这个具体问题的解是一目了然的:清算价格显然应该是3万元/t,因为此时供需平衡(都是6t)。
为了能够处理一般情况,下面通过建立优化模型来解决这个问题。
这个问题给人的第一印象似乎没有明确的目标函数,不太像是一个优化问题。
不过,我们可以换一个角度来想问题:假设市场上还有一个虚拟的经销商,他是甲乙进行交易的中介。
使用Matlab进行优化与最优化问题求解

使用Matlab进行优化与最优化问题求解引言:优化与最优化问题在科学、工程和金融等领域中具有重要的应用价值。
在解决这些问题时,选择一个合适的优化算法是至关重要的。
Matlab提供了许多用于求解优化问题的函数和工具箱,能够帮助我们高效地解决各种复杂的优化与最优化问题。
一、优化问题的定义优化问题是通过选择一组最佳的决策变量值,使目标函数在约束条件下达到最优值的问题。
通常,我们将优化问题分为线性优化问题和非线性优化问题。
在Matlab中,可以使用线性规划(Linear Programming)工具箱和非线性规划(Nonlinear Programming)工具箱来解决这些问题。
其中,线性规划工具箱包括linprog函数,而非线性规划工具箱则包括fmincon和fminunc等函数。
二、线性规划问题的求解线性规划问题的数学模型可以表示为:```minimize f'*xsubject to A*x ≤ blb ≤ x ≤ ub```其中,f是目标函数的系数矩阵,A是不等式约束条件的系数矩阵,b是不等式约束条件的右侧向量,lb和ub是变量的上下界。
在Matlab中,可以使用linprog函数来求解线性规划问题。
该函数的调用格式为:```[x, fval, exitflag, output] = linprog(f, A, b, Aeq, beq, lb, ub)```其中,x是最优解向量,fval是目标函数的最优值,exitflag标志着求解的结果状态,output包含了详细的求解过程。
三、非线性规划问题的求解非线性规划问题的数学模型可以表示为:```minimize f(x)subject to c(x) ≤ 0ceq(x) = 0lb ≤ x ≤ ub```其中,f(x)是目标函数,c(x)和ceq(x)分别是不等式约束条件和等式约束条件,lb和ub是变量的上下界。
在Matlab中,可以使用fmincon函数来求解非线性规划问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二十九章经济与金融中的优化问题本章主要介绍用LINGO软件求解经济、金融和市场营销方面的几个优化问题的案例。
§1 经济均衡问题及其应用在市场经济活动中,当市场上某种产品的价格越高时,生产商越是愿意扩大生产能力(供应能力),提供更多的产品满足市场需求;但市场价格太高时,消费者的消费欲望(需求能力)会下降。
反之,当市场上某种商品的价格越低时,消费者的消费欲望(需求能力)会上升,但生产商的供应能力会下降。
如果生产商的供应能力和消费者的需求能力长期不匹配,就会导致经济不稳定。
在完全市场竞争的环境中,我们总是认为经济活动应当达到均衡(equilibrium),即生产和消费(供应能力和需求能力)达到平衡,不再发生变化,这时该商品的价格就是市场的清算价格。
下面考虑两个简单的单一市场及双边市场的具体实例,并介绍经济均衡思想在拍卖与投标问题、交通流分配问题中的应用案例。
1.1 单一生产商、单一消费者的情形例1 假设市场上只有一个生产商(记为甲)和一个消费者(记为乙)。
对某种商品,他们在不同价格下的供应能力和需求能力如表1所示。
举例来说,表中数据的含义是:当单价低于2万元但大于或等于1万元时,甲愿意生产2t产品,乙愿意购买8t产品;当单价等于或低于9万元但大于4.5万元时,乙愿意购买2t产品,甲愿意生产8t 产品;依次类推。
那么,市场的清算价格应该是多少?表1 不同价格下的供应能力和需求能力生产商(甲)消费者(乙)单价(万元/t)供应能力(t)单价(万元/t)需求能力(t)1 22 43 64 8 9 2 4.5 4 36 2.25 8(1)问题分析仔细观察一下表1就可以看出来,这个具体问题的解是一目了然的:清算价格显然应该是3万元/t,因为此时供需平衡(都是6t)。
为了能够处理一般情况,下面通过建立优化模型来解决这个问题。
这个问题给人的第一印象似乎没有明确的目标函数,不太像是一个优化问题。
不过,我们可以换一个角度来想问题:假设市场上还有一个虚拟的经销商,他是甲乙进行交易的中介。
那么,为了使自己获得的利润最大,他将总是以可能的最低价格从甲购买产品,再以可能的最高价格卖给乙,直到进一步的交易无利可图为止。
例如,最开始的2t产品他将会以1万元的单价从甲购买,以9万元的单价卖给乙;接下来的2t产品他会以2万元的单价从甲购买,再以4.5万元的单价卖给乙;再接下来的2t产品他只能以3万元的单价从甲购买,再以3万元的单价卖给乙(其实这次交易他已经只是保本,但我们仍然假设这笔交易会发生,例如他为了使自己的营业额尽量大);最后,如果他继续购买甲的产品卖给乙,他一定会亏本,所以他肯定不会交易。
因此,市场清算价格就是3万元。
根据这个想法,我们就可以建立这个问题的线性规划模型。
(2)模型建立决策变量:设甲以1万元,2万元,3万元,4万元的单价售出的产品数量(单位:-708--709-t )分别是4321,,,x x x x ,乙以9万元,4.5万元,3万元,2.25万元的单价购买的产品数量(单位:t )分别是4321,,,y y y y 。
目标函数:就是虚拟经销商的总利润,即432143214325.235.49x x x x y y y y −−−−+++ (1) 约束条件:供需平衡∑∑===4141i i i i y x (2)供应限制 2≤i x ,4,3,2,1=i (3)消费限制 2≤i y ,4,3,2,1=i (4) 非负限制 0,≥i i y x ,4,3,2,1=i (5)(3)模型求解式(1)~(5)是一个线性规划模型,可以用LINGO 求解,对应的LINGO 程序如下:model:sets:gx/1..4/:c1,c2,x,y;endsetsdata:c1=1 2 3 4;c2=9,4.5,3,2.5;enddata[con0] max=@sum(gx:c2*y-c1*x);[con1] @sum(gx:x)=@sum(gx:y);@for(gx:@bnd(0,x,2);@bnd(0,y,2));end求解这个模型,得到如下解答:Global optimal solution found.Objective value: 21.00000Total solver iterations: 4Variable Value Reduced Cost C1( 1) 1.000000 0.000000 C1( 2) 2.000000 0.000000 C1( 3) 3.000000 0.000000 C1( 4) 4.000000 0.000000 C2( 1) 9.000000 0.000000 C2( 2) 4.500000 0.000000 C2( 3) 3.000000 0.000000 C2( 4) 2.500000 0.000000 X( 1) 2.000000 -2.000000-710- X( 2) 2.000000 -1.000000 X( 3) 2.000000 0.000000 X( 4) 0.000000 1.000000 Y( 1) 2.000000 -6.000000 Y( 2) 2.000000 -1.500000 Y( 3) 2.000000 0.000000 Y( 4) 0.000000 0.5000000 Row Slack or Surplus Dual Price CON0 21.00000 1.000000 CON1 0.000000 -3.000000(4)结果解释可以看出,最优解为2321321======y y y x x x ,044==y x 。
但你肯定觉得这还是没有解决问题。
那么如何才能确定清算价格呢?请仔细思考一下供需平衡约束(con1)的对偶价格(dual prices )的含义。
对偶价格又称影子价格,表示的是对应约束的右端项的价值。
供需平衡约束目前的右端项为0,影子价格为-3,意思就是说如果右端项增加一个很小的量(即甲的供应量增加一个很小的量),引起的经销商的损失就是这个小量的3倍。
可见,此时的销售单价就是3万元,这就是清算价格。
(5)模型扩展一般地,可以假设甲的供应能力随价格的变化情况分为K 段,即价格位于区间),[1+k k p p 时,供应量最多为k c (K k ,,2,1L =;∞=<<<<+1210K p p p L ;K C c c c <<<<=L 2100),我们把这个函数关系称为供应函数(这里它是一个阶梯函数)。
同理,假设乙的消费能力随价格的变化情况分为L 段,即价格位于区间],(1j j q q +时,消费量最多为j d (L j ,,2,1L =;011=>>>+L L q q q L ;L d d d L <<=100),我们把这个函数关系称为需求函数(这里它也是一个阶梯函数)。
设甲以k p 的价格售出的产品数量为k x (K k ,,2,1L =),乙以j q 的价格购入的产品数量为j y (L j ,,2,1L =)。
记000==d c ,则可以建立如下所示的线性规划模型:∑∑==−Kk k k L j j j x p y q 11max(6)s.t. 011=−∑∑==L j j K k k y x (7)10−−≤≤k k k c c x ,K k ,,2,1L = (8) 10−−≤≤j j j d d y ,L j ,,2,1L = (9)1.2 两个生产商、两个消费者的情形例2 假设市场上除了例1中的甲和乙外,还有另一个生产商(记为丙)和另一个消费者(记为丁),他们在不同价格下的供应能力和需求能力如表2所示。
此外,从甲销售到丁的每吨产品的运输成本是1.5万元,从丙销售到乙的每吨产品的运输成本是2万元,而甲、乙之间没有运输成本,丙、丁之间没有运输成本。
这时,市场的清算价格应该是多少?甲和丙分别生产多少?乙和丁分别购买多少?-711-表2 不同价格下的供应能力和消费能力生产商(丙) 消费者(丁)单价(万元/t ) 供应能力(t )单价(万元/t ) 需求能力(t )2 14 46 88 1215 1 8 3 5 6 3 10(1)问题分析首先,我们看看为什么要考虑从甲销售到丁的产品的运输成本和从丙销售到乙的产品的运输成本。
如果不考虑这些运输成本,我们就可以认为甲乙丙丁处于同一个市场上,因此可以将两个生产商(甲和丙)的供应函数合并成一个供应函数,合并后就可以认为市场上仍然只有一个供应商。
类似地,乙和丁的需求函数也可以合并成一个需求函数,合并后就可以认为市场上仍然只有一个消费者。
这样,就回到了例1的情形。
也就是说,考虑运输成本在经济学上的含义,应当是认为甲乙是一个市场(地区或国家),而丙丁是另一个市场(地区或国家)。
运输成本也可能还包括关税等成本,由于这个成本的存在,两个市场的清算价可能是不同的。
仍然按照例1的思路,可以建立这个问题的线性规划模型。
(2)模型的建立和求解设甲以1,2,3,4(万元)的单价售出的产品数量(单位:t )分别是4321,,,A A A A ,乙以9,4.5,3,2.25(万元)的单价购买的产品数量(单位:t )分别是4321,,,X X X X ;丙以2,4,6,8(万元)的单价售出的产品数量(单位:t )分别是4321,,,B B B B ,丁以15,8,5,3(万元)的单价购买的产品数量(单位:t )分别是4321,,,Y Y Y Y 。
此外,假设AX 和AY 分别是甲向乙和丁的供货量,BX 和BY 分别是丙向乙和丁的供货量。
这些决策变量之间的关系参见示意图1。
图1 决策变量之间的关系目标函数仍然是虚拟经销商的总利润,约束条件仍然是四类(供需平衡、供应限制、需求限制和非负限制),不过这时应注意供需平衡约束应该是包括图1所示的决策变量之间的关系:4321A A A A AY AX +++=+ (10)4321B B B B BY BX +++=+ (11)4321X X X X BX AX +++=+ (12)4321Y Y Y Y BY AY +++=+ (13)此外的其它约束实际上只是一个简单的变量上界约束。
下面直接给出LINGO 程序:model:sets:num1/1..4/:c1,c2,c3,c4,d1,d2,A,B,X,Y;num2/1,2/:AXY,BXY;endsetsdata:c1=9 4.5 3 2.25; !乙购买价格;c2=15 8 5 3; !丁的购买价格;c3=1 2 3 4; !甲的售出价格;c4=2 4 6 8; !丙的售出价格;d1=1 3 4 4; !丙的供应能力;d2=1 2 3 4; !丁的需求能力;enddata[con0] max=@sum(num1:c1*x+c2*y-c3*A-c4*B)-2*BXY(1)-1.5*AXY(2); [con1] @sum(num1:A)-@sum(num2:AXY)=0;[con2] @sum(num1:B)-@sum(num2:BXY)=0;[con3] AXY(1)+BXY(1)-@sum(num1:X)=0;[con4] AXY(2)+BXY(2)-@sum(num1:Y)=0;@for(num1:@bnd(0,A,2);@bnd(0,X,2);@bnd(0,B,d1);@bnd(0,Y,d2)); end求解这个模型,得到如下解答:Global optimal solution found.Objective value: 44.00000Total solver iterations: 14Variable Value Reduced CostC1( 1) 9.000000 0.000000C1( 2) 4.500000 0.000000C1( 3) 3.000000 0.000000C1( 4) 2.250000 0.000000C2( 1) 15.00000 0.000000C2( 2) 8.000000 0.000000C2( 3) 5.000000 0.000000C2( 4) 3.000000 0.000000C3( 1) 1.000000 0.000000C3( 2) 2.000000 0.000000C3( 3) 3.000000 0.000000C3( 4) 4.000000 0.000000C4( 1) 2.000000 0.000000C4( 2) 4.000000 0.000000C4( 3) 6.000000 0.000000C4( 4) 8.000000 0.000000D1( 1) 1.000000 0.000000D1( 2) 3.000000 0.000000-712--713-D1( 3) 4.000000 0.000000 D1( 4) 4.000000 0.000000 D2( 1) 1.000000 0.000000 D2( 2) 2.000000 0.000000 D2( 3) 3.000000 0.000000 D2( 4) 4.000000 0.000000 A( 1) 2.000000 -2.000000 A( 2) 2.000000 -1.000000 A( 3) 2.000000 0.000000 A( 4) 0.000000 1.000000 B( 1) 1.000000 -2.500000 B( 2) 3.000000 -0.5000000 B( 3) 0.000000 1.500000 B( 4) 0.000000 3.500000 X( 1) 2.000000 -6.000000 X( 2) 2.000000 -1.500000 X( 3) 0.000000 0.000000 X( 4) 0.000000 0.7500000 Y( 1) 1.000000 -10.50000 Y( 2) 2.000000 -3.500000 Y( 3) 3.000000 -0.5000000 Y( 4) 0.000000 1.500000 AXY( 1) 4.000000 0.000000 AXY( 2) 2.000000 0.000000 BXY( 1) 0.000000 3.500000 BXY( 2) 4.000000 0.000000 Row Slack or Surplus Dual Price CON0 44.00000 1.000000 CON1 0.000000 -3.000000 CON2 0.000000 -4.500000 CON3 0.000000 -3.000000 CON4 0.000000 -4.500000(3)结果解释可以看到,最优解为221321=====X X A A A ,11=B ,32=B ,11=Y ,22=Y ,33=Y ,4==BY AX ,2=AY ,0443434=======BX Y X X B B A 。