coolszf 发表于 2011-6-3 22:04

外行请教用连续Hopfield网络解决TSP问题(matlab程序)

对下面程序请教2饿问题:1.如果是要求区间[-1,1]*[-1,1]要怎么改;2.该程序的结果如何区分最优解和次优解

连续Hopfield网络解决TSP(这个是matlab程序)%连续Hopfield网络解决TSP

function HopfieldTsp()

clc;

N=10;   %城市数

A=1.5;%系数A

D=1;    %系数D

u0=0.02;    %神经元函数斜率

Step_t=0.1; %计算步长

MaxEpochs=20000;%迭代次数

%得到城市间距离矩阵

CityCood=rand(2,N); %城市坐标

DistanceMat=dist(CityCood',CityCood);   %城市间距离矩阵

U=0.2*rand(N,N)-0.1;%神经元输入初始值在0附近产生

for Count=1:MaxEpochs

    V=(1+tansig(U/u0))/2;

    E=CacuEnergy(V,DistanceMat,A,D);%计算能量

    delta_U=CacuDeltaU(V,DistanceMat,A,D,Step_t);%计算U的增量

    U=U+delta_U*Step_t;

end

=RouteCheck(V);%检查V是否是有效路径

if(CheckRes<1)

    FinalE=CacuEnergy(NewV,DistanceMat,A,D);

    RouteLen=TotalRouteLength(NewV,CityCood);%计算路径的真实长度

    PlotRoute(NewV,CityCood);%绘制路径

else

    disp('路径无效!!');

end

%能量计算

function E=CacuEnergy(V,d,A,D)

=size(V);

t1=sumsqr(sum(V,2)-1);

t2=sumsqr(sum(V,1)-1);

PermitV=V(:,2:n);

PermitV=;

temp=d*PermitV;

t3=sum(sum(V.*temp));

E=0.5*(A*t1+A*t2+D+t3);

%计算U的增量

function d_U=CacuDeltaU(V,d,A,D,dt)

=size(V);

t1=repmat(sum(V,2)-1,1,n);

t2=repmat(sum(V,1)-1,n,1);

PermitV=V(:,2:n);

PermitV=;

t3=d*PermitV;

d_U=-dt*(A*t1+A*t2+D*t3);

%检查V是否是有效路径

function =RouteCheck(V)

=size(V);

NewV=zeros(rows,columns);

=max(V);

for j=1:columns

    NewV(Order(j),j)=1;

end

SC=sum(NewV);

SR=sum(NewV');

CheckRes=sumsqr(SC-SR);

%绘制路径

function PlotRoute(V,CityCood)

figure;

title('连续Hopfield网络解决TSP');

xlabel('X坐标');

ylabel('Y坐标');

axis();

axis on;

=max(V);

NewCood=CityCood(:,order);

NewCood=;

plot(NewCood(1,:),NewCood(2,:),'o-');

%计算路径实际长度

function Len=TotalRouteLength(V,CityCood)

=max(V);

NewCood=CityCood(:,order);

NewCood=;

=size(NewCood);

Len=0;

for i=2:columns

    Len=Len+dist(NewCood(:,i-1)',NewCood(:,i));

end
页: [1]
查看完整版本: 外行请教用连续Hopfield网络解决TSP问题(matlab程序)