多阶段 matlab,多阶段决策优化最短路径问题的矩阵表示的matlab程序

多阶段决策优化最短路径问题的矩阵表示的matlab 程序

程序作者:Havian Zhang

Email :zvisual@sina.com

仅供学习交流,如有不当之处,请不吝赐教。谢谢

(此为word 文档,可以下载直接复制至matlab 中按相关规则使用即可)

参考文献:

《多阶段决策优化最短路径问题的矩阵表示》,张华节,李璀。四川兵工学报,2011.11

关键词:多阶段决策;优化;最短(小)路径;matlab 程序;矩阵;分块(层);带余除法;多叉树

1. 算例

对于文中的算例:(对于其他类似的问题,如有某相邻的阶段不能到达的情况或求最大值的问题,可以参见论文,里面有详细的操作说明。)

可将下列程序复制到matlab 中运行即可。其中转换矩阵函数以及最短路径函数需按matlab 中函数的运行规则使用即可。

%------------论文例子-Matlab 程序--(主程序)-------------%

w=[1 3 2 3 2 1]; %---某状态下的可能路径数---%

N=length(w);

ab=[3 2 1]'; %---此次参见论文中的设定方法即可(简单便利)---% bc=[4 3;2 7;8 6];

cd=[2 5 1 3 4 6];

de=[5 1 4 3 6 2];

ef=[3 2];

mab1=metrixT1(ab,w); %---为转换矩阵---%

mbc2=metrixT2(bc,w); %---为转换矩阵---%

mcd3=metrixT3N(cd,w,3); %---为转换矩阵---%

mde4=metrixT3N(de,w,4); %---为转换矩阵---%

mef5=metrixT3N(ef,w,5); %---为转换矩阵---%

m=mab1+mbc2+mcd3+mde4+mef5

fdmin(m,w) %---输出最优路径函数1---%

fdmins(m,w) %---输出最优路径函数2---%

%-----------------------主程序---结束------------------%

此问题的matlab 输出结果如下:

下为转换矩阵函数以及最短路径函数的Matlab 程序。需按matlab 中函数的运行规则使用即可。

温馨提示:

例如:对转换矩阵函数metrixT1的matlab 程序建立新的editor 文件,名字为metrixT1.m 即可使用。

%----------转换矩阵metrixT1--Matlab 程序--begin----%

function b=metrixT1(a,w)

%%%%%%%%%%%%%%%%%%%%适用于第二个分块矩阵的变换%%%%%%%%%%%%%%%%%%%%%%% c=1;

for i=3:length(w)

c=c*w(i);

end

b=ones(w(2),c); %标准/可能结果的矩阵及其维数

n=size(b);

for i=1:n(2)

b(:,i)=a.*b(w(2),i);

end

b;

%----------转换矩阵metrixT1--Matlab 程序--end----%

-Matlab 程序--begin----%

function b0=metrixT2(a,w)

%%%%%%%%%%%%%%%%%%%%%%%%%%适用于第二个分块

换%%%%%%%%%%%%%%%%%%%%%%%%

c=1;n1=size(a);

for i=3:length(w)

c=c*w(i);

end

c1=c/w(3); %第2个分块矩阵元素重复个数:w4*-*wN

b0=ones(w(2),c); %标准/可能结果的矩阵及其维数

n0=size(b0);

b=ones(w(2),c1); %第2个分块矩阵元素重复的小矩阵的维数

n=size(b);

for j=1:n1(2)

for i=1:n(2)

b1(:,i)=a(:,j).*b(w(2),i);

end

b0(:,1+n(2)*(j-1):n(2)*j)=b1;

end b0;

%----------转换矩阵metrixT2--Matlab 程序--end----%

程序--begin----%

function M=metrixT3N(a,w,l)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%主要变换M3之后

阵%%%%%%%%%%%%%%%%%%%%%%

n1=size(a); %a为一行向量

c=1; %l:第l 个分块矩阵

for i=3:length(w)

c=c*w(i);

end

cl=1;

for i=3:l+1

cl=cl*w(i);

end

矩阵的的分块变矩

if l+2

cc=1;

for i=l+2:length(w)

cc=cc*w(i);

end

if n1(2)==cl

M1=metrixT3N1(a,w,cc,cc*n1(2)); %重复向量a 中元素wi+1*-*wN次 M=metrixT3N2(M1,w,1);

else

k=cl/n1(2); %由k 个重复小矩阵合并所得

M1=metrixT3N1(a,w,cc,cc*n1(2));

M=metrixT3N2(M1,w,k);

end

else

M=metrixT3N2(a,w,c/n1(2));

end

M; %变换成w2*w3-wN的矩阵

%----------转换矩阵metrixT3N--Matlab 程序--end----%

程序--begin----%

function M=metrixT3N1(a,w,cl,l)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

次%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

n1=size(a);

c=1;

for i=3:length(w)

c=c*w(i);

end

M=ones(n1(1),l);%n1(2)*cl

b=ones(n1(1),cl); %第 个分块矩阵元素重复的小矩阵的维数

n=size(b);

for j=1:n1(2)

for i=1:n(2)

b1(:,i)=a(:,j).*b(:,i);

end

M(:,1+n(2)*(j-1):n(2)*j)=b1;

end M;

%----------转换矩阵metrixT3N1--Matlab 程序--end----%

程序--begin----%

function M=metrixT3N2(a,w,k)

%%%%%%%%%%%%%%%将矩阵a(一般为行向量) 复制k 次达到(w2*w3-wN)

将列复制cl

维%%%%%%%%%%%%%%%%

n1=size(a);

c=1;

for i=3:length(w)

c=c*w(i);

end

M=ones(w(2),c);

%b=ones(n1(1),n1(2)); %第 个分块矩阵元素重复的小矩阵的维数 n=size(M);

for i=1:n(1)

for j=1:k

M(i,1+n1(2)*(j-1):n1(2)*j)=a;%(i,:)

end

end

M;

%----------转换矩阵metrixT3N2--Matlab 程序--end----%

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值