Você está na página 1de 5

CENTRO NACIONAL DE INVESTIGACIN Y

DESARROLLO TECNOLGICO

POSGRADO DE ELECTRNICA
CONTROL INTELIGENTE

TAREA # 6
TEMA:
DERIVATIVE-FREE OPTIMIZATION

CATEDRTICO:

DR. ENRIQUE QUINTERO-MRMOL MRQUEZ

ALUMNO(S):

NAMIGTLE JIMNEZ JESS


ROS RUIZ CARLOS
SNCHEZ GOMEZ ARNOLD JONATHAN
TORRECILLA COPTO ERIK FRANCISCO

CUERNAVACA MOR., A 19 DE MARZO DEL 2015.

Prctica 7.2
Al principio del programa tsp.m, tenemos que crear una matriz distancia en la
cual el elemento en la fila i y la columna j en la matriz distancia es igual a la
distancia de viaje entre la ciudad i y la ciudad j. En tsp.m esto se hace por
medio de 2 ciclos for anidados.
for i = 1:NumCity,
for j = 1:NumCity,
distance(i, j) = norm(loc(i, :) - loc(j, :));
end
end

donde NumCity es el nmero de ciudades. Puedes modificar este cdigo para


evitar el uso de los ciclos for?
S, podemos evitar los ciclos for usando ciclos while pero no se puede
evitar el uso de ciclos debido a que de ello depende la creacin de la
matriz distancia.
while i<=NumCity;
j=1;
while j<=NumCity
distance(i, j) = norm(loc(i, :) - loc(j, :));
j=j+1;
end
i=i+1;
end

Problema 7.8
Utilice el comando fminsearch para minimizar el valle parablico de
Rosenbrock (tambin conocido como la funcin banana):

f ( x 1 , x 2 )=100 (x2 x21 )2+(1x 1 )2


El punto de inicio es (-1.2, 1).
Se introduce la funcin a optimizar mediante el siguiente comando en Matlab
banana = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;
Posteriormente se procede a obtener los puntos de optimizacin y el valor de la
funcin evaluada en dicho punto mediante la siguiente instruccin:
>> [x,fval] = fminsearch(banana,[-1.2, 1])
Al dar enter el programa nos muestra los valores de x1 y x2 que minimizan el
valle parablico, as como el valor de la funcin evaluada en ese punto.

>> x1=x(1,1)
x1 =

1.0000

>> x2=x(1,2)

x2 =

1.0000

El valor de la funcin evaluada en este punto es:


fval =

8.1777e-10

Problema 7.9
Repita el ejercicio 7.8 usando el mtodo de la bsqueda aleatoria. Compare el
tiempo de corrida promedio y el valor de la funcin objetivo despus de 10
corridas con aquellos obtenidos con fminsearch.
Para proceder a obtener la minimizacin de la funcin se procedi a realizar el
programa para bsqueda aleatoria, correr el programa con la funcin y los
datos dados y comparar los resultados con los obtenidos en el problema 7.8.
El programa utilizado para la bsqueda aleatoria fue el siguiente y se da
crdito al autor del programa original Namir Shammas. All rights reserved, el
cual escribi el cdigo y nosotros lo modificamos para nuestro proposito:

function [XBest,BestF,Iters]= Bus_aleatoria(N, X, SearchRadius, Eps_Fx, MaxIter, myFx)

%
%
%
%
%
%
%
%

Function performs multivariate optimization using the


random 'drift' method.
Input
N Numero de variables
X Vector con valores iniciales
SearchRaduis vector radio de busqueda

%
%
%
%
%
%
%
%
%
%

Eps_Fx tolerancia del error


MaxIter Numero mximo de iteraciones
myFx nombre de la funcion a optimizar (funcion Objetivo)
Output
XBest Vector Variables optimizadas
BestF Valor ptimo de la funcion objetivo con las variables optimizadas
Iters iteraciones totales realizadas para encontrar valores optimos

XBest = X + SearchRadius * (rand(N) - 0.5);


BestF = feval(myFx, XBest, N);
LastBestF = 100 * BestF + 100;
Iters = 0;
for k=1:MaxIter
Iters = Iters + 1;
X = XBest + SearchRadius * (rand(N) - 0.5);
F = feval(myFx, X, N);
if F < BestF
XBest = X;
LastBestF = BestF;
BestF = F;
end
if abs(LastBestF - BestF) < Eps_Fx
break
end
end

Para poder ejecutar correctamente este programa se necesit crear un archivo


llamado fx1 el cual es una funcion en matlab que contiene nuestra funcion
objetivo, cuyo cdigo es el siguiente:

function y=fx1(X, N)
y=100*(X(2)-X(1)^2)^2+(1-X(1))^2;
end

Una vez teniendo ambos script se procedi a correr el programa de la siguiente


manera:
[XBest,BestF,Iters]=Random_Search3(2,[-1.2 1], [1 1], 1e-9, 100000, 'fx1')
Y los resultados obtenidos fueron los siguientes:
XBest =
0.9909
BestF =

0.9824

1.1283e-04
Iters =
100000
>> x1=XBest(1,1)
x1 =
0.9909
>> x2=XBest(1,2)
x2 =
0.9824
Al obtener estos resultados y compararlos con los obtenidos en el problema 7.8
podemos observar que los resultados son muy aproximados, ya que los valores
obtenidos se muestran a continuacin:

X1
X2

fminsearch

Bus_aleatoria

1
1

0.9909
0.9824

Con esta tabla nos damos cuenta de lo antes ya mencionado, por ultimo solo
resta agregar que en el mtodo de bsqueda aleatoria, tenemos la ventaja de
aproximar nuestro resultado al valor real tanto como queramos modificando ya
sea el nmero de iteraciones mximas y/o la tolerancia del error.

Você também pode gostar