**
离散最优算法_动态规划算法(串行)
**
求解问题:
求解方法:
上述问题可以视为为一个多选择揹包问题,同时将优化问题转化成一个网络图,利用动态规划算法进行双向遍历最短路径。
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。