2010-12-01 49 views
12

首先,这是作业。我认为很明显,我已经付出了努力,并且正在寻找提示,而不是代码。我的Hopfield神经网络解决旅行商问题有什么问题?

问题是以下几点。操作等式具有改变给定神经元的四个组件。

  • A)确保每个城市最多访问一次的一个部分。 B)确保每个职位(第一,第二,第三等)最多只有一个城市。
  • C)确保活动神经元总数等于城市数量的一部分。 D)一个最小化距离的部分。

如果我对D的重量足够大以至于它有任何作用,那么网络将在无效的巡回中解决(例如,访问A,D,无处,E,C)。但是,我可以减重D,代码将找到解决方案,但不是那些距离最短的解决方案。

我会非常感谢任何建议,我一直在敲击我的头对着键盘一段时间。任何熟悉使用Hopfield网络解决TSP问题的人都应该理解这些代码。

达斯代码:

%parameters 
n=5; 
theta = .5; 
u0 = 0.02; 
h = .1; 
limit = 2000; 

%init u 
u=zeros(n,n); 
uinit = -u0/2*log(n-1); %p94 uINIT = - u0/2 * ln(n-1) 
for i=1:n 
    for j=1:n 
     u(i,j) = uinit * (1+rand()*0.2-0.1); %add noise [-0.1*uInit 0.1*uINIT] 
    end 
end 

%loop 
for index=1:limit 
    i = ceil(rand()*n); 
    k = ceil(rand()*n); 

    %runge kutta 
    k1 = h*du(u,i,k,0); 
    k2 = h*du(u,i,k, k1/2); 
    k3 = h*du(u,i,k, k2/2); 
    k4 = h*du(u,i,k, k3); 
    u(i,k) = u(i,k) + (k1 + 2*k2 + 2*k3 + k4)/6; 
end 

Vfinal = hardlim(V(u)-theta) 

杜()

function out=du(u,X,i,c) 

dist = [0, 41, 45, 32, 32; 
     41, 0, 36, 64, 54; 
     45, 36, 0, 76, 32; 
     32, 64, 76, 0, 60; 
     32, 54, 32, 60, 0]; 

t = 1; 
n = 5; 
A = 10; 
B = 10; 
C = 10; 
D = .0001; 


AComp = A*sum(V(u(X,:))) - A*V(u(X,i)); 
BComp = B*sum(V(u(:,i))) - B*V(u(X,i)); 
CComp = C*(sum(sum(V(u)))-n); 

DComp = 0; 
before = i-1; 
after = i+1; 
if before == 0 
    before = 5; 
end 
if after == 6 
    after = 1; 
end 
for Y=1:5 
    DComp = DComp + dist(X,Y) * (V(u(Y,after)) + V(u(Y,before))); 
end 
DComp = DComp * D; 

out = -1*(u(X,i)+c)/t - AComp - BComp - CComp - DComp; 

V()

function out=V(u) 
u0 = 0.02; 
out = (1 + tanh(u/u0))/2; 
+0

这是一个很酷的问题。该学期可能结束了;你有没有找到解决方案? – 2011-03-20 02:31:27

回答

3

我从来没有尝试过解决ŧ他带有神经网络的TSP,但我发现它解决得非常好,并且很快采用遗传方法。

尽管我已经完成了许多神经网络项目,但我猜测由于TSP通常可以在单个网络(城市)上提供多种解决方案,因此神经网络可以在两者之间来回拖动解决方案,从来没有真正成功地融合到任何一个。

John R. Doner