1、1钢管的订购和运输优化模型摘要本文建立的多元非线性优化模型。问题一在保证天然气管道铺设可以顺利实施的情况下,给出了钢管的订购与运输总费用最小的方案。在求钢管由钢厂运输到站点的费用和铺设钢管时产生的运输费,根据图一,我们通过深度优先遍历的方法对整个图一进行路径搜索,然后根据每条搜索到的路径上的铁路和公路上的不同权重,找到了各个钢厂到各个天然气管道上的站点的最佳路径。对于整个优化过程我们给出了相关的算法,并用 matlab 软件编程,经过一系列计算之后,得出了最优的订购与运输方案。对于问题 1,我们求得的最优解为(具体方案见表五): 1S23S45S67S总费用800 800 1000 0 119
2、0 1181 0 61028.对于问题 2 我们经过计算比较得出: 钢管销价的变化对购运计划和总费6S用影响最大。 的生产上限的变化购运计划和总费用影响最大。1S对于问题 3,当天然气管道呈现的是一个树状图的时候,我们得到的最优解为(具体方案见表六): 1S234S56S7总费用800 800 1000 0 1450 1853 0 61048.关键字:非线性优化 深度优先遍历 最佳路径2一、问题重述要铺设一条 的输送天然气的主管道, 如图一所示(见下1521AA页)。经筛选后可以生产这种主管道钢管的钢厂有 。图中粗线表示铁721,S路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来
3、有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位 km)。为方便计,1km 主管道钢管称为 1 单位钢管。一个钢厂如果承担制造这种钢管,至少需要生产 500 个单位。钢厂 在指iS定期限内能生产该钢管的最大数量为 个单位,钢管出厂销价 1 单位钢管为is万元,如下表:ip1 2 3 4 5 6 7is800 800 1000 2000 2000 2000 3000ip160 155 155 160 155 150 1601 单位钢管的铁路运价如下表:里程(km) 300 301350 351400 401450 451500运价(万元) 20 23
4、26 29 32里程(km) 501600 601700 701800 801900 9011000运价(万元) 37 44 50 55 601000km 以上每增加 1 至 100km 运价增加 5 万元。公路运输费用为 1 单位钢管每公里 0.1 万元(不足整公里部分按整公里计算) 。钢管可由铁路、公路运往铺设地点(不只是运到点 ,而是管道1521,A全线) 。(1)请制定一个主管道钢管的订购和运输计划,使总费用最小(给出总费用)。(2)请就(1)的模型分析:哪个钢厂钢管的销价的变化对购运计划和总费用影响最大,哪个钢厂钢管的产量的上限的变化对购运计划和总费用的影响最大,并给出相应的数字结果
5、。(3)如果要铺设的管道不是一条线,而是一个树形图,铁路、公路和管道构成网络,请就这种更一般的情形给出一种解决办法,并对图二按(1)的要求3给出模型和结果。A13258010103120124270 1088107062703020 2030450104 301750 606194 205201680480 300220 2104205006003060195202720690520170690462160 320160110290115011001200A2A3A4A5A6A11A711A11A8A11A911A11A10A11A12A13A14A15S1S2S3S4S5S6S7图一4二、模
6、型假设1、假设沿管道或者原来有公路,或者建有施工公路;2、运费只按铁路、公路里程收取,即不考虑火车、汽车由于停靠站等其他一切外因带来的费用;3、钢管在铺设过程中以 1km 为单位进行铺设;4、钢管可由铁路、公路运往铺设路线任一地点;5、所有钢管在指定期限内都能按时生产并运送指定地点;6、钢管铺设过程中由站点向左右两边进行铺设。三、符号说明:第 个厂 ;iSi72,1:第 个站点 ;jAj5j: 向 运送的钢管量 单位(km) ;ijmij: 在指定期限内的最大生产量 单位(km) ;imaxSA13 2 580 10 10 3120 12 42 70 1088 1070 62 70 30 20
7、 2030450104 301750 606194 205 201 680 480 300 220 210420 500600 3060 195 202 720690 520170690 462160 320 160 110 2901150 1100 1200 A19130 190 260 100A2 A3 A4 A5 A6 A7 A8A11 A9 A10 A11 A12 A13 A14 A15S1S2 S3 S4 S5 S6 S7A16 A17 A18 A20 (A21)图二5: 向右铺设的钢管量 单位(km) ;jRjA: 向左铺设的钢管量 单位(km) ;jLj: 到 间的距离 单位(k
8、m ) ;jDj1j142,j:管道全线总长 单位(km) ;0: 钢管出厂销价 单位(万元/单位) ;iPiS7,i: 向 运送一单位钢管所需的铁路费 单位(万元/单位) ;ijTijA: 向 运送一单位钢管所需的公路费 单位(万元/ 单位) ;ijDij:购买钢管所花的总费用;M:由厂到站点所需运输总费;Y:由站点到铺设地点所需运输总费;0:订购和运输钢管所需总费用 单位(万元) 。W四、问题分析问题一是在一定约束条件下的非线性优化问题,由题意知,拟建立以总费用为目标函数来寻求最优解。总费用 由钢管的购买费、厂到站点的运输费以W及站点到铺设地点的运输费三部分组成。 一、钢管的购买费可由在每
9、个厂的购买量与每个厂的出厂销价的线性运算得到 。在每个厂购买的钢管量必须大于500km ,否则则不在该厂购买。可以构造一个 的矩阵 ,那么当 为 0 时,71Si表示不在第 个钢厂购买,否则则在第 个钢厂购买大于 500km 的钢量。二、要i i求得每个钢厂到站点的运输费需先知道每个厂到各个站点的钢管输送量,以及所选择的路线即铁路总长和公路总长,所以需要首先计算出各个钢厂到每个站点的最佳运输路径,使得平均单位公里的运输费用最小。但是由于铁路每公里的运输费用不是线性变化,而是变化不均匀的分段函数。在这里,我们利用深度优先遍历,找到某个厂到达各个站点的所有路径,然后根据每条路径的铁路和公路里程数计
10、算出平均每公里运输费用最小的一条。以此类推,计算出所有钢厂到所有站点的最佳路径。 三、在站点到铺设地点的运输费问题上,如果我们认为车边向前走边进行铺设,即边走边将钢管放下,那么就需要通过积分来计算。但是,尽管用积分算下来结果会很精确,但在实际中不可能这样实施。6另外,这也与题目中不足整公里的按整公里计算相矛盾。所以,我们假设以1km 为单位进行铺设,即铺设中车每向前开 1km 便将 1km 的钢管放下。由于铺设管道是线型的,除了两个端点外,每个站点需要往两边进行铺设管道。所以,假设第 个站点往左、右边铺设管道为 和 公里,则由站点到铺设地点的运j jRjL输费就可以通过等差数列求和得到。问题二
11、即为对问题一中模型的灵敏度分析,在讨论各厂的钢管销价和生产上限对购运计划和总费用的影响时,只让其中一个量变化,其他一切条件皆不变,即逐个变量单独分析。问题三即为问题一中模型的推广,在问题一的基础上将站点向左右两边铺设变为向三个方向铺设,按问题一处理即可。五、模型建立(问题一)总费用 由钢管的购买费 、厂到站点的运输费 以及站点到铺设地点的WMY运输费 三部分组成,则0Y0Y在第 个厂的购买费应为 15 个站点在第 个厂的购买总量与该厂销价的乘i i积总和,即 ,则总购买费15jjiPM715)(ijjiPm第 个厂向第 个站点的运输费为运送量 与运送 1 单位所需铁路费和公ij ij路费的和的
12、乘积,第 个厂向各个站点运送钢管的总运费即为 ,i 51jijijGTm则各厂到站点的运输费715ijijijGTmY要算出钢管由站点运送到铺设地点的费用 需知道钢管按何种方式进行铺0Y设的。在问题分析里一讨论边走边铺与实际不符,且有违题目条件,所以我们假设钢管在铺设过程中以 1km 为单位进行铺设,且由站点向两边进行铺设,则可由等差数列求和公式得到,即0Y 152140 1.0.02jjjjjj LRY7由于一个钢厂如果承担制造这种钢管,至少需要生产 500 个单位,且各厂在指定期限内有生产上线,则在第 个厂的购买总量需满足i或ijijmax501150jij钢管由站点向左右两边进行铺设,则
13、第 个站点向右铺设部分与第 个1j站点向左铺设部分之和应为两站点之间的管道长度,且第一个站点向左铺设部分与最后一站点向右铺设部分都为 0,即jjjDLR1142,j015第 站点向左铺设部分与向右铺设部分之和应为七个厂向第 站点输送钢j j管总量,即71iijjjmLR152,j综合考虑钢管的购买费 、厂到站点的运输费 以及站点到铺设地点的运MY输费 ,钢管的订购和运输优化模型建立如下:0Y目标函数min + +( )W715)(ijjiPm715ijijijGT15214jjjjjj LR.0或ijijax501150jijm71iijjjLR2,js.t jjjD 14,j015R六、模型
14、求解8由于铁路、公路相互交错,无法直接选出钢厂到站点的费用最小路线,所以此处我们采用深度优先遍历方法。首先建立一个 39 维数组,将图一中 39 个交点两两之间有铁路、公路连接的用具体路线长写入数组,且铁路用负数表示,公路用正数表示,而没有路线连接的用无穷大代替,最后换算成到各站点的铁路、公路总费。全过程通过 matlab 编程完成(程序见附录 ) , 。表一 到 的最小费用(单位:万元/单位)iSiA1S234S56S71A170.7 215.7 230.7 260.7 255.7 265.7 275.72160.3 205.3 220.3 250.3 245.3 255.3 265.331
15、40.2 190.2 200.2 235.2 225.2 235.2 245.24A98.6 171.6 181.6 216.6 206.6 216.6 226.6538 111 121 156 146 156 166620.5 64.6 105.5 139.6 130.5 140.5 150.57A3.1 86 96 131 121 131 141821.2 71.2 86.2 116.2 111.2 121.2 131.2964.2 114.2 48.2 84.2 79.2 84.2 99.210A92 142 82 62 57 62 7696 146 86 51 33 51 661210
16、6 156 96 61 51 45 563A121.2 171.2 111.2 76.2 71.2 26.2 38.214128 178 118 83 73 11 265142 192 132 97 87 28 29因为 matlab 无法直接对约束条件 或 进行处理,ijijmax501150jij所以我们先将此条件改为 ,则原模型变为ijijmax15min + +( )W715)(ijjiP715ijijijGT15214jjjjjj LR.0ijijmax1571iijjjLR152,js.t jjjD 4,j015Rijm72,15, ij通过 matlab 编程(程序见附录)计算结
17、果见表二表二 各厂的生产量及总费用(生产量可小于 500) (单位:单位 、万元)1S23S45S67S总费用800 800 1000 0 1190.5 1135.5 245 610254.由表二可知, 、 的生产量小于 500 单位。由于 的生产量等于 0,所4S7 4S以不用考虑,直接取为 0;而在 的生产量问题上,有两种处理方式:7S(1) 的生产量为 0;7(2) 的生产量大于 500 单位。S两种处理方式计算结果见表三10表三 各厂的生产量及总费用(单位:单位 、万元)1S23S45S67S总费用=0 800 800 1000 0 1190.5 1180.5 0 61028.500
18、800 800 1000 0 1185.5 885.5 500 9通过以上两种方式的比较,购买和运输最小总费用 min W= (万610278.元)具体的订购和运输方案见表四。表四 问题一订购和运输方案(不足 1km 的按整数计) (单位:单位 、万元)1S23S45S67S订购量 800 800 1000 0 1190 1181 01A0 0 0 0 0 0 020 179 0 0 0 0 030 137 141 0 230 0 04A149 74 79 0 166 0 05186 110 116 0 203 0 06200 0 0 0 0 0 07A265 0 0 0 0 0 080 30
19、0 0 0 0 0 090 0 664 0 0 0 010A0 0 0 0 176 176 00 0 0 0 415 0 0120 0 0 0 0 86 01113A0 0 0 0 0 333 040 0 0 0 0 621 0150 0 0 0 0 165 0订购总量 5171 总费用 61278.六灵敏度分析(问题二)由于本案例中对模型结果产生影响的因素有很多,所以我们在此取个关键的参数进行了灵敏度分析。模型对这些参数的敏感性反映了各种因素影响结果的显著性程度。通过对模型参数的敏感性分析,又可以反映和检验模型的实际合理性。由灵敏度的定义知,灵敏度是指系统中的参数或外扰的微小摄动对系统某特性
20、的影响程度,其计算公式如下:灵敏度= 参 数 变 化 的 百 分 数变 化 的 百 分 数参 数 变 化 引 起 系 统 特 性(1) 对钢厂钢管销价的灵敏度分析钢厂钢管的销价是此问题的一个重要因素,钢铁价格的高低可以说直接影响着总费用和够运计划。现在对价格做灵敏度分析,其他一切条件不变,且在讨论 的销价变化带来的影响时其余各厂的销价不变。我们分别使各钢厂的价iS格单独增加 5 万元/单位和减少 5 万元/单位,并分别带入上述模型计算,得到此时的总费用,再利用灵敏度公式计算各种情况的影响程度。结果如下表:表四 各钢厂销价变化产生的影响(单位: )万 元6101S23S45S67S总费用1.28
21、26 1.2826 1.2836 1.2786 1.2835 1.2846 1.2786+5 万元/单位 灵敏度0.100110.096980.121220 0.118800.140780总费用1.2746 1.2746 1.2736 1.2786 1.2717 1.2707 1.2786-5 万元/单位 灵敏度0.10010950.096980.121220 0.167290.18535012由以上数据可知, 钢管销价的变化对购运计划和总费用影响最大。6S(2)对钢厂钢管产量上限的灵敏度分析钢管的供给量也是一个重要的因素,供给量上限的大小将间接影响着总费用和够运计划。在问题一中模型的基础上,
22、由于只有 、 、 的钢管购运量1S23达到了生产上限,其余各厂的购运量都离生产上限较远,因此能够对总费用和购运计划产生影响的只有 、 、 三个钢厂。我们分别单独给 、 、1S23 1S2三钢厂的上限增加 50 个单位和减少 50 个单位,同时保持其他两个钢厂生产3S上限和其他一切条件不变。将各种情况带入问题一的模型中计算,再分别求出各自的灵敏度。结果见下表:表五 钢厂生产上限的变化带来的影响(单位: )万 元6101S2S3S总费用 1.2735 1.2769 1.2774+50 单位灵敏度 0.0641 0.0215 0.0191总费用 1.2838 1.2804 1.2799-50 单位灵
23、敏度 0.0648 0.0223 0.0200由上表知, 的生产上限的变化购运计划和总费用影响最大。1S七模型的评价与推广(问题三)本模型经过合理的分析,精确的数据输入以及准确的 MATLAB 编程,把所有影响总费用的因素结合在一起,经过优化,找到的最好方案是非常具有可信性的。只是本模型还是建立在一些基本假设上的,而在实际生活中,由于转运费等其他因素而带来的影响是不可忽略的,因此,本模型还是有待改进的。 1.如果天然气管道铺设的路线不是一条线,而是各种类型的树形图或者其他更复杂的形状,或者有 n 个钢厂,n 个火车站,n 个站点,通过本模型的思想,都是可以解决问题的。如本题中的问题三,同样通过
24、找到钢厂与各个站点之间的联系,先确定最优运输路线,结合各类约束条件,利用 MATLAB 编程,就可以得到最小的总费用。与问题一不同的是此时有的站点可以向三个方向进行铺设所以在问题一模型的基础上稍作改变即可,在此假设各站点向三方向铺设, 代表第 j 站点向第jkDk 方向铺设的钢管量(k=1,2,3) 。则模型建立如下:目标函数13min + +( )W712)(ijjiPm712ijijijGT1.02213jkjkjD或ijijax5021210jijm7131iijjjkD,s.t 0201hijm72,1, ij以上模型求解时在 或 的处理上同问题一一样,ijijmax5021210ji
25、j通过 matlab 编程(程序见附录)计算求得最小总费用 W= 万元,61048.具体方案见表六。表六 问题三订购和运输方案(不足 1km 的按整数计) (单位:单位 、万元) 1S23S45S67S1A0 5 0 0 0 0 020 175 0 0 0 0 030 123 138 0 246 0 04A150 70 87 0 161 0 05190 127 70 0 228 0 06195 0 0 0 6 0 07A265 0 0 0 0 0 0148A0 300 0 0 0 0 090 0 665 0 0 0 0100 0 0 0 188 162 0A0 0 0 0 416 0 0120
26、 0 0 0 0 86 030 0 0 0 0 333 014A0 0 0 0 0 622 050 0 0 0 0 165 0160 0 40 0 0 0 07A0 0 0 0 205 0 0180 0 0 0 0 65 090 0 0 0 0 70 020A0 0 0 0 0 250 010 0 0 0 0 100 0订购量 800 800 1000 0 1450 1853 0订购总量 5903 总费用 6148.2.本建模的思想不仅可以用于钢管的运输来进行天然气管道的铺设,还可以用于其他领域诸如煤炭的运输来提供电力等。参考文献【1】 陈宝林,最优化理论与算法,清华大学出版社,1989【2】
27、 裘宗燕,数学软件系统的应用及程序设计,北京大学出版社,1994【3】 许波, Matlab 工程数学应用 ,清华大学出版社,200115附录1function f=result(t)%求解问题1ticx0=zeros(8,15);vlb=zeros(8,15);16m=zeros(1,7);s=800 800 1000 2000 2000 2000 3000;s(t)=s(t)-50;N=1 1 1 0 1 1 0; %每公里钢管从 Si到达Ai站点的最小费用C=330.7 320.3000 300.2000 258.6000 198.0000 180.5000 163.1000 181.2
28、000 224.2000 252.0000 256.0000 266.0000 281.2000 288.0000 302.0000;370.7 360.3000 345.2000 326.6000 266.0000 249.6000 241.0000 226.2000 269.2000 297.0000 301.0000 311.0000 326.2000 333.0000 347.0000;385.7 375.3000 355.2000 336.6000 276.0000 260.5000 251.0000 241.2000 203.2000 237.0000 241.0000 251.0
29、000 266.2000 273.0000 287.0000;420.7 410.3000 395.2000 376.6000 316.0000 299.6000 291.0000 276.2000 244.2000 222.0000 211.0000 221.0000 236.2000 243.0000 257.0000;410.7 400.3000 380.2000 361.6000 301.0000 285.5000 276.0000 266.2000 234.2000 212.0000 188.0000 206.0000 226.2000 228.0000 242.0000;415.7
30、 405.3000 385.2000 366.6000 306.0000 290.5000 281.0000 271.2000 234.2000 212.0000 201.0000 195.0000 176.2000 161.0000 17178.0000;435.7 425.3000 405.2000 386.6000 326.0000 310.5000 301.0000 291.2000 259.2000 236.0000 226.0000 216.0000 198.2000 186.0000 162.0000;options=optimset(LargeScale,off,Algorit
31、hm ,active-set,MaxFunEvals ,50000);%,Tolx,1.0000e-032);x,f=fmincon(myfun,x0,vlb,mycon,options,C,N,s);for i=1:7for j=1:15m(i)=m(i)+N(i)*x(i,j);end;end;x,m,fb=(f-1278600)/1278600*(s(t)+50)/50tocfunction f=myfun(XX,C,N,s)%问题1的目标函数x=XX(1:7,1:15);rl=XX(8,1:15);L=104 301 750 606 194 205 201 680 480 300 22
32、0 210 420 500;18f=0;for i=1:7for j=1:15f=f+N(i)*x(i,j)*C(i,j);%运输费和成本费end;end;for i=1:14f=f+(rl(i)*(rl(i)+1)/2+(L(i)-rl(i)*(L(i)-rl(i)+1)/2)*0.1;%铺设时的运输费end;ffunction c,ceq=mycon(XX,C,N,s)%问题1的约束条件x=XX(1:7,1:15);rl=XX(8,1:15);L=104 301 750 606 194 205 201 680 480 300 220 210 420 500;m=zeros(1,7);a=z
33、eros(1,15);cc=0;19for i=1:7for j=1:15m(i)=m(i)+N(i)*x(i,j);end; c(i)=m(i)-s(i);cc=cc+m(i);end;for i=1:14c(i+7)=rl(i)-L(i);end;for i=2:14for j=1:7a(i)=a(i)+N(j)*x(j,i);end;ceq(i-1)=a(i)-rl(i)+rl(i-1)-L(i-1);end;t1=0;t2=0;for i=1:7t1=t1+N(i)*x(i,1);t2=t2+N(i)*x(i,15);end;ceq(14)=t1-rl(1);20ceq(15)=rl(
34、15);ceq(16)=cc-5171;附录2function f=result2%求解问题3x0=zeros(10,21);vlb=zeros(10,21);m=zeros(1,7);N=1 1 1 0 1 1 0;tic%每公里钢管从 Si到达Ai站点的最小费用C=330.7 320.3000 300.2000 258.6000 198.0000 180.5000 163.1000 181.2000 224.2000 252.0000 256.0000 266.0000 281.2000 288.0000 302.0000 220 255 260 265 275 290;370.7 360
35、.3000 345.2000 326.6000 266.0000 249.6000 241.0000 226.2000 269.2000 297.0000 301.0000 311.0000 326.2000 333.0000 347.0000 265 300 305 310 320 335;385.7 375.3000 355.2000 336.6000 276.0000 260.5000 251.0000 241.2000 203.2000 237.0000 241.0000 251.0000 266.2000 273.0000 287.0000 199 240 245 250 260 2
36、70;420.7 410.3000 395.2000 376.6000 316.0000 299.6000 291.0000 276.2000 244.2000 222.0000 211.0000 221.0000 236.2000 243.0000 257.0000 240 210 215 220 230 240;21410.7 400.3000 380.2000 361.6000 301.0000 285.5000 276.0000 266.2000 234.2000 212.0000 188.0000 206.0000 226.2000 228.0000 242.0000 230 187
37、 205 205 220 230;415.7 405.3000 385.2000 366.6000 306.0000 290.5000 281.0000 271.2000 234.2000 212.0000 201.0000 195.0000 176.2000 161.0000 178.0000 230 200 187 194 170 150;435.7 425.3000 405.2000 386.6000 326.0000 310.5000 301.0000 291.2000 259.2000 236.0000 226.0000 216.0000 198.2000 186.0000 162.
38、0000 255 225 210 215 192 186;options=optimset(LargeScale,off,Algorithm ,active-set,MaxFunEvals ,50000);%,Tolx,1.0000e-032);x,f=fmincon(myfun2,x0,vlb,mycon2,options,C,N);for i=1:7for j=1:21m(i)=m(i)+N(i)*x(i,j);end;end;x, m,fff=ceil(x)22tocfunction f=myfun2(XX,C,N)%问题3的目标函数x=XX(1:7,1:21);rl=XX(8:10,1
39、:21);f=0;for i=1:7for j=1:21f=f+N(i)*x(i,j)*C(i,j);%钢管费和运输费end;end;%铺设时的运输费for i=2:14f=f+(rl(1,i)*(rl(1,i)+1)/2+rl(2,i)*(rl(2,i)+1)/2)*0.1;end;f=f+(rl(1,19)*(rl(1,19)+1)/2+rl(2,19)*(rl(2,19)+1)/2)*0.1;f=f+(rl(1,20)*(rl(1,20)+1)/2+rl(2,20)*(rl(2,20)+1)/2)*0.1;%19,20f=f+(rl(1,1)*(rl(1,1)+1)/2+rl(2,15)
40、*(rl(2,15)+1)/2)*0.1;%1,1523f=f+(rl(1,16)*(rl(1,16)+1)/2+rl(1,18)*(rl(1,18)+1)/2+rl(1,21)*(rl(1,21)+1)/2)*0.1;%16,18,21f=f+(rl(3,9)*(rl(3,9)+1)/2+rl(3,11)*(rl(3,11)+1)/2)*0.1;%9,11f=f+(rl(1,17)*(rl(1,17)+1)/2+rl(2,17)*(rl(2,17)+1)/2+rl(3,17)*(rl(3,17)+1)/2)*0.1;%17function c,ceq=mycon2(XX,C,N)%问题3的约
41、束条件x=XX(1:7,1:21);rl=XX(8:10,1:21);s=800 800 1000 2000 2000 2000 3000;L=104 301 750 606 194 205 201 680 480 300 220 210 420 500 42 10 130 190 260 100;m=zeros(1,7);a=zeros(1,21);cc=0;for i=1:7for j=1:21m(i)=m(i)+N(i)*x(i,j);24end; c(i)=m(i)-s(i);cc=cc+m(i);end;for i=1:21for j=1:7a(i)=a(i)+N(j)*x(j,i)
42、;end;ceq(i)=a(i)-rl(1,i)-rl(2,i)-rl(3,i);end;for i=1:14ceq(i+21)=rl(1,i)+rl(2,i+1)-L(i);end;ceq(36)=rl(3,9)+rl(1,16)-L(15);ceq(37)=rl(3,11)+rl(1,17)-L(16);ceq(38)=rl(2,17)+rl(1,18)-L(17);ceq(39)=rl(3,17)+rl(1,19)-L(18);ceq(40)=rl(2,19)+rl(1,20)-L(19);ceq(41)=rl(2,20)+rl(1,21)-L(20);25ceq(42)=rl(1,15
43、);ceq(43)=rl(2,1);for i=1:8ceq(43+i)=rl(3,i);end;ceq(52)=rl(3,10);for i=12:16ceq(52+i-11)=rl(3,i);end;ceq(58)=rl(2,16);ceq(59)=rl(2,18);ceq(60)=rl(3,18);ceq(61)=rl(3,19);ceq(62)=rl(3,20);ceq(63)=rl(2,21);ceq(64)=rl(3,21);ceq(65)=cc-5903;%求解最省路径for i=1:39for j=1:39if i=j26a(i,j)=0;elsea(i,j)=inf;end;
44、end;end;a(1,2)=104;a(2,3)=301;a(3,4)=750;a(4,5)=606;a(5,6)=194;a(6,7)=205;a(7,8)=201;a(8,9)=680;a(9,10)=480;a(10,11)=300;a(11,12)=220;a(12,13)=210;a(13,14)=420;a(14,15)=500;a(2,27)=3;a(3,28)=2;a(4,25)=600;a(5,29)=10;a(6,30)=5;a(7,31)=10;a(7,32)=31;a(8,24)=12;a(9,23)=42;a(10,22)=70;a(11,33)=10;a(12,3
45、5)=10;a(13,19)=62;a(14,36)=110;a(14,18)=30;a(15,16)=20;27a(15,17)=20;a(16,17)=-30;a(17,18)=-290;a(18,19)=-160;a(18,36)=-70;a(19,20)=-320;a(19,35)=260;a(19,36)=100;a(33,35)=190;a(20,33)=130;a(20,21)=-160;a(20,35)=-70;a(21,22)=-170;a(21,33)=-88;a(21,37)=-690;a(22,23)=-520;a(23,24)=-720;a(23,38)=-690;a
46、(24,25)=-1100;a(24,32)=-202;a(24,39)=-1200;a(25,26)=-1150;a(26,27)=-450;a(26,28)=-80;a(29,30)=-306;a(30,31)=-195;a(31,32)=-20;a(33,34)=-462;for i=1:39for j=1:i28a(i,j)=a(j,i);end;end;sw=32 39 38 37 34 36 16;aw=23 33 20 35 19 36;T,G=getminArr(a,sw,aw);%a=0 -9 inf 3 inf ;-9 0 2 inf 7;inf 2 0 2 4;3 inf
47、 2 0 inf;inf 7 4 inf 0;findPath(a,1,4,0)%T,G=getminpath(a,16,10);%Gunction T,G=getminArr(a,sw,aw)i,m=size(sw)j,n=size(aw);for i=1:mfor j=1:nT(i,j),G(i,j)=getminpath(a,sw(i),aw(j);end;end;TGfunction T,G=getminpath(a,beg,over)29mn=size(a,1);allPaths=findPath(a,beg,over,0);n=size(allPaths,1);Idmin=1;Sm
48、in=inf;t=zeros(1,n);g=zeros(1,n);m=zeros(1,n);for i=1:nfor j=2:mn+1if allPaths(i,j)=0break;end;w=a(allPaths(i,j-1),allPaths(i,j);if w0g(i)=g(i)+w;end;if allPaths(i,j)=over30break;end;end;end;for i=1:nm(i)=getTC(t(i),1)+getGC(g(i),1);if m(i)SminIdmin=i;Smin=m(i);end;end;T=t(Idmin);G=g(Idmin);function possiablePaths = findPath(Graph, partialPath, destination, partialWeight)% findPath按深度优先搜索所有可能的从partialPath出发到destination的路径,这些路径中不包含环路% Graph: 路网图,非无穷或0表示两节点之间直接连通,矩阵值就为路网权值% partialPath: 出发的路径,如果 partialPath就一个数,表