离散最优算法_动态规划算法(串行)

**

离散最优算法_动态规划算法(串行)

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

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