Realizzare un programma che consigli, dati determinati parametri, usando Genetic Algorithms, il modo piú conveniente di coltivare un campo su Minecraft
Al programma vengono fornite le seguenti informazioni:
Il programma consiglia quanti blocchi dedicare a ogni tipo di coltivazione per ottenere la maggior quantitá di cibo possibile. Questo programma in particolare consiglia quanti dedicarne ai semi, alle carote e alle patate, e per farlo usa Genetic Algorithms (cosa sono).
Individuo: una possibile soluzione, in questo caso un gruppo di tre numeri (che rappresentano la quantitá di
blocchi da dedicare a ogni tipo di coltivazione).
Popolazione: gruppo di individui.
Punteggio: quantitá di cibo che si ottiene.
Vengono generate 600 popolazioni da 1000 individui casuali. Per ognuna di queste popolazioni trovo l'individuo con punteggio maggiore.
Faccio evolvere i 600 individui iniziali:
Sottopongo i tre parametri a piccole variazioni provando a vedere se é possibile migliorare ulteriormente il punteggio dell'individuo.
Dei 600 individui sottoposti a evoluzione scelgo il migliore.
Questi grafici sono stati generati dopo una esecuzione del programma, riportano sull'asse x il numero dell'individuo e sull'asse y il punteggio.
Si puó notare la differenza tra l'accuratezza di ricerca degli individui migliori della prima fase (generazione random dei 600.000 individui iniziali) e quella della seconda fase (evoluzione dei 600 individui migliori):
l'evoluzione permette di accrescere notevolmente e rapidamente il punteggio.
Il secondo grafico inoltre risponde alla domanda: perché ho bisogno di cosí tanti individui iniziali (600) da evolvere? Non basta sceglierne uno e farlo evolvere?
Nel grafico i punti piú in basso corrispondono agli individui prima dell'evoluzione, il punteggio si alza finché l'evoluzione non é completata. Peró non tutti gli individui arrivano allo stesso punteggio:
se ci si limita a pochi individui si rischia di ignorare individui con punteggi migliori.
In termini matematici, se si descrive una funzione che ha come input i nostri parametri e output il nostro punteggio si rischia di rimanere bloccati a massimi relativi, ignorando il massimo assoluto.