You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doc/report.adoc
+70-48
Original file line number
Diff line number
Diff line change
@@ -256,15 +256,21 @@ I nodi disponibili per la sperimentazione fanno parte di due gruppi.
256
256
257
257
I nodi del primo gruppo sono:
258
258
259
-
260
-
- `isLightNearer`
261
-
- `moveForward`
259
+
- `checkForAndStore{Goal,Obstacle,Boundary,Visited}`: restituisce un successo solo se è presente l'entità della griglia specificata in una qualsiasi delle quattro direzioni cardinali ed entro un raggio predefinito. L'impostazione predefinita controlla le celle adiacenti al robot. Nel caso siano identificate le entità specificate, si memorizzano i punti corrispondenti nella lavagna del robot;
260
+
- `turnToAvoidStored`: restituisce un fallimento nel caso non ci siano punti memorizzati nella lavagna del robot. In caso contrario orienta il robot in una direzione casuale che evita il movimento sulle celle in corrispondenza dei punti indicati;
261
+
- `turnToFollowStored`: restituisce un fallimento nel caso non ci siano punti memorizzati nella lavagna del robot. In caso contrario orienta il robot in una direzione casuale tra quelle che consentono il movimento sulle celle in corrispondenza dei punti indicati;
262
262
263
263
I nodi del secondo gruppo sono:
264
264
265
-
- `checkFor{Goal,Obstacle,Boundary,Visited}{Forward,Left,Right}`: restituisce un successo solo se è presente l'entità della griglia specificata nella direzione fornita ed entro un raggio predefinito. In genere si controllano sono i vicini adiacenti nella direzione fornita;
265
+
- `checkFor{Goal,Obstacle,Boundary,Visited}{Forward,Left,Right}`: restituisce un successo solo se è presente l'entità della griglia specificata nella direzione fornita ed entro un raggio predefinito. L'impostazione predefinita controlla le celle adiacenti al robot nella direzione fornita;
266
266
- `turnTo{Left,Right}`: restituisce sempre un successo e fa muovere il robot nella direzione indicata di una cella. Se il movimento comporta lo scontro con un ostacolo o il superamento dei confini della griglia, è intercettato dalla macchina a stati finiti. Il movimento del robot è annullato e si memorizza l'avvenuta collisione. Analogamente si memorizzano le informazioni relative al movimento in celle già visitate e all'assenza di movimento;
267
-
- `moveForward`
267
+
268
+
I seguenti nodi sono presenti in entrambi i gruppi:
269
+
270
+
- `stop`: è un nodo azione che restituisce sempre un successo ma non alcun effetto.
271
+
- `turnRandomly`: è un nodo azione che imposta la direzione del robot in modo casuale;
272
+
- `isNearerLight`: è un nodo condizione restituisce un successo solo se il robot si è avvicinato alla luce rispetto all'ultimo spostamento;
273
+
- `moveForward`: è un nodo azione che fa muovere il robot di una cella in avanti, in funzione della direzione verso cui è orientato.
268
274
269
275
L'ambiente è modellato tramite celle libere o che contengono un ostacolo e tramite un token che indica la posizione iniziale del robot e uno che indica la posizione della luce da raggiungere. Si impiega una funzione di generazione casuale che imposta la posizione iniziale del robot e la luce agli opposti di una griglia quadrata. Gli ostacoli sono piazzati casualmente in modo da lasciare almeno un percorso libero tra la posizione di partenza e l'obiettivo.
270
276
@@ -327,6 +333,7 @@ La valutazione avviene a partire dalle statistiche raccolte sull'andamento di un
327
333
. distanza iniziale dalla luce;
328
334
. distanza finale dalla luce;
329
335
. numero di iterazioni con collisione;
336
+
. numero di iterazioni in cui l'agente è fermo;
330
337
. numero di celle rivisitate;
331
338
. numero di iterazioni effettuate;
332
339
. dimensione dell'albero di comportamento.
@@ -366,6 +373,19 @@ dove:
366
373
- `s_total` indica il numero di iterazioni totali;
367
374
- `w_collision` indica il peso della penalità per le collisioni.
368
375
376
+
La penalità legata al numero di iterazioni in cui l'agente non si muove spinge il processo di evoluzione a generare alberi di comportamento che restituiscono uno stato di successo, in quanto l'agente non compie azioni in un'iterazione se l'albero restituisce un fallimento.
377
+
Il calcolo della penalità avviene nel seguente modo:
378
+
379
+
[example]
380
+
----
381
+
-(s_idle / s_total) * w_idle
382
+
----
383
+
384
+
dove:
385
+
386
+
- `s_idle` indica il numero di iterazioni senza movimento;
387
+
- `w_idle` indica il peso della penalità per l'assenza di movimento.
388
+
369
389
Il numero di celle rivisitate incentiva la ricerca di percorsi efficienti, ovvero che riducono il backtracking il più possible.
370
390
Insieme al numero di iterazioni effettuate, consente di penalizzare percorsi eccessivamente lunghi.
371
391
La penalità complessiva è calcolata in modo analogo a quella per le collisioni:
@@ -401,7 +421,7 @@ In questo modo si migliora il grado di robustezza del controller e la sua capaci
401
421
402
422
=== DSL per alberi di comportamento e griglie
403
423
404
-
Per facilitare la definizione degli alberi di comportamento manuale, è stato implementato un DSL interno per realizzare una loro specifica concisa. Un esempio di utilizzo è mostrato in <<btree-dsl-example>> e una sua rappresentazione in <<btree-string>>.
424
+
Per facilitare la definizione degli alberi di comportamento manuale, è stato implementato un DSL interno per realizzare una loro specifica concisa. Un esempio di utilizzo è mostrato in <<btree-dsl-example>>.
405
425
406
426
[#btree-dsl-example]
407
427
.Rappresentazione di un albero di comportamento che consente di effettuare la navigazione in un GridWorld evitando gli ostacoli e dirigendosi verso la luce.
@@ -428,24 +448,6 @@ btree {
428
448
}
429
449
----
430
450
431
-
[#btree-string]
432
-
.Rappresentazione di un albero di comportamento in formato testuale.
433
-
[example]
434
-
----
435
-
└── Navigation
436
-
├── Phototaxis
437
-
│ ├── checkForAndStore[GreenLight]
438
-
│ ├── turnToFollowStored
439
-
│ └── moveForward
440
-
└── Sequence
441
-
├── Selector
442
-
│ ├── ObstacleAvoidance
443
-
│ │ ├── checkForAndStore[Obstacle, Boundary]
444
-
│ │ └── turnToAvoidStored
445
-
│ └── turnRandomly
446
-
└── moveForward
447
-
----
448
-
449
451
In modo analogo è stato definito un DSL per la specifica della struttura della griglia, un cui esempio di utilizzo è mostrato in <<grid-dsl-example>> e la relativa rappresentazione in <<grid-string>>.
450
452
451
453
[#grid-dsl-example]
@@ -495,36 +497,29 @@ Per quanto riguarda la qualità del codice sono stati impiegati gli strumenti `K
495
497
496
498
=== Esperimenti
497
499
498
-
I test sono stati eseguiti su un computer con un processore Intel Core i7-10700 @4.8 GHz e 16 GB di RAM. Le configurazioni dei principali parametri per ciascuno dei tre esperimenti che si è scelto di riportare sono mostrate in <<ga-params>>.
499
-
500
-
[#ga-params]
501
-
.Parametri impiegati per l'algoritmo genetico nei tre esperimenti in analisi. Il numero accanto a "Elitism" indica il numero di individui che formano l'elite di una generazione e il numero accanto a "Tournament" indica il numero di individui coinvolti in ciascun torneo.
In <<best-fitness>> è mostrato il miglior valore di fitness ottenuto in ciascuno dei tre esperimenti, a confronto con i risultati ottenuti da una baseline che impiega un selettore di Montecarlo.
500
+
I test sono stati eseguiti su un computer con un processore Intel Core i7-10700 @4.8 GHz e 16 GB di RAM.
501
+
È stata effettuata una grid search con le seguenti configurazioni di parametri:
502
+
503
+
- probabilità di crossover e mutazione:
504
+
- numero di elité e campione per i tornei;
505
+
- dimensioni della griglia, numero di ostacoli e massimo numero di iterazioni di ciascuna delle tre simulazioni utilizzate per il calcolo della fitness;
506
+
- profondità degli alberi generati casualmente, numero minimo e massimo di figli per ciascun nodo di controllo.
507
+
508
+
Per l'analisi dei risultati sono stati quindi considerati ventiquattro esperimenti, disponibili nel repository del progetto, link:[qui].
509
+
Il task gradle `runGAWithGridSearch` è stato impiegato per la generazione dei dati.
510
+
Di seguito si riportano i risultati ritenuti più rappresentativi del gruppo di esperimenti.
511
+
512
+
517
513
518
514
Si osserva che...
519
515
520
516
In <<best-fitness-candle>> si riporta un confronto con i valori di fitness ottenuti dagli alberi dei tre esperimenti a confronto con un albero di comportamento programmato manualmente e un albero che determina un movimento casuale nell'ambiente di test, come baseline di confronto.
521
-
Sono mostrati i risultati ottenuti aggregando il valore di fitness calcolato su una sequenza di cinque griglie casuali come ambiente di test per tutti gli alberi.
522
517
523
-
Si osserva che...
524
518
525
-
[#best-fitness]
526
-
.Grafico della miglior fitness ottenuta per ciascuna generazione nei tre esperimenti in analisi.
527
-
image::fitness_plot.png[align=center, scale=30%]
519
+
Sono mostrati i risultati ottenuti calcolando la media del valore di fitness su trentasei simulazioni ottenute considerando diverse configurazioni della griglia e un diverso numero di iterazioni per la simulazione.
520
+
I dati sono stati generati con il task gradle `compareBTrees`.
521
+
522
+
Si osserva che...
528
523
529
524
[#best-fitness-candle]
530
525
.Grafico a candela della miglior fitness ottenuta in ciascuno dei tre esperimenti in analisi, a confronto con i risultati ottenuti impiegando un albero per il movimento casuale e un albero sviluppato manualmente.
In X, Y e Z è riportato l'albero relativo al miglior genotipo.
534
529
In X e Y sono riportati gli alberi impiegati come baseline.
535
530
531
+
[#btree-handcrafted-baseline2]
532
+
.
533
+
534
+
[#btree-handcrafted-baseline]
535
+
.Rappresentazione di un albero di comportamento in formato testuale.
536
+
[example]
537
+
----
538
+
└── Navigation
539
+
├── Phototaxis
540
+
│ ├── checkForAndStore[GreenLight]
541
+
│ ├── turnToFollowStored
542
+
│ └── moveForward
543
+
└── Sequence
544
+
├── Selector
545
+
│ ├── ObstacleAvoidance
546
+
│ │ ├── checkForAndStore[Obstacle, Boundary]
547
+
│ │ └── turnToAvoidStored
548
+
│ └── turnRandomly
549
+
└── moveForward
550
+
----
551
+
552
+
[#exp-result-schema]
553
+
.Rappresentazione della schema impiegato per memorizzare i risultati di un esperimento.
554
+
[example]
555
+
----
556
+
536
557
I risultati di ciascun esperimento sono riportati impiegando lo schema indicato in <<exp-result-schema>>, oltre che quelli mostrati in <<exp-config-schema>> e <<exp-moments-schema>>.
0 commit comments