離散最優算法_動態規劃算法(串行)

**

離散最優算法_動態規劃算法(串行)

**
求解問題:
在這裏插入圖片描述
求解方法:
上述問題可以視爲爲一個多選擇揹包問題,同時將優化問題轉化成一個網絡圖,利用動態規劃算法進行雙向遍歷最短路徑。
DAG圖
MATLAB代碼:
1.dispersed_optimum.m文件

function [ ] = dispersed_optimum()
%邊上的功率值
array_P(:,:,1) = [
	1,2,3; 
	1,2,3; 
	1,2,3; 
];
array_P(:,:,2) = [
	2,4,6; 
	2,4,6; 
	2,4,6; 
];
array_P(:,:,3) = [
	3,6,9; 
	3,6,9; 
	3,6,9; 
];

%邊上的性能值
array_R(:,:,1) = [
	1,1/2,1/3; 
	1,1/2,1/3; 
	1,1/2,1/3; 
];
array_R(:,:,2) = [
	1/2,1/4,1/6; 
	1/2,1/4,1/6; 
	1/2,1/4,1/6; 
];
array_R(:,:,3) = [
	1/3,1/6,1/9; 
	1/3,1/6,1/9; 
	1/3,1/6,1/9; 
];

%前向功率值
array_F=[
    0,0,0,0; 
    0,0,0,0; 
    0,0,0,0;  
     ];

%後向功率值
array_B=[
    0,0,0,0; 
    0,0,0,0; 
    0,0,0,0;  
    ];

%性能值
INF = 100;
array_L=[
    0,0,0,0; 
    0,0,0,0; 
    0,0,0,0; 
    ];
tic
%step1:更新前向功率值
for k=1:3
      for i=1:3
            min = 100;
            for j=1:3
                if(array_F(j,k) + array_P(j,i,k) < min )
                     min = array_F(j,k) + array_P(j,i,k);
                end
            end
            array_F(i,k+1) = min;
      end 
end

%step2:更新後向功率值
for k=4:-1:2
      for i=1:3
            min = 1000;
            for j=1:3
                if(array_B(j,k) + array_P(i,j,k-1) < min )
                     min = array_B(j,k) + array_P(i,j,k-1);
                end
            end
            array_B(i,k-1) = min;
      end 
end

%step3:後向計算性能值
for k=1:3
      for i=1:3
            min = 1000;
            for j=1:3
                if(array_F(j,k) + array_B(i,k+1) + array_P(j,i,k) <= 10 )
                    if(array_L(j,k) + array_R(j,i,k) < min )
                         min = array_L(j,k) + array_R(j,i,k);
                    end
                end
            end
            array_L(i,k+1) = min;
      end 
end
toc
array_L
min = 10000;
for i=1:3  
    if(array_L(i,4)  < min )
          min = array_L(i,4);
    end
end 
minimum_latency = min
return 
end

2.求解結果:
MATLAB結果
從運行結果可以看出,最小值是11/12=0.91667。
對應f1=3,f2=2,f3=1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章