AI_PRO/main.py

94 lines
2.8 KiB
Python

import Board
import FindPath
import TractorAction
import WeatherConditions
import convertToPrediction
import drawUI
import Graphsearch as graph
from Tractor import Tractor
from TractorLoad import TillageUnit
from constants import *
from manualSteering import manualSteeringDriver
import joblib
import pygame
pygame.init()
display = pygame.display.set_mode((DISPLAY_SIZE_HORIZONTAL, DISPLAY_SIZE_VERTICAL))
pygame.display.set_caption('Tractor')
working = True
autoAction = True
animationSpeed = ANIMATION_PART
hitchCounter = 0
loadCounter = 0
toolCounter = - 1
#środowisko
board = Board.generate()
#agent
tractor = Tractor(horizontal_index=-0, vertical_index=0, hitch="nothing", header=False, autodrive=True,
direction="RIGHT")
tillageUnit = TillageUnit("Nothing")
tractor.turnOnEngine()
move_list = []
clock = pygame.time.Clock()
#zjawiska pogodowe
weather, day_time, temperature, wind, humidy = WeatherConditions.checkConditions()
weatherTimer = 0
#pętla główna działania programu
while working:
for event in pygame.event.get():
if event.type == pygame.QUIT:
working = False
if event.type == pygame.KEYDOWN:
hitchCounter, loadCounter = \
manualSteeringDriver(event, board, tractor, hitchCounter, tillageUnit, loadCounter)
field = board[tractor.horizontal_index][tractor.vertical_index]
if weatherTimer == 5:
weatherTimer = 0
weather, day_time, temperature, wind, humidy = WeatherConditions.checkConditions()
#sformulowanie informacji dla drzewa decyzyjnego / lista informacji o aktualnej pogodzie i polu
question = [convertToPrediction.convert(field.state, weather, day_time, temperature, wind, humidy)]
dtree = joblib.load('treedata\\DecisionTree.pkl')
#przekazanie informacji do drzewa
decision = dtree.predict(question)
if tractor.autodrive:
# A*************
if not move_list and decision == 1:
field.state = TractorAction.changeFieldState(field, tractor)
istate = graph.Istate(tractor.direction, tractor.horizontal_index, tractor.vertical_index)
move_list = graph.graphsearch([], [], istate, FindPath.nearestLookingField(board, tractor, TillageUnit), board)
print(move_list)
elif move_list:
tractor.auto_movement(move_list.pop(0))
# TractorAction.changeFieldState(field, tractor)
if field.horizontal_index == 0 and field.vertical_index == 0 and not move_list:
tractor, tillageUnit, toolCounter = TractorAction.autoToolsChange(tractor, tillageUnit, toolCounter)
drawUI.drawUI(board, display, tractor, tractor.direction, tillageUnit, field, animationSpeed, weather, day_time,
temperature, wind, humidy, decision)
clock.tick(FPS)
weatherTimer = weatherTimer + 1
pygame.quit()
quit()