Dopo tanto penare dovuto all’utilizzo di uno solo dei 4 server Apple che abbiamo a disposizione (laziness mia, mista a problemi di configurazione vari), la batteria estiva di 18 simulazioni che avevo lanciato a suo tempo (vedi questo post) e’ giunta a conclusione. Tempo quindi di analizzare un po’ i risultati e guardare cosa ne e’ venuto fuori. Approfitto di questo post per mettere un po’ d’ordine nella marea di dati generati dal simulatore.

Uno degli obiettivi di queste simulazioni era quello di capire come sarebbe meglio implementare il roll. Nelle simulazioni 1 e 2 ho provato ad escluderlo del tutto, con i MAVs in grado di muoversi soltanto su due dimensioni (yaw e pitch). Movimento assolutamente non realistico, ma molto semplice. Non a caso i risultati migliori che ho ottenuto sono stati con questa configurazione. Le altre due alternative consistevano rispettivamente nel collegare il roll allo yaw (nel momento in cui un MAV effettua uno yaw si autogenera un corrispondente roll, simulazioni 3 e 4) o lasciarlo come una componente del tutto indipendente, con gli aeroplanini dunque liberi di muoversi lungo tre direzioni (simulazioni 5 e 6). Il motivo per il quale sono state elaborate due simulazioni per ciascuna configurazione e’ che per entrambe si confronta l’utilizzo di input continui (simulazioni 4 e 6) e di input discreti (simulazioni 3 e 5). Escludendo le prime due condizioni sperimentali (elaborate solo per scrupolo) concentriamo il confronto sulle altre 4.
| NN Architecture |
Av. Fitness |
Max. Fitness |
Success rate |
| 3 |
-130.3004 |
345.6638 |
0.4363 |
| 4 |
-35.2221 |
407.9116 |
0.5493 |
| 5 |
53.7617 |
406.5243 |
0.6026 |
| 6 |
5.4618 |
391.213 |
0.5749 |
Table Tutorial
Quello che emerge e’ che, in termini di fitness media, le architetture che utilizzano il roll in maniera indipendente, per quanto piu’ complesse, raggiungono performance significativamente migliori rispetto a quelle che hanno il roll legato allo yaw. Ragionando sulla fitness massima, come d’altronde e’ lecito aspettarsi i risultati si avvicinano un po’, pur continuando ad evidenziare una leggera supremazia delle simulazioni 5 e 6. Supremazia evidente anche guardando al success rate, che varia per le ultime due architetture tra il 57 ed il 60% contro il 43-55% delle concorrenti. Contrastanti invece i risultati riguardanti l’utilizzo di input discreti o continui. Con il roll legato allo yaw, la rete che riceve input continui sembra funzionare meglio rispetto a quella basata su input discretizzati. Nel caso dell roll indipendente, invece, pare che la discretizzazione abbia effetti positivi.
L’introduzione di uno strato intermedio nelle varie reti (simulazioni 7, 8, 9 e 10) fornisce un generale miglioramento delle performance, riassumibile nella seconda delle due tabelle presentate qui sotto.
| NN Architecture |
Av. Fitness |
Max. Fitness |
Success rate |
| 7 |
-82.8986 |
360.323 |
0.4754 |
| 8 |
49.8237 |
438.7521 |
0.6396 |
| 9 |
119.3603 |
444.415 |
0.6755 |
| 10 |
53.28 |
420.1875 |
0.6028 |
Table Tutorial
| NN Architecture |
Av. Fitness |
Max. Fitness |
Success rate |
| 7 vs 3 |
+36.37886% |
+4.2408837% |
+8.96172358% |
| 8 vs 4 |
+241.45579% |
+7.56058421% |
+16.4391043% |
| 9 vs 5 |
+122.01735% |
+9.32064824% |
+12.0975772% |
| 10 vs 6 |
+875.50258% |
+7.40632341% |
+4.85301792% |
Table Tutorial
L’introduzione di un hidden layer sembra dare un forte boost alle performance delle reti testate, senza tuttavie sovvertire le gerarchie che si erano stabilite in precedenza. Le soluzioni che utilizzano il rollaggio in maniera indipendente e non legata allo yaw confermano infatti la loro “supremazia”.
Infine ho testato altre otto architetture (dalla 11 alla 18 incluse), che ricalcano le caratteristiche delle 8 simulazioni precedenti (dalla 3 alla 10), introducendo pero’ delle ricorrenze degli output. Ricorrenze che prendono la forma di reti di Jordan nelle architetture 11, 12, 15 e 16, di reti di Elman nelle reti 13, 14, 17 e 18. Qui sotto le loro performance assolute ed un confronto con le reti equivalenti prive di ricorrenze.
| NN Architecture |
Av. Fitness |
Max. Fitness |
Success rate |
| 11 |
-221.9481 |
232.8541 |
0.2086 |
| 12 |
-160.9756 |
256.3188 |
0.2472 |
| 13 |
-258.8055 |
113.8254 |
0.1295 |
| 14 |
-265.2192 |
130.6172 |
0.155 |
| 15 |
-42.8824 |
311.3557 |
0.3581 |
| 16 |
-18.4841 |
346.6911 |
0.453 |
| 17 |
-92.2134 |
291.5339 |
0.3346 |
| 18 |
-85.5089 |
296.8809 |
0.3421 |
Table Tutorial
| NN Architecture |
Av. Fitness |
Max. Fitness |
Success rate |
| 11 vs 3 |
-70.3357% |
-32.635671% |
-52.188861% |
| 12 vs 4 |
-357.0301% |
-37.16315% |
-54.997269% |
| 13 vs 7 |
-212.1953% |
-68.410176% |
-72.759781% |
| 14 vs 8 |
-632.3153% |
-70.22984% |
-75.766104% |
| 15 vs 5 |
-179.7638% |
-23.41031% |
-40.574179% |
| 16 vs 6 |
-438.4251% |
-11.380476% |
-21.203688% |
| 17 vs 9 |
-177.2563% |
-34.400527% |
-50.466321% |
| 18 vs 10 |
-260.4897% |
-29.345614% |
-43.248175% |
Table Tutorial
Contrariamente alla credenza comune (e comunque in maniera limitata al caso specifico), l’introduzione di ricorrenze pare non apportare alcun beneficio alle mie reti. Le cui performance, al contrario, decrescono in maniera abbastanza significativa, pur conservando qualche buon picco in termini di fitness massima (condizione vera in particolare per le architetture 15 e 16).
Detto tutto cio’, la scelta per l’architettura da utilizzare per i prossimi scenari (un po’ piu’ complicati di quello presentato qui, dove i MAVs si dovevano muovere all’interno di un ambiente del tutto vuoto, cercando di raggiungere un target stazionario) ricade obbligatoriamente sulla numero 9. Input discretizzati, rolling indipendente dallo yaw, hidden layer e nessuna ricorrenza. Un po’ misera come conclusione dopo cotanto lavoro (in realta’ piu’ del server che non mio…), ma tant’e'…