matlab小程序(2)

2019-01-27 18:22

str1=sprintf('从%d到%d的最短路径长度为:%d\\n所经路径为:',...' t2 R* X$ r% {8 s start,terminal,Min_path(start,terminal).distance); disp(str1);' ^( e- L- T; u% r) r

disp(Min_path(start,terminal).path);2 M3 l/ u; U* Q/ y4 l2 O

%Foldy's Algorithm 算法程序' H: o& [( @0 X1 H) |) Q: ] function [D,path]=floyd1(a)7 w7 w% l3 p; m. Y+ m- r

n=size(a,1);

D=a;path=zeros(n,n);%设置D和path的初值# k# J5 D/ C2 d/ L1 X2 ? for i=1:n

for j=1:n/ @; `7 |: r' ~& }9 ^ if D(i,j)~=inf

path(i,j)=j;%j是i的后点 end1 ^$ P% t* m @ end end

%做n次迭代,每次迭代都更新D(i,j)和path(i,j) for k=1:n for i=1:n

for j=1:n# `- B- @ K$ q2 ?; i if D(i,k)+D(k,j)

D(i,j)=D(i,k)+D(k,j);%修改长度 path(i,j)=path(i,k);%修改路径 end end end* x X\ end

五模拟退火算法源程序

function [MinD,BestPath]=MainAneal(CityPosition,pn)# k9 ~+ \\# l% V( I4 M

function [MinD,BestPath]=MainAneal2(CityPosition,pn)

%此题以中国31省会城市的最短旅行路径为例,给出TSP问题的模拟退火程序0 @; P7 E& Z, ~- v. q& @4 m3 a

%CityPosition_31=[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;.... D; a* a, C- w4 w; b, P

% 3238 1229;4196 1044;4312 790;4386 570;3007 1970;2562 1756;...- G5 {/ z# @6 F- h4 z % 2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;...

% 3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;...* i, w3 b3 O- @\o& a0 b

% 3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;2370 2975];! }1 w8 X6 g4 R

5 H' [5 [9 g) f8 v

%T0=clock1 I9 V* a* U) D1 T0 b: ^

global path p2 D;' K5 N k2 s3 S* B/ G. |5 k. y

[m,n]=size(CityPosition);1 r% s& Y; l# c3 A

%生成初始解空间,这样可以比逐步分配空间运行快一些 TracePath=zeros(1e3,m);5 `& q; D\ Distance=inf*zeros(1,1e3);

D = sqrt((CityPosition( :, ones(1,m)) - CityPosition( :, ones(1,m))').^2 +...

(CityPosition( : ,2*ones(1,m)) - CityPosition( :,2*ones(1,m))').^2 );5 T% c0 N6 w. G! b. I %将城市的坐标矩阵转换为邻接矩阵(城市间距离矩阵) ^; G' k) L$ c* F for i=1:pn path(i,end

t=zeros(1,pn); p2=zeros(1,m); 1 v! }3 x) d2 v+ M

iter_max=100;%input('请输入固定温度下最大迭代次数iter_max=' );

m_max=5;%input('请输入固定温度下目标函数值允许的最大连续未改进次数m_nax=' ) ; %如果考虑到降温初期新解被吸收概率较大,容易陷入局部最优

%而随着降温的进行新解被吸收的概率逐渐减少,又难以跳出局限/ {! C\ %人为的使初期iter_max,m_max较小,然后使之随温度降低而逐步增大,可能 %会收到到比较好的效果. Z4 X5 P. @% \\ $ ?\/ q/ F6 F% J# m, m7 V) p6 o( J: I

T=1e5;8 s _\ N=1;

tau=1e-5;%input('请输入最低温度tau=' );

%nn=ceil(log10(tau/T)/log10(0.9));+ `# v+ F m. w/ Y

while T>=tau%&m_num

iter_num=1;%某固定温度下迭代计数器

m_num=1;%某固定温度下目标函数值连续未改进次数计算器( J+ x, r! Z3 T0 T! v& _ %iter_max=100;

%m_max=10;?il(10+0.5*nn-0.3*N);

while m_num

%MRRTT(Metropolis, Rosenbluth, Rosenbluth, Teller, Teller)过程:

%用任意启发式算法在path的领域N(path)中找出新的更优解( J/ h5 \\! V9 f- p: }6 t. s+ p) z\R* N

for i=1:pn; G8 M e+ L) k; F1 `3 h2 ]

Len1(i)=sum([D(path(i,1:m-1)+m*(path(i,2:m)-1)) D(path(i,m)+m*(path(i,1)-1))]); %计算一次行遍所有城市的总路程

[path2(i,: )]=ChangePath2(path(i,: ),m);%更新路线* V+ w/ [( ^+ I0 _5 h9 U D(path2(i,m)+m*(path2(i,1)-1))]); end ~# ^4 O* l1 p\ %Len1

%Len2# _1 y+ v: z$ ~, T: _0 N: h1 z' U

Len2(i)=sum([D(path2(i,1:m-1)+m*(path2(i,2:m)-1))

=randperm(m);%构造一个初始可行解$ ^& l1 _7 l- L- U( m8 u* Y2 T4 r

%if Len2-Len1<0|exp((Len1-Len2)/(T))>rand

R=rand(1,pn);! G9 i0 ?( a. N) \\

%Len2-Len1R: ~ e\

if find((Len2-Len1R)~=0)4 Q+ y8 a: E( b( _5 c

path(find((Len2-Len1R)~=0), : )=path2(find((Len2-Len1R)~=0), : );0 z, R4 U- h* z. q% A: f\

Len1(find((Len2-Len1R)~=0))=Len2(find((Len2-Len1R)~=0));, S* d9 u0 O- B

[TempMinD,TempIndex]=min(Len1);3 K7 T0 Q+ Q1 c %TempMinD

TracePath(N,: )=path(TempIndex,: );/ S6 F4 h( n+ u Distance(N,: )=TempMinD; N=N+1;7 }$ T4 E\

%T=T*0.9* B1 G8 z Y% q- l% T m_num=0; else

m_num=m_num+1; end

iter_num=iter_num+1; end# Z/ B! J- @+ g4 `' x, R\ T=T*0.9

%m_num,iter_num,N6 |- {% b0 S/ q\ end 5 L7 q\

[MinD,Index]=min(Distance);. i9 C d\ BestPath=TracePath(Index,: );9 S/ A$ C9 G3 _ disp(MinD)0 q: g0 F! X8 \\3 b+ J3 v; B. t7 C %T1=clock

%

序 ; L% g8 ~' ~& P6 N% X4 a function [p2]=ChangePath2(p1,CityNum) global p2;+ V d& P7 E: w: D# Y while(1): [) I7 [- m6 @, `

R=unidrnd(CityNum,1,2);

if abs(R(1)-R(2))>16 ^1 U- P4 b8 z% ]$ m break;- ]9 x\ end ~3 ^& v$ v9 Q9 I6 d

end

R=unidrnd(CityNum,1,2);/ [/ h0 ?% G' `) p- L# U# } I=R(1);J=R(2);+ {1 ~0 r4 ^+ X7 Q2 S7 y) V ~& A

线

( J2 y- p1 F/ s/ J2 I, X %len1=D(p(I),p(J))+D(p(I+1),p(J+1));

%len2=D(p(I),p(I+1))+D(p(J),p(J+1));2 I4 Z\ if I

p2(1:I)=p1(1:I);

p2(I+1:J)=p1(J:-1:I+1);. C4 P1 j- ^; c. {& k

p2(J+1:CityNum)=p1(J+1:CityNum);! C3 _+ @' f `) _; { else

p2(1:J)=p1(1:J);) M* u. W\ p2(J+1:I)=p1(I:-1:J+1);

p2(I+1:CityNum)=p1(I+1:CityNum); m' J, ?1 v1 g end

, e7 W) w( O& G& _0 K

六遗传算 法程序:) f( n- _, i2 m0 w: m8 b9 w! @$ I

说明: 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作!: w- g; k$ e& d) x# ^ - }7 `) m& o0 J H/ w# C

function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) 4 s$ u- z9 F9 s( H2 J' b! p4 v % Finds a maximum of a function of several variables.

% fmaxga solves problems of the form:

% max F(X) subject to: LB <= X <= UB 8 t& }) W, I- e) v6 i! a2 Z- L % BestPop - 最优的群体即为最优的染色体群

% Trace - 最佳染色体所对应的目标函数值, _4 l f2 h% `! K5 C; E% _+ k8 I % FUN - 目标函数 % LB - 自变量下限

% UB - 自变量上限! e2 R' e r# S1 ]

% eranum - 种群的代数,取100--1000(默认200)6 k7 T- c& B+ Y9 [

% popsize - 每一代种群的规模;此可取50--200(默认100) I& `4 Z1 q& n' t5 V % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8); `. y- ^& \\2 k: x0 @6 h % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1)

% pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2)

% options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) %# Y( \\( `( w6 D4 g+ W

% ------------------------------------------------------------------------; g' m3 p$ x& o! K, n7 Q& P( Q : p7 \\5 c: i' Q. a* |+ O\

T1=clock;8 @2 B% c3 K/ W A7 v, M

if nargin<3, error('FMAXGA requires at least three input arguments'); end

if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end

if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end3 d$ d4 h5 g8 z- z; v* x) z\

if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0)

error('数据输入错误,请重新输入(LB

end& [( z) S' t$ Q* [

s=sprintf('程序运行需要约%.4f 秒钟时间,请稍等......',(eranum*popsize/1000)); disp(s);/ g# _+ w# z$ Q\ 7 J0 _7 F# P/ i5 A' }0 V7 W+ z

global m n NewPop children1 children2 VarNum , s: F$ ]- q; Q3 l4 C

bounds=[LB;UB]';bits=[];VarNum=size(bounds,1);

precision=options(2);%由求解精度确定二进制编码长度

bits=ceil(log2((bounds(:,2)-bounds(:,1))' ./ precision));%由设定精度划分区间 [Pop]=InitPopGray(popsize,bits);%初始化种群) \\4 ~9 O\ [m,n]=size(Pop); NewPop=zeros(m,n); children1=zeros(1,n); children2=zeros(1,n);

pm0=pMutation;, Q; V6 \\- n4 H+ E# O; |

BestPop=zeros(eranum,n);%分配初始解空间BestPop,Trace Trace=zeros(eranum,length(bits)+1); i=1;! @9 h\ while i<=eranum

for j=1:m3 z0 z3 W8 J) C2 c5 {+ O% Y. w value(j)=feval(FUN(1,

,(b2f(Pop(j,

,bounds,bits)));%计算适应度4 m, k- a) |, a0 `* x

end

[MaxValue,Index]=max(value); BestPop(i,

=Pop(Index,

;% I+ M; y5 r: a3 E- Q7 A( z

Trace(i,1)=MaxValue;

Trace(i,(2:length(bits)+1))=b2f(BestPop(i,

,bounds,bits);

[selectpop]=NonlinearRankSelect(FUN,Pop,bounds,bits);%非线性排名选择 [CrossOverPop]=CrossOver(selectpop,pCross,round(unidrnd(eranum-i)/eranum)); %采用多点交叉和均匀交叉,且逐步增大均匀交叉的概率4 Q5 a+ e% ~( H( `% [1 f& X# o %round(unidrnd(eranum-i)/eranum)

[MutationPop]=Mutation(CrossOverPop,pMutation,VarNum);%变异' q% a, q. }: ^\ [InversionPop]=Inversion(MutationPop,pInversion);%倒位7 J; `' ~' G. f: ~( r Pop=InversionPop;%更新

pMutation=pm0+(i^4)*(pCross/3-pm0)/(eranum^4); %随着种群向前进化,逐步增大变异率至1/2交叉率 p(i)=pMutation;/ u- t# {- o0 h6 a: V


matlab小程序(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2010一年级汉语拼音笔试卷参考

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: