Prolog - Optimozacion

 
Vista:

Optimozacion

Publicado por Lisbet (2 intervenciones) el 12/06/2007 04:56:19
Necesito encontrar la solucion a este problema en prolog :
10- El problema de la optimización de propósito general consiste en encontrar los valores óptimos de una determinada función a la cuál no se le exige el cumplimiento de ninguna característica específica, como podría ser que fuera una función lineal (como lo exige el método SIMPLES que se imparte en Investigación de Operaciones). Existen muchos métodos para este tipo de problemas entre los que están: los Algoritmos Genéticos, las Estrategias Evolutivas, los Escaladores de Colinas, la Búsqueda limitada por umbral, etc. Asuma que solo se trabajarán con funciones de 6 variables, y cada variable toma valores entre 0 y 9. Para todos estos métodos, suponga que existe una predicado llamado “funcion” que, dada una lista que representa un vector de soluciones, devuelve un valor de evaluación que se corresponde con la función que se desea maximizar. Por ejemplo, la función “producto” podría implementarse así:

funcion([], 1).
funcion([X|L], P):- funcion(L, P1), P is P1*X.

a) Implemente el método de optimización conocido como Algoritmo Genético que se inspira en el proceso evolutivo basado en la reproducción sexual. En este método se generan aleatoriamente un grupo de soluciones (asuma que son 50). Luego, de ellas se toma el 20% mejor (o sea, las 10 con mayor valor para la función a optimizar) y las combina utilizando el operador de cruzamiento para generar 40 soluciones nuevas. Para ello, repite 20 veces el siguiente proceso: Toma dos soluciones aleatoriamente entre las 10 mejores y realiza el cruzamiento. El cruzamiento produce dos nuevas soluciones tomando una sublista de una y otra sublista de la otra, de manera aleatoria. Por ejemplo, el cruzamiento de dos padres como los siguientes puede producir los siguientes hijos H1 y H2: cruzamiento([1,1,4,5,6,7], [2,3,1,1,1,1], H1, H2), produce: H1 = [1,1,1,1,1,1] y H2 = [2,3,4,5,6,7]. Esto se corresponde con el cruzamiento después de la variable número 2. Podría haberse escogido aleatoriamente otro punto de cruce que se correspondiera con las variables: 1, 3, 4 ó 5. Cuando se han generado las 40 soluciones nuevas estas, junto a las 10 mejores, forman lo que se llama “nueva generación”. Ahora, esta nueva generación de 50 soluciones vuelve a pasar por todo el proceso nuevamente: Se escogen las 10 mejores, se cruzan, etc. Permita que el usuario pueda seleccionar el número de generaciones que desea. Al final, devuelva la mejor solución encontrada durante toda la evolución.

b) Implemente el método de optimización conocido como Estrategias de Evolución que se inspira en el proceso evolutivo basado en reproducción asexual. En este método se generan aleatoriamente un grupo de soluciones (asuma que son 50). Luego de ellas se toma el 20% mejor (o sea, las 10 con mayor valor para la función a optimizar) y produce 40 soluciones nuevas aplicando el operador de mutación. Para ello, para cada una de las soluciones escogidas produce 4 mutaciones de manera aleatoria. La mutación consiste en cambiar el valor de algunas de las variables por alguno de los otros valores posible. Por ejemplo, la mutación de una solución como la siguiente puede producir el H1 que se indica a continuación: mutacion([1,1,1,1,1,1], H) produce: H1 = [1,1,1,5,1,1]. Esto se corresponde con la mutación de la cuarta variable (escogida aleatoriamente) al valor 5 (también escogido aleatoriamente). Cuando se han generado las 40 soluciones nuevas estas, junto a las 10 mejores, forman lo que se llama “nueva generación”. Ahora, esta nueva generación de 50 soluciones vuelve a pasar por todo el proceso nuevamente: Se escogen las 10 mejores, se cruzan, etc. Permita que el usuario pueda seleccionar el número de generaciones que desea. Al final, devuelva la mejor solución encontrada durante toda la evolución.

c) Implemente el método de optimización conocido como Escalador de Colinas de Mejor Ascenso (Best Hill Climbing). En este método se genera todas las soluciones vecinas a una solución inicial que se toma aleatoriamente. Por ejemplo, para la solución [1,2,3,4,5,6] las soluciones vecinas serían las que se diferencian de ella en un valor de 1 en una de las variables, en este caso podrían ser: [0,2,3,4,5,6], [2,2,3,4,5,6], [1,1,3,4,5,6], [1,3,3,4,5,6], [1,2,2,4,5,6], [1,2,4,4,5,6], ..., [1,2,3,4,5,7], etc. Luego, de ellas se toma la mejor. Si la nueva solución es mejor (según la evaluación) que la actual se asume como nueva solución para el próximo paso. Este proceso se repite por un número de iteraciones que el usuario fija y se devuelve la mejor solución encontrada. Si entre las soluciones posibles a escoger ninguna es mejor que la actual el proceso también se detiene.

d) Implemente el método de optimización conocido como Escalador de Colinas de Primer Ascenso (First Hill Climbing). En este método se genera aleatoriamente soluciones vecinas (una cada vez) a una solución inicial, que se toma aleatoriamente. Por ejemplo, para la solución [1,2,3,4,5,6] las soluciones vecinas serían las que se diferencian de ella en un valor de 1 en una de las variables, en este caso podrían ser: [0,2,3,4,5,6], [2,2,3,4,5,6], [1,1,3,4,5,6], [1,3,3,4,5,6], [1,2,2,4,5,6], [1,2,4,4,5,6], ..., [1,2,3,4,5,7], etc. Cuando se genera una nueva solución, si esta es mejor o igual (según la evaluación) que la actual se asume como nueva solución para el próximo paso, no generándose aleatoriamente más soluciones vecinas. Este proceso se repite por un número de iteraciones que el usuario fija y se devuelve la mejor solución encontrada. Si entre las soluciones posibles a escoger ninguna es mejor o igual que la actual el proceso también se detiene.

Si no se puede encontrar la solucion a todos los incisos por lo menos a uno o algunos de ellos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Optimozacion

Publicado por Marlon (1 intervención) el 18/06/2007 04:56:52
bueno si le ecnuentras solucion me avisas
para ver que hago yo tambien
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimozacion

Publicado por zenia (1 intervención) el 26/05/2008 04:44:36
si tienes como hacer el inciso c por favor mandamelo a mi correo,,
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimozacion

Publicado por Rodaisy (1 intervención) el 01/06/2008 21:08:20
Hola me gustaria que me enviara el ejercio.

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimozacion

Publicado por ana (1 intervención) el 18/05/2009 23:59:41
por favor si encontraron solucion al inciso a del problema, por favor hacermelo llegar.
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Hill Climbing

Publicado por Jorge Luis Machin (1 intervención) el 09/06/2009 20:01:48
lamarckian_evolution :-
lamarckian_P(Percent, K),
Percent >= 1.0,
setof(ID, F^E^individual(ID, F, E), IDs),
write('Lamarckian evolution...'), nl,
lamarck_loop(IDs, K),
!.
lamarckian_evolution :-
lamarckian_P(Percent, K),
Percent > 0.0,
Percent < 1.0,
population_size_P(PopSize),
N is integer(Percent * PopSize),
write('Lamarckian evolution...'), nl,
get_unique_IDs(N, [], IDs),
lamarck_loop(IDs, K),
!.
lamarckian_evolution.

% get_unique_IDs(N, SoFar, IDs)
% N - Number of unique individual ID's to collect
% SoFar - ID's collected so far
% IDs - final set of unique IDs
%
% Retrieves a list of N unique individual ID's,
% selecting each one via a tournament selection routine defined elsewhere.

get_unique_IDs(0, IDs, IDs) :- !.
get_unique_IDs(N, SoFar, IDs) :-
repeat,
select(ID),
+ member(ID, SoFar),
M is N - 1,
get_unique_IDs(M, [ID|SoFar], IDs),
!.

% lamark_loop(IDs, Iter)
% IDs - individuals to perform Lamarckian evolution upon
% Iter - number of iterations for best-first search
%
% The individuals in IDs have hill climbing search performed on them.
% If the result of this search is a fitter individual, then that new
% individual replaces the origianl in the database. Side effect is that
% individual/3 clauses are replaced with improved individuals when found.
% Predicate also prints + and - characters to screen to give overview of
% Lamarckian performance.

lamarck_loop([], _) :- !.
lamarck_loop([ID|Rest], Iter) :-
individual(ID, Fit, Expr),
hillclimb(Iter, (Fit, Expr), (NewFit, NewExpr)),
(NewFit >= Fit ->
write('-')
;
write('+'),
retract(individual(ID, _, _)),
assert(individual(ID, NewFit, NewExpr))),
lamarck_loop(Rest, Iter),
!.

% hillclimb(K, Item, Soln)
% K - iterations to perform on individual for search
% Item - best found so far
% Soln - The most improved solution found. Worst case is an expression
% having same fitness as original.
%
% Does hillclimbing search for K iterations on Item.
% Itemx contains best expression obtained so far with mutation,
% paired with its fitness.

hillclimb(0, Item, Item) :- !.
hillclimb(K, (TopFit, TopExpr), Soln) :-
mutation(TopExpr, NewExpr),
eval_fitness(NewExpr, NewFit),
select_best((NewFit, NewExpr), (TopFit, TopExpr), BestSoFar),
K2 is K - 1,
hillclimb(K2, BestSoFar, Soln),
!.
hill_climb(K, BestSoFar, Soln) :-
K2 is K - 1,
hill_climb(K2, BestSoFar, Soln),
!.

% select best of expression pairs

select_best((F1, E1), (F2, _), (F1, E1)) :- F1 =< F2, !.
select_best(_, X, X).

% etc...
member(A, [A|_]).
member(A, [_|B]) :- member(A, B).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar