Vous êtes sur la page 1sur 10

Minimizacion de energia de 12 particulas,

utilizando el potencial lennard Jonnes, mediante


gradiante conjugado y recocido simulado
Abraham Alonzo Velazquez
Facutad de ciencias, Universidad Autonoma de Baja California

Resumen
El potencial leonnard Jones se utilizo para predicir la energia potencial
entre las moleculas, dada una configuracion, en este trabajo se utilizo
gradiante conjugando y recocido simulado para minimizar la energia de una
configuracion inicial dada, obteniendo buenos resultados para gradiante
conjugado y muy malos para la implementacion de recocido simulado.
I.

Introduccion

En 1924 John Lennard Jones propuso una expresion para calcular la energia
potencial que existe entre dos moleculas:
U ( r )=4

12

(( ) ( ) )

(1)

Tal que epsilon es la profundidad del poso de potencial y sigma usualmente


se utilizan igual 1 y r representa la distancia que hay entre las dos particulas.
En este trabajo se utiliza sigma y epsilon iguales a 1, asi como en otros
articulos.

Figura 1.- Grafica de la energia versus radio del potencial Lennard Jones

Como se muestra en la figura 1 se observa que el potencial tiene dos


minimos, cuando r esta entre 3 - 4 anstrongs y en el infinito, por lo que el
problema central radica en que dada una configuracion inicial como se
muestra la figura 2, para un conjunto N de particulas, utilizando el potencial
LJ(Lennard - Jones), como es posible encontrar a partir de esa configuracion
otra, la o las configuracion en que la energia es minima, lo cual es un
problema de optimizacion.

Figura 2.- Distribucion aleatoria de puntos

Un metodo utilizado ampliamente dada una configuracion, es el encontrar la


configuracion tal que la fuerza entre las particulas es minima, esto es,
cuando el gradiante negativo de la funcion potencial cuando es igual a 0, con
respecto a la posicion.
F=ma= U ( r ) =24

( r1 r2 ) r1 (2)
6

12

El algoritmo consiste en dar una configuracion inicial, y dado un tamao de


paso lambda, ir avanzando las posiciones de los puntos conforme la
pendiente de la funcion(gradiante conjugado) hasta que es cero, donde es el
minimo. En este trabajo se utilizo un lambda igual 0.0005.
Tambien se utilizo el algoritmo de recocido simulado, el cual se encuentra en
el apendice I.

II.

Resultados

Se hicieron prubas para N = 11, con la posicion inicial que se encuentra en


[6], y se obtuvieron graficas de energia vs numero de iteraciones.

Figura 3.- Resultados del minimo de 11 particulas de la base de datos de


Cambrigde utilizando Simulated annealing

Figura 4.- Resultados del minimo de 11 particulas de la base de datos de


Cambrigde utilizando Gradiante conjugado

Figura 4.- Resultados del minimo de 11 particulas generadas


aleatoriamente utilizando recocido simulado

Figura 5.- Resultados del minimo de 11 particulas generadas


aleatoriamente utilizando Gradiante conjugado
Se utilizo el mismo vector inicial para los resultados de la figura 4,5.

III.

Conclusiones y observaciones

Aunque el gradiante conjugado no asegura encontrar un optimo global,


obtiene muy buenos resultados en los ambos casos. El recocido simulado
implementado, fue muy malo en comparacion con el gradiante conjugado,
ademas presentaba inestabilidad, con respecto a las posiciones iniciales. En
particular, era conflictivo definir una pertubacion adecuada, dado que para
las configuraciones propuestas en la base datos, se encuentran muy cercas
del optimo global, esto es, dado que un cambio en una cordenada de las
particulas en 0.01, puede aumentar considerablemente la energia, y eso me
hizo presentar problemas a la hora de definir la perturbacion y la
temperatura, dado que cambios pequeos en estos parametros presentaban
resultados significativos.

En el futuro se pretende adecuar correctamente simulated annealing, y


utilizar una cantidad mayor de particulas, y se pretende adecuarse para ser
utilizado en algo de dinamica molecular.

IV.

Referencias

[1] http://en.wikipedia.org/wiki/Lennard-Jones_potential
[2] http://ljc.group.cam.ac.uk/
[3] http://en.wikipedia.org/wiki/Conjugate_gradient_method
[4] Robert H. Leary. Global Optima of Lennard Jones Clusters. Journal de
Global Optimization, 11,35-53 (1997)
[5]
http://es.wikipedia.org/wiki/Teorema_de_la_energ%C3%ADa_cin
%C3%A9tica
[6] http://doye.chem.ox.ac.uk/jon/structures/LJ/tables.150.html

V.

Apendice I
Codigo de Recocido simulado

function

solucionInicial = perturbacion(solucionInicial,n)
indice = [];
indice(1) = randi(n,1);
indice(2) = randi(3,1);

solucionInicial(indice(1),indice(2)) =
solucionInicial(indice(1),indice(2)) + 0.0000000001*(-1+2*rand);

Miniminizacion de Energia mediante recocido simulado con el potencial lennard


- Jones
clear;clc;close all;
e = 1;
sigma = 1;
cero
asidFun =

%profundidad del poso de potencial


% distancia en la que el potencial entre particulas es
@(r) 4*e*((( sigma/r )^( 12 )) - ((sigma/r)^(6)));

%Donde r es la distancia entre las particulas

%Iniciacion
energia = [];
energia2 = [];
N = 11; %N es el numero de particulas
c = 1; %decrecimiento de la temperatura

%solucionInicial = a * rand (N,3); %configuracion inicial de las particulas


solucionInicial =[
1.0542091531
-0.2108624491
0.5680710481
0.1923889073
0.6289416106
-1.0227125046
0.2992711929
0.5934605346
0.8747047969
0.4872799293
-0.9828072330
-0.0592913953
-0.1993722088
1.0793656577
-0.0457144540
-0.0113638006
-0.4969000400
-0.9797094772
0.0250945513
-0.5050072403
0.8573317807
-0.7588555203
0.2589177821
-0.5897188552
-0.7092800042
0.2605048345
0.5217834017
-0.5949645415
-0.6979178086
-0.0461169915
0.2155923414
0.0723043516
-0.0786273496];
temperatura = 1000;
%Temperatura inicial
p1 = solucionInicial;
% suma(energia) de interacciones
energia = 0;
for i = 1:N - 1
for k = i+1:N
r = ( (solucionInicial(i,1) - solucionInicial(k,1) )^(2) +
(solucionInicial(i,2) - solucionInicial(k,2) )^(2) + ...
(solucionInicial(i,3) - solucionInicial(k,3) )^(2) )^(1/2);
energia = energia + asidFun(r);
end
end
energia(1) = energia
energia(2) = 0;
s = solucionInicial;
%comienzo de simulated annealing
for z = 1:20000
sPrima = perturbacion(s,N);

%evaluacion de el energia
for i = 1:N - 1
for k = i+1:N

r =

( (s(i,1) - s(k,1) )^(2) + (s(i,2) - s(k,2) )^(2) + ...


(s(i,3) - s(k,3) )^(2) )^(1/2);
energia(1) = energia(1) + asidFun(r);

end

end

for i = 1:N - 1
for k = i+1:N
r = ( (sPrima(i,1) - sPrima(k,1) )^(2) + (sPrima(i,2) sPrima(k,2) )^(2) + ...
(sPrima(i,3) - sPrima(k,3 ) )^(2) )^(1/2);
energia(2) = energia(2) + asidFun(r);
end

end

deltaE = energia(2) - energia(1);

if deltaE <= 0
s = sPrima;
energia2 = [energia2 energia(2)];
else
if rand < (exp( - deltaE/temperatura))
s = sPrima;
energia2 = [energia2 energia(2)];
end
end
if z ~= 20000
energia = [];
energia(1:2) = 0;

end

temperatura = temperatura - c;
end
plot(1:100,energia2(1:100),'.r')
s
energia

Algoritmo de gradiante conjugado


% Minimo Potencial de Leonard-Jones
function [A,pot] = MPLJ();
arreglo = [];
n=100;
nombre='11Cam.txt';
lambda=0.0005;
puntos=lee_archivo(nombre);

grad=GradLJ(puntos);
for i=1:n
puntos2=puntos-lambda*grad;
puntos=puntos2;
grad=GradLJ(puntos);
arreglo(i) = PotLJ(puntos);
end
A=puntos;
pot=PotLJ(puntos);
imprime_archivo(A);
plot(1:n,arreglo','.r')

% Minimo Potencial de Leonard-Jones


% Este programa calcula el vector gradiente de LJ
% recibe la matriz de puntos
function [sol] = GradLJ(puntos)%numero_de_puntos,puntos)
% Punto es vector para puntos en R^3
% norma es la distancia euclidiana al cuadrado
% SALIDA: un arreglo con los vectores gradiente de LJ
%n=numero_de_puntos;
[n,m]=size(puntos);
for i=1:n
pGrads(i,1:3)=[0.0, 0.0, 0.0];
end
for i=1:n-1
iP=puntos(i,:);
iG=pGrads(i,:);
for j=n:-1:i+1
jP=puntos(j,:);
iG=pGrads(i,:);
jG=pGrads(j,:);
dx=(iP(1)-jP(1));
dy=(iP(2)-jP(2));
dz=(iP(3)-jP(3));
d2=dx^2+dy^2+dz^2;
rij=(1.0/d2)^3;
f1=(- 2.0*rij^2+rij)/d2;
gx=dx*f1;
gy=dy*f1;
gz=dz*f1;
itGx=iG(1)+gx;
itGy=iG(2)+gy;
itGz=iG(3)+gz;
jtGx=jG(1)-gx;
jtGy=jG(2)-gy;
jtGz=jG(3)-gz;
pGrads(i,:)=[itGx,itGy,itGz];
pGrads(j,:)=[jtGx,jtGy,jtGz];
end
end
for i=1:n
iG=pGrads(i,:);
itGx=24.0*iG(1);
itGy=24.0*iG(2);
itGz=24.0*iG(3);

pGrads(i,:)=[itGx,itGy,itGz];
end
sol=pGrads;

% Potencial de Leonard-Jones
function [sol] = PotLJ(puntos)
% Punto es un arreglo de puntos en R^3
% d2 es la distancia euclidiana al cuadrado
% SALIDA: el potencial de LJ(sol)
[n,m]=size(puntos);
pot=0.0;
for i=1:n-1
iP=puntos(i,:);
for j=i+1:n
jP=puntos(j,:);
d2=(iP(1)-jP(1))^2+(iP(2)-jP(2))^2+(iP(3)-jP(3))^2;
rij=(1.0/d2)^3;
pot=pot+rij^2-rij;
end
end
sol=4.0e0*pot;

% Minimo Potencial de Leonard-Jones


function [informacion] = lee_archivo(nombre)
fid = fopen(nombre);
informacion = fscanf(fid,'%g %g %g',[3 inf]);
informacion = informacion';
fclose(fid)

Vous aimerez peut-être aussi