add helpers
This commit is contained in:
parent
9ded9c43a2
commit
afb9d0e7dd
12
src/machine_learning/helpers.py
Normal file
12
src/machine_learning/helpers.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from tile import Tile
|
||||||
|
|
||||||
|
|
||||||
|
def get_dataset_from_tile(tile: Tile):
|
||||||
|
return {
|
||||||
|
'visibility': tile.visibility,
|
||||||
|
'stability': tile.stability,
|
||||||
|
'armed': tile.mine.armed,
|
||||||
|
'ground': tile.ground,
|
||||||
|
'mine_type': tile.mine.mine_type,
|
||||||
|
'pressure_gt_two': True if tile.mine.pressure > 2 else False
|
||||||
|
}
|
33
src/main.py
33
src/main.py
@ -7,6 +7,7 @@ from environment import Environment
|
|||||||
from tilesFactory import TilesFactory
|
from tilesFactory import TilesFactory
|
||||||
from src.search_algoritms.a_star import a_star
|
from src.search_algoritms.a_star import a_star
|
||||||
from search_algoritms.BFS import breadth_first_search
|
from search_algoritms.BFS import breadth_first_search
|
||||||
|
from machine_learning.helpers import get_dataset_from_tile
|
||||||
from machine_learning.decision_tree import get_decision, tree_root
|
from machine_learning.decision_tree import get_decision, tree_root
|
||||||
|
|
||||||
|
|
||||||
@ -24,15 +25,27 @@ def handle_keys(env: Environment, agent: Agent, game_ui: GameUi, factory: TilesF
|
|||||||
or (agent.direction == 3 and agent.x * 80 > 5)
|
or (agent.direction == 3 and agent.x * 80 > 5)
|
||||||
or (agent.direction == 0 and agent.y * 80 > 0)
|
or (agent.direction == 0 and agent.y * 80 > 0)
|
||||||
or (agent.direction == 2 and agent.y * 80 < 700)):
|
or (agent.direction == 2 and agent.y * 80 < 700)):
|
||||||
print('Moving forward')
|
|
||||||
game_ui.move()
|
game_ui.move()
|
||||||
|
print('Moving forward')
|
||||||
elif event.key == pg.K_SPACE:
|
elif event.key == pg.K_SPACE:
|
||||||
if env.field[agent.y][agent.x].mine:
|
if env.field[agent.y][agent.x].mine:
|
||||||
print('Defusing')
|
print('Defusing')
|
||||||
|
tile = env.field[agent.y][agent.x]
|
||||||
|
|
||||||
|
dataset = get_dataset_from_tile(tile)
|
||||||
|
decision = get_decision(dataset, tree_root)
|
||||||
|
|
||||||
|
print(f'Data: {dataset}')
|
||||||
|
print(f'Decision: {decision}')
|
||||||
|
|
||||||
|
if decision == 'detonation':
|
||||||
|
game_ui.kaboom()
|
||||||
|
|
||||||
env.mine_count -= 1
|
env.mine_count -= 1
|
||||||
env.field[agent.y][agent.x] = factory.create_tile(
|
env.field[agent.y][agent.x] = factory.create_tile(
|
||||||
IMAGES[env.field[agent.y][agent.x].number].parent
|
IMAGES[env.field[agent.y][agent.x].number].parent
|
||||||
)
|
)
|
||||||
|
|
||||||
game_ui.update()
|
game_ui.update()
|
||||||
|
|
||||||
|
|
||||||
@ -68,27 +81,19 @@ def main():
|
|||||||
# path, actions = breadth_first_search(env.field, agent.x, agent.y, agent.direction)
|
# path, actions = breadth_first_search(env.field, agent.x, agent.y, agent.direction)
|
||||||
goal = breadth_first_search(env.field, agent.x, agent.y, agent.direction, True)
|
goal = breadth_first_search(env.field, agent.x, agent.y, agent.direction, True)
|
||||||
path, actions = a_star(env.field, agent.x, agent.y, agent.direction, goal)
|
path, actions = a_star(env.field, agent.x, agent.y, agent.direction, goal)
|
||||||
|
|
||||||
if not path and not env.field[agent.y][agent.x].mine:
|
if not path and not env.field[agent.y][agent.x].mine:
|
||||||
print('Unable to find path, rocks are in the way')
|
print('Unable to find path, rocks are in the way')
|
||||||
break
|
break
|
||||||
print(f'Path{path}')
|
print(f'Path{path}')
|
||||||
|
|
||||||
print(f'Actions:{actions}')
|
print(f'Actions:{actions}')
|
||||||
for action in actions:
|
for action in actions:
|
||||||
pg.fastevent.post(pg.event.Event(pg.KEYDOWN, {'key': action}))
|
pg.fastevent.post(pg.event.Event(pg.KEYDOWN, {'key': action}))
|
||||||
goal_tile = env.field[goal[1]][goal[0]]
|
|
||||||
data = {
|
|
||||||
'visibility': goal_tile.visibility,
|
|
||||||
'stability': goal_tile.stability,
|
|
||||||
'armed': goal_tile.mine.armed,
|
|
||||||
'ground': goal_tile.ground,
|
|
||||||
'mine_type': goal_tile.mine.mine_type,
|
|
||||||
'pressure_gt_two': True if goal_tile.mine.pressure > 2 else False
|
|
||||||
}
|
|
||||||
decision = get_decision(data, tree_root)
|
|
||||||
pg.fastevent.post(pg.event.Event(pg.KEYDOWN, {'key': pg.K_SPACE}))
|
|
||||||
handle_keys(env, agent, game_ui, factory)
|
handle_keys(env, agent, game_ui, factory)
|
||||||
print(data)
|
pg.fastevent.post(pg.event.Event(pg.KEYDOWN, {'key': pg.K_SPACE}))
|
||||||
print(f'Decision: {decision}')
|
|
||||||
print('Sector clear')
|
print('Sector clear')
|
||||||
else:
|
else:
|
||||||
pg.fastevent.post(event)
|
pg.fastevent.post(event)
|
||||||
|
Loading…
Reference in New Issue
Block a user