Compare commits

..

7 Commits

Author SHA1 Message Date
c42a1038bc Update 'final-evaluation.md' 2020-06-15 13:26:55 +00:00
8ec7efaafa Zaktualizuj 'final-evaluation.md' 2020-06-15 13:22:05 +00:00
jonspacz
500f051946 Neural Network raport 2020-06-15 15:07:53 +02:00
Michał Czekański
5aaba17b2e Add printing tree decision to console 2020-06-15 14:59:37 +02:00
Michał Czekański
c5497ff291 Add proper death message when food recognition failed 2020-06-15 14:52:55 +02:00
Michał Czekański
e132a1ceaf Add beginning of final-evaluation and information about Decision Tree usage 2020-06-15 14:24:04 +02:00
Michał Czekański
7f6cec3107 Add empty final-evaluation file 2020-06-15 14:18:17 +02:00
3 changed files with 43 additions and 1 deletions

34
final-evaluation.md Normal file
View File

@ -0,0 +1,34 @@
# DSZI_Survival
Przetrwanie na bezludnej wyspie.
## Podprojekty w DSZI_Survival:
* Genetic Algorithm Affinities
* Genetic Algorithm Travelling
* Neural Networks - recognizing food images
* Decision Tree - deciding whether go for food, water or rest.
## Wykorzystanie podprojektów przez agenta
### Decision Tree
W trakcie działania programu drzewo decyzyjne pomaga agentowi-rozbitkowi podjąć decyzję,
czy powinien on w danej chwili:
* zbierać pożywienie
* pójść po wodę
* odpocząć przy ognisku
### Neural Network
W trakcie działania programu sieć neuronowa pomaga podjąć decyzję czy znalezione pożywienie jest jadalne
czy nie. W przypadku, w którm agent się pomyli dochodzi do zatrucia i do końca gry.
Na bezludnej wyspie znajdują się tylko dwa rodzaje owoców:
* Jabłka
* Gruszki
Celem agenta jest przetrwanie jak najdłużej.
### Genetic Algorithm Travelling
Po uruchomieniu aplikacji algorytm genetyczny wyznacza optymalną trasę/kolejność do zebrania ziół,
dzięki którym jego statystyki zresetują się do początkowego pozytywnego poziomu. Optymalna ścieżka
do zebrania ziół jest potrzebna, aby agent nie stracił zbyt wielu statystyk przed wykonaniem zadania.
### Genetic Algorithm Affinities
Celem algorytmu jest znalezienie 4 optymalnych wartości - skłonności (priorytetu) determinujących wybór kolejnego celu agenta. Wyznacznikiem czasu przetrwania jest ilość kroków pokonanych przez agenta (fitness).

View File

@ -192,10 +192,12 @@ class Game:
self.spritesList.draw(self.screen.pygameScreen) self.spritesList.draw(self.screen.pygameScreen)
pygame.display.flip() pygame.display.flip()
self.running = False self.running = False
continue
# Choose target for player using decision tree # Choose target for player using decision tree
if self.player.movementTarget is None: if self.player.movementTarget is None:
pickedEntity = survivalDecisionTree.pickEntity(self.player, self.map) pickedEntity = survivalDecisionTree.pickEntity(self.player, self.map)
self.screen.ui.console.printToConsole("I've decided to go for: {}".format(pickedEntity.classifier.name))
if pickedEntity.classifier == Classifiers.FOOD: if pickedEntity.classifier == Classifiers.FOOD:
result = image_predictor.predict_image() result = image_predictor.predict_image()
self.screen.ui.console.printToConsole("I think it is a: " + result[1]) self.screen.ui.console.printToConsole("I think it is a: " + result[1])
@ -205,6 +207,7 @@ class Game:
else: else:
self.screen.ui.console.printToConsole("I was wrong") self.screen.ui.console.printToConsole("I was wrong")
self.player.alive = False self.player.alive = False
self.player.deathReason = "Wrong food recognition"
continue continue
self.player.gotoToTarget(survivalDecisionTree.pickEntity(self.player, self.map), self.map) self.player.gotoToTarget(survivalDecisionTree.pickEntity(self.player, self.map), self.map)
@ -433,11 +436,14 @@ class Game:
self.spritesList.draw(self.screen.pygameScreen) self.spritesList.draw(self.screen.pygameScreen)
pygame.display.flip() pygame.display.flip()
self.running = False self.running = False
continue
# Choose target for player using decision tree # Choose target for player using decision tree
if self.player.movementTarget is None: if self.player.movementTarget is None:
self.player.gotoToTarget(survivalDecisionTree.pickEntity(self.player, self.map), self.map) pickedEntity = survivalDecisionTree.pickEntity(self.player, self.map)
self.player.gotoToTarget(pickedEntity, self.map)
decisionsMade += 1 decisionsMade += 1
self.screen.ui.console.printToConsole("I've decided to go for: {}".format(pickedEntity.classifier.name))
if pauseAfterDecision: if pauseAfterDecision:
pause = True pause = True

View File

@ -187,6 +187,8 @@ class Ui:
deathReasonString = "Exhaustion" deathReasonString = "Exhaustion"
elif deathReason is StatisticNames.THIRST: elif deathReason is StatisticNames.THIRST:
deathReasonString = "Dehydration" deathReasonString = "Dehydration"
else:
deathReasonString = "Wrong food recognition"
consoleLines.append("Death reason: " + deathReasonString) consoleLines.append("Death reason: " + deathReasonString)