Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ottimizzazione
euristica
E.Mumolo
mumolo@units.it
Il problema della
ottimizzazione
Componenti:
Un insieme di variabili indipendenti
Un insieme di condizioni sulle variabili (vincoli)
Una funzione obiettivo
Soluzione:
I valori delle variabili che, rispettando i vincoli, portano la funzione obiettivo
ad un valore ottimo
In forma generale:
n
massimizza F x , x
Con i vincoli
ci x 0, i m' 1,... , m
ci x 0, i 1,2 , ... m'
Lo spazio di ricerca della
soluzione
Descritto da:
Numero di dimensioni
Discreto
Limitato
Reale
Natura della relazione tra vettori di ingresso e funzione obiettivo
Continua
Discontinua
Ricerca locale nello spazio di ricrca: non tiene conto delle
soluzioni precedenti
Considera solo la soluzione corrente
Tecniche
Tecniche enumerative
euristiche
DFS Programmazione BFS
dinamica
Programmazione Algoritmi
genetica genetici
Tecniche euristiche
Tecniche per la soluzione di problemi mediante algoritmi iterativi che
selezionano via via la soluzione pi appropriata tra quelle ottenute a
ciascun passo. Tra queste:
Tabu search. Definisce come muoversi localmente da una soluzione allaltra
usando una tabella delle soluzioni visitate recentemente
Hill Climbing: parte da un punto e cerca punti con migliore funzione obiettivo
Ant colony optimization: risolve problemi che possono essere ridotti alla ricerca
di cammini ottimi in un grafo. Idea: le formiche in cerca di cibo esplorano a
caso lambiente e quando lo trovano ritornano alla colonia lasciando tracce
chimiche, eventualmente rinforzate da altre formiche
Simulated annealing: ricerca la soluzione generando soluzioni vicine alla
corrente. Soluzioni che portano a un valore superiore sono sempre accettate.
Soluzioni che portano a un valore inferiore sono accettate probabilisticamente
Genetic algorithms: mantiene un insieme di soluzioni che evolvono usando i
principi della evoluzione Darwiniana
Hill Climbing
varianti:
stochastic hill climbing
Non sceglie sempre il migliore
first-choice hill climbing
Prende il primo buon successore (utile se il numero di successori grande)
random restart
Cerca il punto migliore da diversi punti di partenza
Ovviamente la probabilit di trovare il massimo aumeta con laumentare del numero
di tentativi
Algoritmi di ottimizzazione
mediante Simulated
Annealing
Simulated Annealing: (~ tempera simulata)
Idea: imitare quello che succede nel processo di tempera
la tempera il processo nel quale il metallo viene
riscaldato e poi raffreddato lentamente
Il materiale temperato viene arriva ad uno stato a minore energia
nel quale le molecle si assestano su una posizione pi stabile
Riassunto dellalgoritmo di
minimizzazione
selezione dei parametri iniziali ~
x
perturba i parametri
Valutazione ~x0
selezione riproduzione
Genera la
valutazione
popolazione
Esempio
massimizzare la funzione f(x)=x2 con x tra 0 e 31
struttura dati:
...
unsigned *chrom cromosoma
double fitness
individuo i int xsite
int *parent genitori
int *utility eventuali variabili utili
unsigned *chrom
double fitness
individuo i+1 int xsite
int *parent
int *utility
...
Esempio
--------------------------------------------------------------------------------
f (i )
Lindividuo i ha una probabilit pari a f (i) di essere scelto
i
questarea proporzionale
1 2 al valore della fitness
n
3
4
Si ripete la selezione tante volte quanti sono gli individui che devono
avere gli stessi genitori
Codice: selezione
Selezione:
int rws(struct individual *pop)
{
float rand, partsum;
int j,k;
float randomperc();
sumfitness=0;
for(j = 0; j < popsize; j++)
{
sumfitness = sumfitness + pop[j].fitness; //trova la fitness totale
}
partsum=0.; j=0;
do
{
partsum += pop[j].fitness;
j++;
} while(!((partsum>=rand)||(j==popsize)));
return(j-1);
}
Esempio
Crossover.
Prima:
s1` = 1111010101 s5` = 0100010011
s2` = 1110110101 s6` = 1110111101
Dopo:
s1`` = 1110110101 s5`` = 0100011101
s2`` = 1111010101 s6`` = 1110110011
Codice: crossover
int crossover (unsigned *parent1, *parent2, *child1, *child2)
{
int j, jcross, k; unsigned mask, temp;
if(flip(pcross))
{
jcross = rnd(1 ,(lchrom - 1));/* Cross tra 1 and l-1 */ ncross++;
for(k = 1; k <= chromsize; k++)
{
if(jcross >= (k*UINTSIZE)) {child1[k-1] = parent1[k-1]; child2[k-1] = parent2[k-1];}
else if((jcross < (k*UINTSIZE)) && (jcross > ((k-1)*UINTSIZE)))
{
mask = 1;
for(j = 1; j <= (jcross-1-((k-1)*UINTSIZE)); j++)
{ temp = 1; mask = mask<<1; mask = mask|temp; }
child1[k-1] = (parent1[k-1]&mask)|(parent2[k-1]&(~mask));
child2[k-1] = (parent1[k-1]&(~mask))|(parent2[k-1]&mask);
}
else { child1[k-1] = parent2[k-1]; child2[k-1] = parent1[k-1]; }
}
}
else
{
for(k = 0; k < chromsize; k++) { child1[k] = parent1[k]; child2[k] = parent2[k]; }
jcross = 0;
}
return(jcross);
}
Esempio
Mutazione:ogni bit sottoposto ad una piccola probabilit
derrore (per esempio 0.1)
Prima: Dopo:
Risposta:
dipende dal problema
in generale, meglio avere entrambi
entrambi hanno il loro ruolo
generalmente, usare solo mutazione possibile, usare solo
crossover non funziona bene
Rappresentazioni
Possibili codifiche degli individui
Bit strings (0101 ... 1100)
Real numbers (43.2 -33.1 ... 0.0 89.2)
Permutations of element (E11 E3 E7 ... E1 E15)
Lists of rules (R1 R2 R3 ... R22 R23)
Elementi di programmi (genetic programming)
... strutture dati ...
Rappresentazioni
Alcuni problemi hanno varabili intere, per. esempio segnali campionati
Altri problemi hanno valori da un insieme prefissato
Molti problemi sono intrinsicamente reali, tipicamente lottimizzazione
f:n
Esempio: la funzione di Ackleys
Crossover tra valori reali
Discrete:
each allele value in offspring z comes from one of its
parents (x,y) with equal probability: zi = xi or yi
Could use n-point or uniform
Intermediate
exploits idea of creating children between parents
(hence a.k.a. arithmetic recombination)
zi = xi + (1 - ) yi where : 0 1.
The parameter can be:
constant: uniform arithmetical crossover
variable (e.g. depend on the age of the population)
picked at random every time
Crossover aritmetico
singolo
Genitori: x1,,xn e y1,,yn
Scegliere a caso un gene (k)
il figlio :
x1 , ..., xk , yk (1 ) xk , ..., xn
ugualmente per laltro figlio. Esempio ( = 0.5)