**
離散最優算法_動態規劃算法(串行)
**
求解問題:
求解方法:
上述問題可以視爲爲一個多選擇揹包問題,同時將優化問題轉化成一個網絡圖,利用動態規劃算法進行雙向遍歷最短路徑。
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.求解結果:
從運行結果可以看出,最小值是11/12=0.91667。
對應f1=3,f2=2,f3=1。