Add file with for dt examples and manager capable of reading them
This commit is contained in:
parent
b8d2a4f379
commit
9dc74bc599
1
data/AI_data/DecisionTreeExamples/dt_examples
Normal file
1
data/AI_data/DecisionTreeExamples/dt_examples
Normal file
@ -0,0 +1 @@
|
|||||||
|
FOOD|THREE_QUARTERS_TO_FULL|ZERO_TO_QUARTER|THREE_QUARTERS_TO_FULL|GE_8|LT_3|GE_3_LT_8
|
116
src/AI/DecisionTrees/ExamplesManager.py
Normal file
116
src/AI/DecisionTrees/ExamplesManager.py
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
from typing import Any, Union
|
||||||
|
|
||||||
|
from src.AI.DecisionTrees.projectSpecificClasses.DistFromObject import DistFromObject
|
||||||
|
from src.AI.DecisionTrees.projectSpecificClasses.PlayerStatsValue import PlayerStatsValue
|
||||||
|
from src.AI.DecisionTrees.projectSpecificClasses.SurvivalClassification import SurvivalClassification
|
||||||
|
from src.AI.DecisionTrees.projectSpecificClasses.SurvivalDTExample import SurvivalDTExample
|
||||||
|
|
||||||
|
|
||||||
|
class ExamplesManager:
|
||||||
|
|
||||||
|
def __init__(self, examplesFilePath: str):
|
||||||
|
self.examplesFilePath = examplesFilePath
|
||||||
|
|
||||||
|
def readExamples(self):
|
||||||
|
examples = []
|
||||||
|
|
||||||
|
file = open(self.examplesFilePath, "r")
|
||||||
|
|
||||||
|
line = file.readline()
|
||||||
|
lineNum = 0
|
||||||
|
while line != "":
|
||||||
|
lineNum += 1
|
||||||
|
words = line.split("|")
|
||||||
|
|
||||||
|
if len(words) != 7:
|
||||||
|
print("Not sufficient amount of words in line {}.".format(str(lineNum)))
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Classification
|
||||||
|
parseSuccess = False
|
||||||
|
classification: SurvivalClassification
|
||||||
|
for classification in SurvivalClassification:
|
||||||
|
if words[0] == classification.name:
|
||||||
|
parseSuccess = True
|
||||||
|
break
|
||||||
|
if not parseSuccess:
|
||||||
|
print("Example classification not parsed at line {}.".format(str(lineNum)))
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Hunger value
|
||||||
|
parseSuccess = False
|
||||||
|
hungerAmount: PlayerStatsValue
|
||||||
|
for hungerAmount in PlayerStatsValue:
|
||||||
|
if hungerAmount.name == words[1]:
|
||||||
|
parseSuccess = True
|
||||||
|
break
|
||||||
|
if not parseSuccess:
|
||||||
|
print("Hunger not parsed at line {}.".format(str(lineNum)))
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Thirst value
|
||||||
|
parseSuccess = False
|
||||||
|
thirstAmount: PlayerStatsValue
|
||||||
|
for thirstAmount in PlayerStatsValue:
|
||||||
|
if thirstAmount.name == words[2]:
|
||||||
|
parseSuccess = True
|
||||||
|
break
|
||||||
|
if not parseSuccess:
|
||||||
|
print("Thirst not parsed at line {}.".format(str(lineNum)))
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Stamina value
|
||||||
|
parseSuccess = False
|
||||||
|
staminaAmount: PlayerStatsValue
|
||||||
|
for staminaAmount in PlayerStatsValue:
|
||||||
|
if staminaAmount.name == words[3]:
|
||||||
|
parseSuccess = True
|
||||||
|
break
|
||||||
|
if not parseSuccess:
|
||||||
|
print("Stamina not parsed at line {}.".format(str(lineNum)))
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Distance from food
|
||||||
|
parseSuccess = False
|
||||||
|
dstFromFood: DistFromObject
|
||||||
|
for dstFromFood in DistFromObject:
|
||||||
|
if dstFromFood.name == words[4]:
|
||||||
|
parseSuccess = True
|
||||||
|
break
|
||||||
|
if not parseSuccess:
|
||||||
|
print("Distance from food not parsed at line {}.".format(str(lineNum)))
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Distance from water
|
||||||
|
parseSuccess = False
|
||||||
|
dstFromWater: DistFromObject
|
||||||
|
for dstFromWater in DistFromObject:
|
||||||
|
if dstFromWater.name == words[5]:
|
||||||
|
parseSuccess = True
|
||||||
|
break
|
||||||
|
if not parseSuccess:
|
||||||
|
print("Distance from water not parsed at line {}.".format(str(lineNum)))
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Distance from rest place
|
||||||
|
parseSuccess = False
|
||||||
|
dstFromRest: DistFromObject
|
||||||
|
for dstFromRest in DistFromObject:
|
||||||
|
if dstFromRest.name == words[6]:
|
||||||
|
parseSuccess = True
|
||||||
|
break
|
||||||
|
if not parseSuccess:
|
||||||
|
print("Distance from rest place not parsed at line {}.".format(str(lineNum)))
|
||||||
|
continue
|
||||||
|
|
||||||
|
example = SurvivalDTExample(classification,
|
||||||
|
hungerAmount,
|
||||||
|
thirstAmount,
|
||||||
|
staminaAmount,
|
||||||
|
dstFromFood,
|
||||||
|
dstFromWater,
|
||||||
|
dstFromRest)
|
||||||
|
|
||||||
|
examples.append(example)
|
||||||
|
|
||||||
|
return examples
|
Loading…
Reference in New Issue
Block a user