private void checkAlakiStock(Path path) throws SOSActionException { log().info("checking alaki stock"); CycleInformations cycleinfo1 = me.informationStacker.getInformations(1); CycleInformations cycleinfo2 = me.informationStacker.getInformations(2); CycleInformations cycleinfo3 = me.informationStacker.getInformations(3); // Move Stock Move Stock Stock Stock log().trace("cycleinfo1:" + cycleinfo1); log().trace("cycleinfo2:" + cycleinfo2); log().trace("cycleinfo3:" + cycleinfo3); if (!(cycleinfo1.getAct() instanceof MoveAction) || cycleinfo1.getAct() instanceof StockMoveAction) return; if ( /* !(cycleinfo2.getAct() instanceof MoveAction) || */ !(cycleinfo2.getAct() instanceof StockMoveAction)) return; if (!(cycleinfo3.getAct() instanceof MoveAction) || cycleinfo3.getAct() instanceof StockMoveAction) return; log() .debug( "cycleinfo1:" + cycleinfo1.getPositionPair() + "cycleinfo2:" + cycleinfo2.getPositionPair() + " cycleinfo3:" + cycleinfo3.getPositionPair()); if (SOSGeometryTools.getDistance( cycleinfo1.getPositionPair().second(), cycleinfo2.getPositionPair().second()) < MoveConstants.TRAFFIC_CHECKING_DISTANCE && SOSGeometryTools.getDistance( cycleinfo1.getPositionPair().second(), cycleinfo3.getPositionPair().second()) < MoveConstants.TRAFFIC_CHECKING_DISTANCE) { Path randomPath = bfs.getDummyRandomWalkPath(); me.send( new AKMove( me.getID(), me.time(), randomPath.getIds(), randomPath.getDestination().second().getIntX(), randomPath.getDestination().second().getIntY())); sendStockMessage(path); me.informationStacker.addInfo(me.model(), new StockMoveAction(randomPath)); throw new SOSActionException("Move Stock Random Walk(" + randomPath + ")"); } }
@SuppressWarnings("unused") private void check4CycleStock() throws SOSActionException { CycleInformations cycleinfo1 = me.informationStacker.getInformations(1); CycleInformations cycleinfo2 = me.informationStacker.getInformations(2); CycleInformations cycleinfo3 = me.informationStacker.getInformations(3); CycleInformations cycleinfo4 = me.informationStacker.getInformations(4); if (cycleinfo2.getAct() instanceof StockMoveAction) return; if (cycleinfo1.getAct() instanceof MoveAction && cycleinfo2.getAct() instanceof MoveAction && cycleinfo3.getAct() instanceof MoveAction && cycleinfo4.getAct() instanceof MoveAction) { // Path path1 = ((MoveAction) cycleinfo1.getAct()).getPath(); // Path path2 = ((MoveAction) cycleinfo2.getAct()).getPath(); // Path path3 = ((MoveAction) cycleinfo3.getAct()).getPath(); // Path path4 = ((MoveAction) cycleinfo4.getAct()).getPath(); log().debug("Four(4) cycle move ...."); log().debug("1 cycle ago position:" + cycleinfo1.getPositionPair()); log().debug("2 cycle ago position:" + cycleinfo2.getPositionPair()); log().debug("3 cycle ago position:" + cycleinfo3.getPositionPair()); log().debug("4 cycle ago position:" + cycleinfo4.getPositionPair()); if (cycleinfo1.getPositionPair().first().equals(cycleinfo2.getPositionPair().first()) && cycleinfo1.getPositionPair().first().equals(cycleinfo3.getPositionPair().first()) && cycleinfo1.getPositionPair().first().equals(cycleinfo4.getPositionPair().first())) { if (SOSGeometryTools.getDistance( cycleinfo1.getPositionPair().second(), cycleinfo2.getPositionPair().second()) < MoveConstants.TRAFFIC_CHECKING_DISTANCE && SOSGeometryTools.getDistance( cycleinfo1.getPositionPair().second(), cycleinfo3.getPositionPair().second()) < MoveConstants.TRAFFIC_CHECKING_DISTANCE && SOSGeometryTools.getDistance( cycleinfo1.getPositionPair().second(), cycleinfo4.getPositionPair().second()) < MoveConstants.TRAFFIC_CHECKING_DISTANCE) { //////////////////// DO TRAFFIC///////////////////////////// log().warn("4 cycle stock!--> do random walk"); move(bfs.getDummyRandomWalkPath(), false); } } } }
// TODO add stopped time to 3 cycles private void checkTraffic() throws SOSActionException { log().info("Checking traffic"); if (me.time() < 4) { log().debug("No Traffic! Beacuse time is less than 4"); return; } CycleInformations cycleinfo1 = me.informationStacker.getInformations(1); CycleInformations cycleinfo2 = me.informationStacker.getInformations(2); CycleInformations cycleinfo3 = me.informationStacker.getInformations(3); if (cycleinfo1.getAct() instanceof MoveAction && cycleinfo2.getAct() instanceof MoveAction && cycleinfo3.getAct() instanceof MoveAction) { // Path path1 = ((MoveAction) cycleinfo1.getAct()).getPath(); Path path2 = ((MoveAction) cycleinfo2.getAct()).getPath(); // Path path3 = ((MoveAction) cycleinfo3.getAct()).getPath(); log().info("Three(3) cycle move ...."); log().debug("1 cycle ago position:" + cycleinfo1.getPositionPair()); log().debug("2 cycle ago position:" + cycleinfo2.getPositionPair()); log().debug("3 cycle ago position:" + cycleinfo3.getPositionPair()); if (cycleinfo1.getPositionPair().first().equals(cycleinfo2.getPositionPair().first()) && cycleinfo1.getPositionPair().first().equals(cycleinfo3.getPositionPair().first())) { if (SOSGeometryTools.getDistance( cycleinfo1.getPositionPair().second(), cycleinfo2.getPositionPair().second()) < MoveConstants.TRAFFIC_CHECKING_DISTANCE && SOSGeometryTools.getDistance( cycleinfo1.getPositionPair().second(), cycleinfo3.getPositionPair().second()) < MoveConstants.TRAFFIC_CHECKING_DISTANCE) { if (path2.getEdges() != null && !path2.getEdges()[0].haveTraffic()) { this.traffic.add(new Pair<GraphEdge, Integer>(path2.getEdges()[0], me.time())); path2.getEdges()[0].setHaveTraffic(); log().info("Traffic added to " + path2.getEdges()[0]); } } } } }
private void check2CycleStock() throws SOSActionException { CycleInformations cycleinfo1 = me.informationStacker.getInformations(1); CycleInformations cycleinfo2 = me.informationStacker.getInformations(2); if (!(cycleinfo1.getAct() instanceof MoveAction) || cycleinfo1.getAct() instanceof StockMoveAction) return; if (!(cycleinfo2.getAct() instanceof MoveAction) || cycleinfo1.getAct() instanceof StockMoveAction) return; Path path1 = ((MoveAction) cycleinfo1.getAct()).getPath(); // Path path2 = ((MoveAction) cycleinfo2.getAct()).getPath(); log().info("Two(2) cycle move ...."); log().debug("current position:" + me.me().getAreaPosition()); log().debug("1 cycle ago position:" + cycleinfo1.getPositionPair()); log().debug("2 cycle ago position:" + cycleinfo2.getPositionPair()); if (!cycleinfo1.getPositionPair().first().equals(cycleinfo2.getPositionPair().first())) return; if (!cycleinfo1.getPositionPair().first().equals(me.me().getAreaPosition())) return; if (SOSGeometryTools.getDistance( cycleinfo1.getPositionPair().second(), cycleinfo2.getPositionPair().second()) > MoveConstants.TRAFFIC_CHECKING_DISTANCE) return; //////////////// Stock Occured log().debug("2 cycle stock occured!!!!!!!"); ArrayList<EntityID> entityPath = new ArrayList<EntityID>(); Area area = me.me().getAreaPosition(); log().debug("Current Position:" + area); entityPath.add(area.getID()); Edge ed; Area ne; if (path1.getIds().size() > 0 && !path1.getIds().get(0).equals(area.getID())) { ne = (Area) me.model().getEntity(path1.getIds().get(0)); ed = area.getEdgeTo(ne); } else if (path1.getIds().size() > 1 && path1.getIds().get(0).equals(area.getID())) { ne = (Area) me.model().getEntity(path1.getIds().get(1)); ed = area.getEdgeTo(ne); } else { ne = area.getNeighbours().get(0); ed = area.getEdgeTo(ne); } log().debug("ne:" + ne + " ed:" + ed + " last move path:" + path1); if (ed == null) { log().error("[Move]edge is null!!!!!some problem!!!!"); ne = area.getNeighbours().get(0); ed = area.getEdgeTo(ne); log().debug("changed!!!! ne:" + ne + " ed:" + ed + " last move path:" + path1); } Point2D destXYAPointNearEdge; if (ed != null) { // if (area instanceof Road) { Pair<Point2D, Point2D> points = getAPointInReachblePartEdges(area, ed); destXYAPointNearEdge = points.second(); // } else { // Line2D wallLine = ed.getLine();// new Line2D(edge.getStartX(), edge.getStartY(), // edge.getEndX() - edge.getStartX(), edge.getEndY() - edge.getStartY()); // // ppp.add(new ShapeDebugFrame.Line2DShapeInfo(wallLine, "edge", Color.white.darker(), // false, false)); // Vector2D offset; // if (lastStockTime < me.time() - 4) { // if (AliGeometryTools.havecorrectDirection(area)) { // offset = wallLine.getDirection().getNormal().normalised().scale(1500); // } else { // offset = wallLine.getDirection().getNormal().normalised().scale(-1500); // } // } else { // if (!AliGeometryTools.havecorrectDirection(area)) { // offset = wallLine.getDirection().getNormal().normalised().scale(1500); // } else { // offset = wallLine.getDirection().getNormal().normalised().scale(-1500); // } // } // destXYAPointNearEdge = ed.getMidPoint().plus(offset); // } } else { log().error("[Move]edge is null!!!!!some problem!!!!"); destXYAPointNearEdge = area.getPositionPair().second(); } log().debug("dest area for stock:" + area + " dst point:" + destXYAPointNearEdge); me.send( new AKMove( me.getID(), me.time(), entityPath, (int) destXYAPointNearEdge.getX(), (int) destXYAPointNearEdge.getY())); Path path = new Path( null, null, entityPath, me.me().getPositionPair(), new Pair<Area, Point2D>(area, destXYAPointNearEdge), false); me.informationStacker.addInfo(me.model(), new StockMoveAction(path)); // log().warn("Traffic Handeling should be change due to server doesn't support AKMotion"); lastStockTime = me.time(); throw new SOSActionException("Move Stock(" + area + " " + destXYAPointNearEdge + ")"); }