动态规划 - Floyd算法求最短路径 - (Matlab建模)
????Floyd算法又稱為弗洛伊德算法、插點法,是一種利用動態規劃的思想尋找給定的加權圖中多源點之間最短路徑的算法,與Dijkstra算法類似。該算法名稱以創始人之一、1978年圖靈獎獲得者、斯坦福大學計算機科學系教授羅伯特·弗洛伊德命名。
課題名稱:設備更新,使總的支付費用最少
????工廠的某臺機器可連續工作四年,決策者每年年初都要決定機器是否需要更新。若更新,就要支付購置費用;若不更新,則要支付維修與運行費用,且隨著機器使用年限的增加維修與運行費用逐年增多。計劃期(4年)中每年年初的購置價格及各個年限內維修與運行費用由表1給出,
(1)試制訂今后4年的機器更新計劃,使總的支付費用最少。
表1
| 第 i 年初 | 第1年初 | 第2年初 | 第3年初 | 第4年初 |
| 購置費(萬元) | 2.5 | 2.6 | 2.8 | 3.1 |
| 使用年限 | 1 | 2 | 3 | 4 |
| 使用年限下對應的每年的維修與運行費(萬元) | 1 | 1.5 | 2 | 4 |
可將此問題看成一個最短路問題。設 v1 和 v5 分別表示計劃期的始點和終點(v5 可理解為第4年年末)。下圖中各邊的值(vi,vj)表示在第 i 年初購進的機器使用到第 j 年初(即第 j-1 年底),(vi,vj)的值可由表1的數據計算得到。因此,把求最優設備更新問題轉化為求從 i 到 j 的最短路問題。
(vi,vj)的值計算示例:
(v1,v2) = 2.5(第1年初的購置費)+1(使用第一年的維修費) = 3.5;
(v3,v5) = 2.8(第3年初的購置費)+1(使用第一年的維修費)+1.5(使用第二年的維修費) = 5.3;
? ? ? ? ? ? ?
Matlab求解
Matlab程序:
a=[0 3.5 5 7 11;inf 0 3.6 5.1 7.1;inf inf 0 3.8 5.3;inf inf inf 0 4.1;inf inf inf inf 0]; n=size(a,1); D=a; path=zeros(n,n); for i=1:nfor j=1:nif D(i,j)~=infpath(i,j)=j;endend end for k=1:nfor i=1:nfor j=1:nif D(i,k)+D(k,j)<D(i,j)D(i,j)=D(i,k)+D(k,j);path(i,j)=path(i,k);endendend end D;path;Matlab運行結果:
D =0 3.5000 5.0000 7.0000 10.3000Inf 0 3.6000 5.1000 7.1000Inf Inf 0 3.8000 5.3000Inf Inf Inf 0 4.1000Inf Inf Inf Inf 0 >> path path =1 2 3 4 30 2 3 4 50 0 3 4 50 0 0 4 50 0 0 0 5解得方案:最短路(v1,v3,v5),即計劃期內機器更新最優計劃為第1年、第3年初各購進一臺新機器,4年總的支付費用為10.3萬元。
新問題來了!
按照上述方案,第3年初購置新機器,那么舊機器是否可以低價處理掉呢?這樣也更加符合實際。如果已知不同役齡機器年末的處理價格如表2所示,那么在這計劃期內機器的最優更新計劃又會怎樣?
表2
| 年度 | 第一年末 | ??? 第二年末 | 第三年末 | 第四年末 |
| 機器處理價(萬元) | 2.0 | 1.6 | 1.3 | 1.1 |
類似上面的處理方式,可轉化為求下圖中從 v1 到 v5 的最短路問題。
? ? ? ?
Matlab求解
Matlab程序:
a=[0 1.5 3.4 5.7 9.5;inf 0 1.6 3.5 5.8;inf inf 0 1.8 3.7;inf inf inf 0 3.1;inf inf inf inf 0]; n=size(a,1); D=a; path=zeros(n,n); for i=1:nfor j=1:nif D(i,j)~=infpath(i,j)=j;endend end for k=1:nfor i=1:nfor j=1:nif D(i,k)+D(k,j)<D(i,j)D(i,j)=D(i,k)+D(k,j);path(i,j)=path(i,k);endendend end D;path;Matlab運行結果:
D =0 1.5000 3.1000 4.9000 6.8000Inf 0 1.6000 3.4000 5.3000Inf Inf 0 1.8000 3.7000Inf Inf Inf 0 3.1000Inf Inf Inf Inf 0 >> path path =1 2 2 2 20 2 3 3 30 0 3 4 50 0 0 4 50 0 0 0 5即最后解得:最短路 (v1,v2,v3,v5),即計劃期內機器更新最優計劃為第1年初購進一臺新機器并在第2年初處理掉,第2年初購進一臺新機器并在第3年初處理掉,第3年初購進一臺新機器,4年總的支付費用為6.8萬元。
內容很多,消化一下吧,希望可以為你所用!
總結
以上是生活随笔為你收集整理的动态规划 - Floyd算法求最短路径 - (Matlab建模)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python语言语句块标记是_Pytho
- 下一篇: 【转】RNN、LSTM、Transfor