Compare commits
7 Commits
neural_net
...
master
Author | SHA1 | Date | |
---|---|---|---|
c42a1038bc | |||
8ec7efaafa | |||
|
500f051946 | ||
|
5aaba17b2e | ||
|
c5497ff291 | ||
|
e132a1ceaf | ||
|
7f6cec3107 |
34
final-evaluation.md
Normal file
34
final-evaluation.md
Normal 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).
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user