2010-12-01 12 views
12

Primero, esta es la tarea. Creo que está claro que hice un esfuerzo y estoy buscando sugerencias, no código.¿Qué pasa con mi solución de red neuronal de Hopfield para el problema del vendedor ambulante?

El problema es el siguiente. La ecuación de operación tiene cuatro componentes para alterar una neurona determinada.

  • A) Una parte para garantizar que cada ciudad se visite como máximo una vez.
  • B) Uno para asegurar que cada posición (primero, segundo, tercero, etc.) tenga como máximo una ciudad.
  • C) Una parte para garantizar que el número total de neuronas activas sea igual al número de ciudades.
  • D) Una parte para minimizar la distancia.

Si peso D lo suficiente como para que tenga algún efecto, la red realiza un recorrido no válido (por ejemplo, visita A, D, en ninguna parte, E, C). Sin embargo, puedo deperar D y el código encontrará soluciones, pero no las que tienen una distancia mínima.

Estaría muy agradecido por cualquier consejo, he estado golpeando mi cabeza contra el teclado por un tiempo. El código debe ser comprensible para cualquiera que esté familiarizado con la solución del TSP con una red Hopfield.

Código Das:

%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) 

du()

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

Esto es un problema genial. El semestre es probable que haya terminado; ¿Encontraste alguna solución? –

+0

No, lamentablemente el profesor no fue de lo más útil. Hablé con otro alumno de la clase, pero tampoco creo que lo haya solucionado. –

Respuesta

3

que nunca he probado la solución de t El TSP con una red neuronal, pero he encontrado que lo resuelve muy bien, y muy rápidamente, teniendo un enfoque genético.

He hecho muchos proyectos de redes neuronales, y supongo que dado que el TSP puede, en general, tener muchas soluciones en una sola red (de ciudades), que la red neuronal podría arrastrarse hacia adelante y hacia atrás soluciones, nunca convergiendo realmente con éxito en nadie.

John R. Doner

Cuestiones relacionadas