第26章
经济与金融中的优化问题
26
经济
金融
中的
优化
问题
-348-第二十六章第二十六章 经济与金融中的优化问题经济与金融中的优化问题 本章主要介绍用 LINGO 软件求解经济、金融和市场营销方面的几个优化问题的案例。1 经济均衡问题及其应用 在市场经济活动中,当市场上某种产品的价格越高时,生产商越是愿意扩大生产能力(供应能力),提供更多的产品满足市场需求;但市场价格太高时,消费者的消费欲望(需求能力)会下降。反之,当市场上某种商品的价格越低时,消费者的消费欲望(需求能力)会上升,但生产商的供应能力会下降。如果生产商的供应能力和消费者的需求能力长期不匹配,就会导致经济不稳定。在完全市场竞争的环境中,我们总是认为经济活动应当达到均衡(equilibrium),即生产和消费(供应能力和需求能力)达到平衡,不再发生变化,这时该商品的价格就是市场的清算价格。下面考虑两个简单的单一市场及双边市场的具体实例,并介绍经济均衡思想在拍卖与投标问题、交通流分配问题中的应用案例。1.1 单一生产商、单一消费者的情形 例 1 假设市场上只有一个生产商(记为甲)和一个消费者(记为乙)。对某种商品,他们在不同价格下的供应能力和需求能力如表 1 所示。举例来说,表中数据的含义是:当单价低于 2 万元但大于或等于 1 万元时,甲愿意生产 2t 产品,乙愿意购买 8t 产品;当单价等于或低于 9 万元但大于 4.5 万元时,乙愿意购买 2t 产品,甲愿意生产 8t产品;依次类推。那么的市场价格应该是多少?表 1 不同价格下的供应能力和需求能力 生产商(甲)消费者(乙)单价(万元/t)供应能力(t)单价(万元/t)需求能力(t)1 2 2 4 3 6 4 8 9 2 4.5 4 3 6 2.25 8 (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)供应限制 2ix,4,3,2,1=i (3)消费限制 2iy,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;endsets data:c1=1 2 3 4;c2=9,4.5,3,2.5;enddata max=sum(gx:c2*y-c1*x);sum(gx:x)=sum(gx:y);for(gx:bnd(0,x,2);bnd(0,y,2);-350-end 求解这个模型,得到如下解答:Global optimal solution found at iteration:5 Objective value:21.00000 Variable 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 X(2)2.000000 -1.000000 X(3)0.000000 0.000000 X(4)0.000000 1.000000 Y(1)2.000000 -6.000000 Y(2)2.000000 -1.500000 Y(3)0.000000 0.000000 Y(4)0.000000 0.5000000 Row Slack or Surplus Dual Price 1 21.00000 1.000000 2 0.000000 -3.000000(4)结果解释 可以看出,最优解为22121=yyxx,04343=yyxx。但你肯定觉得这还是没有解决问题,甚至认为这个模型错了,因为这个解法没有包括 3 万元单价的2t 交易量。虽然容易验证0321321=yyyxxx,044=yx也是最优解,但在一般情况下是难以保证一定求出这个解的。那么如何才能确定清算价格呢?请仔细思考一下供需平衡约束(2)的对偶价格(dual prices)的含义。对偶价格又称影子价格,表示的是对应约束的右端项的价值。供需平衡约束目前的右端项为 0,影子价格为3,意思就是说如果右端项增加一个很小的量(即甲的供应量增加一个很小的量),引起的经销商的损失就是这个小量的 3 倍。可见,此时的销售单价就是 3 万元,这就是清算价格。(5)模型扩展 一般地,可以假设甲的供应能力随价格的变化情况分为K段,即价格位于区间 -351-),1+kkpp时,供应量最多为kc(Kk,2,1L=;=+1210KpppL;KCccc+LLqqqL;LdddL=100),我们把这个函数关系称为需求函数(这里它也是一个阶梯函数)。设甲以kp的价格售出的产品数量为kx(Kk,2,1L=),乙以jq的价格购入的产品数量为jy(Lj,2,1L=)。记000=dc,则可以建立如下所示的线性规划模型:=KkkkLjjjxpyq11max (6)s.t.011=LjjKkkyx (7)10kkkccx,Kk,2,1L=(8)10jjjddy,Lj,2,1L=(9)1.2 两个生产商、两个消费者的情形 例 2 假设市场上除了例 1 中的甲和乙外,还有另一个生产商(记为丙)和另一个消费者(记为丁),他们在不同价格下的供应能力和需求能力如表 2 所示。此外,从甲销售到丁的每吨产品的运输成本是 1.5 万元,从丙销售到乙的每吨产品的运输成本是 2万元,而甲、乙之间没有运输成本,丙、丁之间没有运输成本。这时,市场的清算价格应该是多少?甲和丙分别生产多少?乙和丁分别购买多少?表 2 不同价格下的供应能力和消费能力 生产商(丙)生产商(丁)单价(万元/t)供应能力(t)单价(万元/t)供应能力(t)2 1 4 4 6 8 8 12 15 1 8 3 5 6 3 10 (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;endsets data: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 max=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 求解这个模型,得到如下解答:Global optimal solution found at iteration:0 Objective value:44.00000 Variable Value Reduced Cost C1(1)9.000000 0.000000 C1(2)4.500000 0.000000 C1(3)3.000000 0.000000 C1(4)2.250000 0.000000 C2(1)15.00000 0.000000 C2(2)8.000000 0.000000 C2(3)5.000000 0.000000 C2(4)3.000000 0.000000 C3(1)1.000000 0.000000 C3(2)2.000000 0.000000 C3(3)3.000000 0.000000 -354-C3(4)4.000000 0.000000 C4(1)2.000000 0.000000 C4(2)4.000000 0.000000 C4(3)6.000000 0.000000 C4(4)8.000000 0.000000 D1(1)1.000000 0.000000 D1(2)3.000000 0.000000 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 1 44.00000 1.000000 2 0.000000 -3.000000 3 0.000000 -4.500000 4 0.000000 -3.000000 5 0.000000 -4.500000 -355-(3)结果解释 可以看到,最优解为221321=XXAAA,11=B,32=B,11=Y,32=Y,33=Y,4=BYAX,2=AY,0443434=BXYXXBBA。也就是说,甲将向丁销售2t产品,丙不会向乙销售。那么如何才能确定清算价格呢?与例1类似,约束(2)是针对生产商甲的供需平衡条件,目前的右端项为0,影子价格为3,意思就是说如果右端项增加一个很少的量(即甲的供应量增加一个很少的量),引起的经销商的损失就是这个小量的3.5倍。可见,此时甲的销售单价就是3万元,这就是甲面对的清算价格。完全类似地,可以知道生产商丙面对的清算价格为4.5。自然地,乙面对的清算价格也是3,丁面对的清算价格也是4.5,因为甲乙位于同一个市场,而丙丁也位于同一个市场。这两个市场的清算价之差正好等于从甲、乙到丙、丁的运输成本(1.5),这是非常合理的。(4)模型扩展 可以和1.1一样,将上面的具体模型一般化,即考虑供应函数和需求函数的分段数不是固定为4,而是任意有限正整数的情形。很自然地,上面的方法很容易推广到不仅仅是2个市场,而是任意有限个市场的情形。理论上看这当然没有什么难度,只是这时变量会更多,数学表达式变得更复杂一些。1.3 拍卖与投标问题 例3 假设一家拍卖行对委托的5类艺术品对外拍卖,采用在规定日期前投标人提交投标书的方式进行,最后收到了来自4个投标人的投标书。每类项目的数量、投标人对每个项目的投标价格如表3中所示。例如,有3件第4类艺术品;对每件第4类艺术品,投标人1,2,3愿意出的最高价分别为6,1,3,2(货币单位,如万元)。此外,假设每个投标人对每类艺术品最多只能购买1件,并且每个投标人购买的艺术品的总数不能超过3件。那么,哪些艺术品能够卖出去?卖给谁?这个拍卖和投标问题中每类物品的清算价应该是多少?表3 拍卖与投标信息 招标项目类型 1 2 3 4 5 招标项目的数量 1 2 3 3 4 投标人1 9 2 8 6 3 投标人2 6 7 9 1 5 投标人3 7 8 6 3 4 投标价格 投标人4 5 4 3 2 1 (1)问题分析 这个具体问题在实际中可能可以通过对所有投标的报价进行排序来解决,例如可以总是将艺术品优先卖给出价最高的投标人。但这种方法不太好确定每类艺术品的清算 -356-价,所以我们这里还是借用前面两个例子中的方法,即假设有一个中间商希望最大化自己的利润,从而建立这个问题的线性规划模型。(2)问题的一般提法和假设 先建立一般的模型,然后求解本例的具体问题,设有n类物品需要拍卖,第j类物品的数量为js(nj,2,1L=);有m个投标者,投标者i(miL,2,1=)对第j类物品的投标价格为ijb(假设非负)。投标者i对每类物品最多购买一件,且总件数不能超过ic。我们的目标之一是要确定第j类物品的清算价格jp,它应当满足下列假设条件:i)成交的第j类物品的数量不超过js(nj,2,1L=);ii)对第j类物品的报价低于jp的投标人将不能获得第j类物品;iii)如果成交的第j类物品的数量少于js(nj,2,1L=)可以认为0=jp(除非拍卖方另外指定一个最低的保护价);iv)对第j类物品的报价高于jp的投标人有权获得第j类物品,但如果他有权获得的物品超过3件,那么我们假设他总是希望使自己的满意度最大(满意度可以用他的报价与市场清算价之差来衡量)。(3)优化模型 用10变量ijx表示是否分配一件第j类物品给投标者i,即1=ijx表示分配,而0=ijx表示不分配。目标函数仍然是虚拟的中间商的总利润(认为这些利润全部是拍卖行的利润也可以),即 =minjijijxb11 (14)除变量取值为0或1的约束外,问题的约束条件主要是两类:每类物品的数量限制和每个投标人所能分到的物品的数量限制,即 jmiijsx=1,nj,2,1L=(15)injijcx=1,mi,2,1L=(16)-357-模型就是在约束(15)、(16)下最大化目标函数(14)。(4)模型求解 编写的LINGO程序如下:MODEL:TITLE 拍卖与投标;SETS:AUCTION/1.5/:S;BIDDER/1.4/:C;LINK(BIDDER,AUCTION):B,X;ENDSETS DATA:S=1 2 3 3 4;C=3 3 3 3;B=9 2 8 6 3 6 7 9 1 5 7 8 6 3 4 5 4 3 2 1;ENDDATA MAX=SUM(LINK:B*X);FOR(AUCTION(J):AUC_LIM SUM(BIDDER(I):X(I,J)S(J);FOR(BIDDER(I):BID_LIM SUM(AUCTION(J):X(I,J)C(I);FOR(LINK:BND(0,X,1);END 需要指出的是,上面程序中DATA语句的数据表是直接从WORD文档中复制(Ctrl+C)后粘贴(Ctrl+V)过来的,所以显示格式继续保持了WORD文档的风格。(5)求解结果解释 可以看到,最优解为:投标人1得到艺术品1,3,4,投标人2,3都得到艺术品2,3,5,投标人4得到艺术品4,5。结果,第4,5类艺术品各剩下1件没有成交。那么如何才能确定清算价格呢?与例1和例2类似,约束“AUC_LIM”是针对每类艺术品的数量限制的,对应的影子价格就是其清算价格:即5类艺术品的清算价格分别是5,5,3,0,0。第4,5类艺术品有剩余,所以清算价格为0,这是符合前面的假设的。可以指出的是:即使上面模型中不要求ijx为10变量(即只要求取01之间的实 -358-数),由于这个问题的特殊性,最优解中ijx也会要么取0,要么取1,不可能取01之间的其它数,所以可以将LINGO模型中“BIN(X)”改为“BND(0,X,1)”,这个线性规划的结果将与10整数线性规划得到的结果相同。最后,大学生的选课问题与此是类似的,即把课程看成招标(拍卖)项目,而把学生愿意付出的选课费看成投标。据说国外有些大学的选课系统就是使用这个模型确定每门课程的清算价格(选课费用)的,而且取得了成功。1.4 交通流均衡问题 例4 某地有如图2所示的一个公路网,每天上班时间有6千辆小汽车要从居民区A前往工作区D。经过长期观察,我们得到了图中5条道路上每辆汽车的平均行驶时间和汽车流量之间的关系,如表4所示,那么,长期来看,这些汽车将如何在每条道路上分布?图2 一个公路网示意图 表4 平均行驶时间和汽车流量之间的关系 道 路 AB AC BC BD CD 流量2 20 52 12 52 20 2流量3 30 53 13 53 30 行驶时间(min)3流量4 40 54 14 54 40 (1)问题分析 这个问题看起来似乎与前面几个例子完全不同,但实际上交通流与市场经济活动类似,也存在着均衡。我们可以想象有一个协调者,正如前面几个例子中的所谓中间商可以理解为市场规律一样,实际上这里的所谓协调者也可以认为是交通流的规律。交通流的规律就是每辆汽车都将选择使自己从A到D运行时间最少的路线,其必然的结果是无论走哪条路线从A到D,最终花费的时间应该是一样的(否则,花费时间较长的那条线路上的部分汽车就会改变自己的路线,以缩短自己的行驶时间)。也就是说,长期来看,这些汽车在每条道路上的分布将达到均衡状态(所谓均衡,这里的含义就是每辆汽车都不能仅仅通过自身独自改变道路,节省其行驶时间)。在这种想法下,我们来建立线性规划模型。(2)优化模型 交通流的规律要求所有道路上的流量达到均衡,我们仍然类似例1和例2来考虑问题。如果车流量是一辆车一辆车增加的,那么在每条道路上车流量小于2时,车流量会 -359-有一个分布规律;当某条道路上流量正好超过2时,新加入的一辆车需要选择使自己堵塞时间最短的道路。这就提示我们把同一条道路上的流量分布分解成不同性质的三个部分。也就是说,我们用)(ABY表示道路AB上的总的流量,并进一步把它分解成三部分:i)道路AB上的流量不超过2时的流量,用),2(ABX表示;ii)道路AB上的流量超过2但不超过3时,超过2的流量部分用),3(ABX表示;iii)道路AB上的流量超过3但不超过4时,超过3的流量部分用),4(ABX表示。依次类推,对道路CDBDBCAC,上同理可以定义类似的决策变量。因此,问题中总共有20个决策变量)(jY和),(jiX(4,3,2=i,CDBDBCACABj,=)。问题的目标应当是使总的堵塞时间最小。用),(jiT表示流量),(jiX对应的堵塞时间(即表3中的数据,是对每辆车而言的),我们看看用=4,3,2),(),(ijjiXjiT为道路作为总堵塞时间是否合适。很容易理解:后面加入道路的车辆可能又会造成前面进入道路的车辆的进一步堵塞,如流量为3时,原先流量为2的车辆实际上也只能按),3(jT的时间通过,而不是),2(jT。也就是说,=4,3,2),(),(ijjiXjiT为道路并不是总堵塞时间。但是我们也可以发现,),(jiT关于i是单调增加的,即不断增加的车流只会使以前的堵塞加剧 而 不 可 能 使 以 前 的 堵 塞 减 缓。所 以,关 于 决 策 变 量),(jiX而 言,=4,3,2),(),(ijjiXjiT为道路与我们希望优化的目标的单调性是一致的。因此,可以用=4,3,2),(),(ijjiXjiT为道路作为目标函数进行优化。约束条件有三类:i)每条道路上的总流量Y等于该道路上的分流量X的和;ii)道路交汇处DCBA,(一般称为节点)的流量守恒(即进入量等于流出量);iii)决策变量的上限限制,如2),2(ABX,1),3(ABX,1),4(ABX等。于是对应的优化模型很容易直接写出(略)。-360-(3)模型求解 编写LINGO程序如下:MODEL:TITLE 交通流均衡;SETS:ROAD/AB,AC,BC,BD,CD/:Y;CAR/2,3,4/;LINK(CAR,ROAD):T,X;ENDSETS DATA:!行驶时间(分钟);T=20,52,12,52,20 30,53,13,53,30 40,54,14,54,40;ENDDATA OBJ MIN=SUM(LINK:T*X);!目标函数;!四个节点的流量守恒条件;NODE_A Y(INDEX(AB)+Y(INDEX(AC)=6;NODE_B Y(INDEX(AB)=Y(INDEX(BC)+Y(INDEX(BD);NODE_C Y(INDEX(AC)+Y(INDEX(BC)=Y(INDEX(CD);NODE_D Y(INDEX(BD)+Y(INDEX(CD)=6;!每条道路上的总流量Y等于该道路上的分流量X的和;FOR(ROAD(I):ROAD_LIM SUM(CAR(J):X(J,I)=Y(I);!每条道路的分流量X的上下界设定;FOR(LINK(I,J)|I#EQ#1:BND(0,X(I,J),2);FOR(LINK(I,J)|I#GT#1:BND(0,X(I,J),1);END 可以指出的是,上面4个节点的流量守恒条件中,其实只有3个是独立的(也就是说,第4个条件总可以从其它3个方程推导出来),因此从中去掉任何一个都不会影响到计算结果。(4)结果解释 LINGO的运行结果表明,均衡时道路CDBDBCACAB,的流量分别是4,2,2,2,4(千辆)车。但是要注意,正如我们建立目标函数时所讨论过的,这时得到的目标函数值452并不是真正的总运行和堵塞时间,而是一个用来表示目标函数趋势的虚拟的量,没有太多实际物理意义。事实上,可以求出这时的真正运行时间是:每辆车通过CDBDBCACAB,道路分别需要40,52,12,52,40(min),也就是在图中三 -361-条路线ABCDACDABD,上都需要92min,所以这也说明交通流确实达到了均衡。于是,均衡时真正的总运行时间应该是552926=(千辆车min)。(5)模型讨论 仔细想想就会发现,上面的解并不是最优解,即均衡解并不一定是最优的流量分配方案。为了求出使所有汽车的总运行时间最小的交通流,应该如何做呢?也就是说,这相当于假设有一个权威的机构来统筹安排,最优地分配这些交通流,而不是像求均衡解时那样认为各个个体(每辆车)都可以自己选择道路,自然达到平衡状态。为 了 进 行 统 筹 规 划,我 们 需 要 把 新 增 的 流 量),(jiX(4,3,2=i,CDBDBCACABj,=)造成的实际堵塞时间计算出来(仍按每辆车计算),而不是像上面那样不考虑对原有车流造成的堵塞效应。以道路AB为例。i)当流量为2千辆时,每辆车的通过时间为20min,所以总通过时间是40(千辆车min);ii)当流量增加一个单位(本题中一个单位就是1千辆)达到3千辆时,每辆车的通过时间为30min,所以总通过时间是90(千辆车min);iii)当流量再增加一个单位达到4千辆时,每辆车的通过时间为40min,所以总通过时间是160(千辆车min)。由此可见,流量超过2而不超过3时,单位流量的增加导致的总通过时间的变化为904050(千辆车min);流量超过3而不超过4时,单位流量的增加导致的总通过时间的变化为1609070(千辆车min)。类似地,对所有道路,都可以得到单位流量的增加导致总行驶时间的增量和汽车流量之间的关系(参加表5)。表5 单位流量的增加导致总行驶时间的增量和汽车流量之间的关系 道 路 AB AC BC BD CD 流量2 20 52 12 52 20 2流量3 50 55 15 55 50 总 行 驶 时 间的增量(千辆车 min)3=TARGET;END 求得投资三种股票的比例大致是:A占53,B占36,C占11。风险(方差)为0.02241378。(4)用MATLAB软件对模型进行参数分析 对实际投资人来说,可能不仅希望知道指定的期望投资回报率下的风险(回报率的方差),可能更希望知道风险随着不同的投资回报率是如何变化的,然后作出最后的投资决策。这当然可以通过在上面的模型中不断修改约束中的参数(目前为0.15)来实现,如将0.15改为0.2345,则表示投资回报率希望达到23.45(这几乎是可能达到的最大值了,因为这几乎是三种股票中最大的投资回报率,即股票C的回报率)。可以想到,这时应主要投资在股票C上。实际求解一下,可以知道最优解中投资股票C的份额大约是99.6(剩余的大约0.4投资在股票B上)。目前LINGO软件还没有二次规划灵敏度分析的功能。下面我们利用MATLAB软件进行灵敏度分析,回报率的取值区间为0.09,0.234,变化步长为0.002。编写程序如下:clc,clear load data2.txt,load data3.txt h=reshape(data3,3,3);a=data2;solution=;target=0.09;hold on while target=TARGET;END 计算结果为,投资A占8.7,B占42.9,C占14.3,D(国库券)占34.1,风险(方差)为0.02080347。与例5中的风险(方差为0.02241378)比较,无风险资产的存在可以使得投资风险减少。虽然国库券的收益率只有5,比希望得到的收益率15小很多,但在国库券上的投资要占到34.1,其原因就是为了减少风险。现在,我们把上面模型中的期望收益减少到10,即把数据段中的语句“TARGET=0.15”改为“TARGET=0.10”,重新求解模型。计算结果如下:投资A占4.3,B占21.4,C占7.2,D(国库券)占67.1,此时风险(方差为0.0052)进一步下降。请特别注意:你能发现这个结果(这里不妨称为结果2)与刚才“TARGET=0.15”的结果(这里不妨称为结果1)有什么联系吗?仔细观察这两个结果,可以发现:结果2中投资在有风险资产(股票CBA,)上的比例大约都是结果1中相应的比例的一半。也就是说,无论你的期望收益和风险偏好如何,你手上所持有的风险资产本身相互之间的比例居然是不变的!变化的只是投资于风险资产与无风险资产之间的比例。有趣的是,这一现象在一般情况下也是成立的,一般称为“分离定理”,即风险资产之间的投资比例与期望收益和风险偏好无关。1981年诺贝尔经济学奖得主Tobin教授之所以获奖,很大一部分原因就是因为他发现了这个重要的规律。也正是由于有这样一个重要结果,我们在下面各节的讨论中就不再考虑存在无风险资产的情形了,而只考虑确定风险资产之间的投资比例。2.3 考虑交易成本的投资组合模型 例7 继续考虑例5(期望收益仍定为15)。假设你目前持有的股票比例为:股票A占50,B占35,C占15。这个比例与例5中得到的最优解有所不同。实际股票市场上每次股票买卖通常总有交易费,例如按交易额的1收取交易费,这时你是否仍需要对所持的股票进行买卖(换手),以便满足最优解的要求?(1)建立模型 -369-仍用决策变量21,xx和3x分别表示投资人应当投资股票CBA、的比例,进一步假设购买股票CBA、的比例为21,yy和3y,卖出股票CBA、的比例为21,zz和3z。其中,iy和iz(3,2,1=i)中显然最多只能有一个严格取正数,且 0,iiizyx,3,2,1=i (23)由于交易费用的存在,这时约束1321=+xxx不一定还成立(只有不进行股票买卖,即0321321=zzzyyy时,这个约束才成立)。其实,这个关系式的本质是:当前持有的总资金是守恒的,在有交易成本(1)的情况下,应当表示成如下形式:1)(01.03131=+=iiiiizyx (24)另外,考虑到当前持有的各只股票的份额iiiyxc,与iz(3,2,1=i)之间也应该满足守恒关系式 iiiizycx+=,3,2,1=i (25)这就是新问题的约束条件,模型的其它部分不用改变。(2)模型求解 问题对应的LINGO程序如下:MODEL:Title 考虑交易费的投资组合模型;SETS:STOCKS/A,B,C/:C,Mean,X,Y,Z;STST(Stocks,stocks):COV;ENDSETS DATA:!股票的初始份额;c=0.5 0.35 0.15;TARGET=0.15;Mean=file(data2.txt);COV=file(data3.txt);ENDDATA OBJ MIN=sum(STST(i,j):COV(i,j)*x(i)*x(j);ONE SUM(STOCKS:X+0.01*Y+0.01*Z)=1;-370-TWO SUM(stocks:mean*x)=TARGET;FOR(stocks:ADD x=c+y-z);END 在这个LINGO模型中,股票C是原始集合“STOCKS”的一个元素,不会因为与集合的属性C同名而混淆。这是LINGO新版本比LINGO旧版本的一个改进之处。2.4 利用股票指数简化投资组合模型 例8 继续考虑例5(期望收益率仍定为15)。在实际的股票市场上,一般存在成千上万的股票,这时计算两两之间的相关性(协方差矩阵)将是一件非常费事甚至不可能的事情。例如,1000只股票就需要计算49950021000=C个协方差。能否通过一定方式避免协方差的计算,对模型进行简化呢?例如,例5中还给出了当时股票指数的信息,但我们到此为止一直没有利用。我们这一节就考虑利用股票指数对前面的模型进行修改和简化。(1)问题分析 可以认为股票指数反映的是股票市场的大势信息,对具体每只股票的涨跌通常是有显著影响的。我们这里最简单地假设每只股票的收益与股票指数成线性关系,从而可以通过线性回归方法找出这个线性关系。(2)线性回归 具体地说,用M表示股票指数(也是一个随机变量),其均值为)(0MEm=,方差为)(20MDs=。根据上面的线性关系的假定,对某只具体的股票i,其价值iR(随机变量)可以表示成 iiiieMbuR+=(26)其中iu和ib需要根据所给数据经过回归计算得到,ie是一个随机误差项,其均值为0)(=ieE,方差为)(2iieDs=。此外,假设随机误差项ie与其它股票j(ij)和股票指数M都是独立的,所以0)()(=MeEeeEiji。先看看如何根据所给数据经过回归计算得到iu和ib。记所给的12年的数据为,)()(kikRM,(12,2,1L=k),线性回归实际上是要使误差的平方和最小,即要解如下优化问题:-371-=+=1212)()(1212)(|)(minkkikiikkiRMbue,3,2,1=i (27)对这里给出的三种股票,可以编写如下LINGO程序求出线性回归的系数iu和ib(同时也在计算(CALC)段计算M的均值0m和方差20s,标准差0s的值):MODEL:Title 线性回归模型;SETS:YEAR/1.12/:M;STOCKS/A,B,C/:u,b,s2,s;temp/1.5/;tmatrix(YEAR,temp):tm;link(YEAR,STOCKS):R,e;ENDSETS DATA:num=?;tm=1943 1.300 1.225 1.149 1.258997 1944 1.103 1.290 1.260 1.197526 1945 1.216 1.216 1.419 1.364361 1946 0.954 0.728 0.922 0.919287 1947 0.929 1.144 1.169 1.057080 1948 1.056 1.107 0.965 1.055012 1949 1.038 1.321 1.133 1.187925 1950 1.089 1.305 1.732 1.317130 1951 1.090 1.195 1.021 1.240164 1952 1.083 1.390 1.131 1.183675 1953 1.035 0.928 1.006 0.990108 1954 1.176 1.715 1.908 1.526236;ENDDATA CALC:for(tmatrix(i,j)|j#ge#2#and#j#le#4:R(i,j-1)=tm(i,j);for(tmatrix(i,j)|j#eq#5:M(i)=tm(i,j);mean0=sum(year:M)/size(year);s20=sum(year:sqr(M-mean0)/(size(year)-1);s0=sqrt(s20);ENDCALC -372-OBJ MIN=sum(stocks(i)|i#eq#num:s2(i);for(link(k,i)|i#eq#num:ERROR e(k,i)=R(k,i)-u(i)-b(i)*M(k);for(stocks(i)|i#eq#num:VAR s2(i)=(sum