From 430cdc761e95511daa4238a14f64097c6229b7cf Mon Sep 17 00:00:00 2001 From: xVulpeSx Date: Thu, 14 Apr 2022 23:21:44 +0200 Subject: [PATCH 1/2] change Game structure --- data/Game.py | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/data/Game.py b/data/Game.py index 5171059..502dfd2 100644 --- a/data/Game.py +++ b/data/Game.py @@ -1,32 +1,37 @@ +from data import Direction from data.CATEGORY import CATEGORY from data.Item import Item from data.Order import Order - +from typing import Dict class Game: - def __init__(self, id: int, agentPos: (int, int), deliveryPos: (int, int), orderPos: (int,int), stockPilePos: [(int,int)], - deliveryItem: Item, agentHandId: int, orderStock:[id], orderList: [Order] ): + def __init__(self, id: int, agentPos: (int, int), agentDirection: Direction, deliveryPos: (int, int), orderPos: (int,int), stockPilePos: Dict, + deliveryItem: Item, carriedItem: Item, orderStock: Dict, orderList: [Order]): + self.agentDirection = agentDirection self.id = id self.agentPos = agentPos self.deliveryPos = deliveryPos self.orderPos = orderPos self.stockPilePos = stockPilePos self.deliveryItem = deliveryItem - self.agentHandId = agentHandId + self.carriedItem = carriedItem self.orderStock = orderStock self.orderList = orderList - def move(self, x: int, y:int): - self.agentPos = (x, y) - - def pickUp(self, item: Item): - self.deliveryItem = item - - def drop(self, item: Item): - self.deliveryItem = -1 - - def identify(item: Item, category: CATEGORY): - item.category = category - - def finishOrder(order: Order): - order.id = -1 \ No newline at end of file + def getCopy(self): + newGame = Game(self) + return newGame + # def move(self, x: int, y: int): + # self.agentPos = (x, y) + # + # def pickUp(self, item: Item): + # self.deliveryItem = item + # + # def drop(self, item: Item): + # self.deliveryItem = -1 + # + # def identify(item: Item, category: CATEGORY): + # item.category = category + # + # def finishOrder(order: Order): + # order.id = -1 \ No newline at end of file -- 2.20.1 From 39b1530a717883fc69b5996b45be9c98801ca658 Mon Sep 17 00:00:00 2001 From: xVulpeSx Date: Thu, 14 Apr 2022 23:25:07 +0200 Subject: [PATCH 2/2] prototype of agent logic --- test/nastepnik.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 test/nastepnik.py diff --git a/test/nastepnik.py b/test/nastepnik.py new file mode 100644 index 0000000..b610361 --- /dev/null +++ b/test/nastepnik.py @@ -0,0 +1,108 @@ +from enum import Enum +from typing import Tuple, Dict + +from data import Game, Direction + +def getHotSpot(game:Game) -> (int, int): + pass + +def isOrderReady(game:Game) -> bool: + pass + +def getReadyOrderId(game:Game) -> int: + pass + +class Action(): + + + def __init__(self, game: Game): + self.game = Game + + def rotate(self, direction: Direction) -> Game: + self.game.agentDirection = direction + pass + + def move(self) -> Game: + # w zaleznosci od kierunku napierdala do przodu + pass + + def special(self) -> Game: + # w zaleznosci od miejsca gdzie jest i czy ma cos na lapie odklada albo bierze przedmiot + pass + + def orderOut(self, orderId: int) -> Game: + # nalicza punkty wypierdalaorder i czysci orderStock + pass + +def heuristic(a: Tuple[int, int], b: Tuple[int, int]) -> float: + (x1, y1) = a + + (x2, y2) = b + return abs(x1 - x2) + abs(y1 - y2) + +class PossibleMoves(Enum): + rotateTop = 1 + rotateLeft = 2 + rotateDown = 3 + rotateRight = 4 + move = 5 + +def getRotationEvaluation(direction: Direction): + # get evaluationForMoveAfterRotation + return 1.0 + +def evaluateMoves(game: Game) -> Dict: + posibleMoves = Dict + currPos = game.agentPos + gameCopy = game.getCopy() + getRotationEvaluation() + posibleMoves[PossibleMoves.move] = heuristic(currPos, Action(gameCopy).move().agentPos) + posibleMoves[PossibleMoves.rotateTop] = getRotationEvaluation(Direction.Direction.top) + posibleMoves[PossibleMoves.rotateLeft] = getRotationEvaluation(Direction.Direction.left) + posibleMoves[PossibleMoves.rotateDown] = getRotationEvaluation(Direction.Direction.down) + posibleMoves[PossibleMoves.rotateRight] = getRotationEvaluation(Direction.Direction.right) + return posibleMoves + +def getIndex(value: float, dict: Dict) -> PossibleMoves: + for key, val in dict: + if val == value: + return key + +def getMaxFromList(list: [float]) -> float: + maxi = -10000000 + for i in range(len(list)): + if list[i] > maxi: + maxi = list[i] + + return maxi + +def getBestPossibleMove(game: Game) -> PossibleMoves: + movesDict = evaluateMoves() + bestChoice = getMaxFromList(movesDict.values()) + return getIndex(bestChoice, movesDict) + +def getBestMove(game: Game) -> Game: + gameCopy = game.getCopy() + bestPossibleMove = getBestPossibleMove(gameCopy) + + if bestPossibleMove == PossibleMoves.move: + return Action(gameCopy).move() + elif bestPossibleMove == PossibleMoves.rotateTop: + return Action(gameCopy).rotate(Direction.Direction.top) + elif bestPossibleMove == PossibleMoves.rotateLeft: + return Action(gameCopy).rotate(Direction.Direction.left) + elif bestPossibleMove == PossibleMoves.rotateDown: + return Action(gameCopy).rotate(Direction.Direction.down) + else: + return Action(gameCopy).rotate(Direction.Direction.right) + + + +def nastepnik(game: Game) -> Game: + if isOrderReady(game) > -1: + return Action(game.getCopy()).orderOut(getReadyOrderId(game)) + elif game.agentPos == getHotSpot(game): + return Action(game.getCopy()).special() + else: + return getBestMove(game) + -- 2.20.1