-348-第二十六章经济与金融中的优化问题本章主要介绍用LINGO软件求解经济、金融和市场营销方面的几个优化问题的案例。§1经济均衡问题及其应用在市场经济活动中,当市场上某种产品的价格越高时,生产商越是愿意扩大生产能力(供应能力),提供更多的产品满足市场需求;但市场价格太高时,消费者的消费欲望(需求能力)会下降。反之,当市场上某种商品的价格越低时,消费者的消费欲望(需求能力)会上升,但生产商的供应能力会下降。如果生产商的供应能力和消费者的需求能力长期不匹配,就会导致经济不稳定。在完全市场竞争的环境中,我们总是认为经济活动应当达到均衡(equilibrium),即生产和消费(供应能力和需求能力)达到平衡,不再发生变化,这时该商品的价格就是市场的清算价格。下面考虑两个简单的单一市场及双边市场的具体实例,并介绍经济均衡思想在拍卖与投标问题、交通流分配问题中的应用案例。1.1单一生产商、单一消费者的情形例1假设市场上只有一个生产商(记为甲)和一个消费者(记为乙)。对某种商品,他们在不同价格下的供应能力和需求能力如表1所示。举例来说,表中数据的含义是:当单价低于2万元但大于或等于1万元时,甲愿意生产2t产品,乙愿意购买8t产品;当单价等于或低于9万元但大于4.5万元时,乙愿意购买2t产品,甲愿意生产8t产品;依次类推。那么的市场价格应该是多少?表1不同价格下的供应能力和需求能力生产商(甲)消费者(乙)单价(万元/t)供应能力(t)单价(万元/t)需求能力(t)12243648924.54362.258(1)问题分析仔细观察一下表1就可以看出来,这个具体问题的解是一目了然的:清算价格显然应该是3万元/t,因为此时供需平衡(都是6t)。为了能够处理一般情况,下面通过建立优化模型来解决这个问题。这个问题给人的第一印象似乎没有明确的目标函数,不太像是一个优化问题。不过,我们可以换一个角度来想问题:假设市场上还有一个虚拟的经销商,他是甲乙进行交易的中介。那么,为了使自己获得的利润昀大,他将总是以可能的昀低价格从甲购买产品,再以可能的昀高价格卖给乙,直到进一步的交易无利可图为止。例如,昀开始的-349-2t产品他将会以1万元的单价从甲购买,以9万元的单价卖给乙;接下来的2t产品他会以2万元的单价从甲购买,再以4.5万元的单价卖给乙;再接下来的2t产品他只能以3万元的单价从甲购买,再以3万元的单价卖给乙(其实这次交易他已经只是保本,但我们仍然假设这笔交易会发生,例如他为了使自己的营业额尽量大);昀后,如果他继续购买甲的产品卖给乙,他一定会亏本,所以他肯定不会交易。因此,市场清算价格就是3万元。根据这个想法,我们就可以建立这个问题的线性规划模型。(2)模型建立决策变量:设甲以1万元,2万元,3万元,4万元的单价售出的产品数量(单位:t)分别是4321,,,xxxx,乙以9万元,4.5万元,3万元,2.25万元的单价购买的产品数量(单位:t)分别是4321,,,yyyy。目标函数:就是虚拟经销商的总利润,即432143214325.235.49xxxxyyyy−−−−+++(1)约束条件:供需平衡∑∑===4141iiiiyx(2)供应限制2≤ix,4,3,2,1=i(3)消费限制2≤iy,4,3,2,1=i(4)非负限制0,≥iiyx,4,3,2,1=i(5)(3)模型求解式(1)~(5)是一个线性规划模型,可以用LINGO求解,对应的LINGO程序如下:model:sets:gx/1..4/:c1,c2,x,y;endsetsdata:c1=1234;c2=9,4.5,3,2.5;enddatamax=@sum(gx:c2*y-c1*x);@sum(gx:x)=@sum(gx:y);@for(gx:@bnd(0,x,2);@bnd(0,y,2));-350-end求解这个模型,得到如下解答:Globaloptimalsolutionfoundatiteration:5Objectivevalue:21.00000VariableValueReducedCostC1(1)1.0000000.000000C1(2)2.0000000.000000C1(3)3.0000000.000000C1(4)4.0000000.000000C2(1)9.0000000.000000C2(2)4.5000000.000000C2(3)3.0000000.000000C2(4)2.5000000.000000X(1)2.000000-2.000000X(2)2.000000-1.000000X(3)0.0000000.000000X(4)0.0000001.000000Y(1)2.000000-6.000000Y(2)2.000000-1.500000Y(3)0.0000000.000000Y(4)0.0000000.5000000RowSlackorSurplusDualPrice121.000001.00000020.000000-3.000000(4)结果解释可以看出,昀优解为22121====yyxx,04343====yyxx。但你肯定觉得这还是没有解决问题,甚至认为这个模型错了,因为这个解法没有包括3万元单价的2t交易量。虽然容易验证0321321======yyyxxx,044==yx也是昀优解,但在一般情况下是难以保证一定求出这个解的。那么如何才能确定清算价格呢?请仔细思考一下供需平衡约束(2)的对偶价格(dualprices)的含义。对偶价格又称影子价格,表示的是对应约束的右端项的价值。供需平衡约束目前的右端项为0,影子价格为-3,意思就是说如果右端项增加一个很小的量(即甲的供应量增加一个很小的量),引起的经销商的损失就是这个小量的3倍。可见,此时的销售单价就是3万元,这就是清算价格。(5)模型扩展一般地,可以假设甲的供应能力随价格的变化情况分为K段,即价格位于区间-351-),[1+kkpp时,供应量昀多为kc(Kk,,2,1L=;∞=+1210KpppL;KCccc=L2100),我们把这个函数关系称为供应函数(这里它是一个阶梯函数)。同理,假设乙的消费能力随价格的变化情况分为L段,即价格位于区间],(1jjqq+时,消费量昀多为jd(Lj,,2,1L=;011=+LLqqqL;LdddL=100),我们把这个函数关系称为需求函数(这里它也是一个阶梯函数)。设甲以kp的价格售出的产品数量为kx(Kk,,2,1L=),乙以jq的价格购入的产品数量为jy(Lj,,2,1L=)。记000==dc,则可以建立如下所示的线性规划模型:∑∑==−KkkkLjjjxpyq11max(6)s.t.011=−∑∑==LjjKkkyx(7)10−−≤≤kkkccx,Kk,,2,1L=(8)10−−≤≤jjjddy,Lj,,2,1L=(9)1.2两个生产商、两个消费者的情形例2假设市场上除了例1中的甲和乙外,还有另一个生产商(记为丙)和另一个消费者(记为丁),他们在不同价格下的供应能力和需求能力如表2所示。此外,从甲销售到丁的每吨产品的运输成本是1.5万元,从丙销售到乙的每吨产品的运输成本是2万元,而甲、乙之间没有运输成本,丙、丁之间没有运输成本。这时,市场的清算价格应该是多少?甲和丙分别生产多少?乙和丁分别购买多少?表2不同价格下的供应能力和消费能力生产商(丙)生产商(丁)单价(万元/t)供应能力(t)单价(万元/t)供应能力(t)2144688121518356310(1)问题分析-352-首先,我们看看为什么要考虑从甲销售到丁的产品的运输成本和从丙销售到乙的产品的运输成本。如果不考虑这些运输成本,我们就可以认为甲乙丙丁处于同一个市场上,因此可以将两个生产商(甲和丙)的供应函数合并成一个供应函数,合并后就可以认为市场上仍然只有一个供应商。类似地,乙和丁的需求函数也可以合并成一个需求函数,合并后就可以认为市场上仍然只有一个消费者。这样,就回到了例1的情形。也就是说,考虑运输成本在经济学上的含义,应当是认为甲乙是一个市场(地区或国家),而丙丁是另一个市场(地区或国家)。运输成本也可能还包括关税等成本,由于这个成本的存在,两个市场的清算价可能是不同的。仍然按照例1的思路,可以建立这个问题的线性规划模型。(2)模型的建立和求解设甲以1,2,3,4(万元)的单价售出的产品数量(单位:t)分别是4321,,,AAAA,乙以9,4.5,3,2.25(万元)的单价购买的产品数量(单位:t)分别是4321,,,XXXX;丙以2,4,6,8(万元)的单价售出的产品数量(单位:t)分别是4321,,,BBBB,丁以15,8,5,3(万元)的单价购买的产品数量(单位:t)分别是4321,,,YYYY。此外,假设AX和AY分别是甲向乙和丁的供货量,BX和BY分别是丙向乙和丁的供货量。这些决策变量之间的关系参见示意图1。图1决策变量之间的关系目标函数仍然是虚拟经销商的总利润,约束条件仍然是四类(供需平衡、供应限制、需求限制和非负限制),不过这时应注意供需平衡约束应该是包括图1所示的决策变量之间的关系:4321AAAAAYAX+++=+(10)4321BBBBBYBX+++=+(11)4321XXXXBXAX+++=+(12)-353-4321YYYYBYAY+++=+(13)此外的其它约束实际上只是一个简单的变量上界约束。下面直接给出LINGO程序:model:sets:num1/1..4/:c1,c2,c3,c4,d1,d2,A,B,X,Y;num2/1,2/:AXY,BXY;endsetsdata:c1=94.532.25;c2=15853;c3=1234;c4=2468;d1=1344;d2=1234;enddatamax=@sum(num1:c1*x+c2*y-c3*A-c4*B)-2*BXY(1)-1.5*AXY(2);@sum(num1:A)-@sum(num2:AXY)=0;@sum(num1:B)-@sum(num2:BXY)=0;AXY(1)+BXY(1)-@sum(num1:X)=0;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求解这个模型,得到如下解答:Globaloptimalsolutionfoundatiteration:0Objectivevalue:44.00000VariableValueReducedCostC1(1)9.0000000.000000C1(2)4.5000000.000000C1(3)3.0000000.000000C1(4)2.2500000.000000C2(1)15.000000.000000C2(2)8.0000000.000000C2(3)5.0000000.000000C2(4)3.0000000.000000C3(1)1.0000000.000000C3(2)2.0000000.000000C3(3)3.0000000.000000-354-C3(4)4.0000000.000000C4(1)2.0000000.000000C4(2)4.0000000.000000C4(3)6.0000000.000000C4(4)8.0000000.000000D1(1)1.0000000.000000D1(2)3.0000000.000000D1(3)4.0000000.000000D1(4)4.0000000.000000D2(1)1.0000000.000000D2(2)2.0000000.000000D2(3)3.0000000.000000D2(4)4.0000000.000000A(1)2.000000-2.000000A(2)2.000000-1.000000A(3)2.0000000.000000A(4)0.0000001.000000B(1)