⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 firebrigadeagent.java

📁 2004年robotcup世界冠军源代码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                    if (igniteSite.getTotalArea() <= 50000)                        myWaitingTime = 13 + extraWaiting * 2;                    else                        myWaitingTime = 11 + extraWaiting * 2;                } else {                    target = reigniteSites.get(1);                    return;                }                if (amISearching)                    myWaitingTime = 0;                break;            case 8:                if (reigniteSites.size() == 1) {                    igniteSite = reigniteSites.get(0);                    if (igniteSite.getTotalArea() <= 50000)                        myWaitingTime = 14 + extraWaiting * 2;                    else                        myWaitingTime = 12 + extraWaiting * 2;                } else {                    target = reigniteSites.get(1);                    return;                }                if (amISearching)                    myWaitingTime = 0;                break;            case 9:                myWaitingTime = 17 + extraWaiting * 2;                if (amISearching)                    myWaitingTime = 0;                break;            default:                myWaitingTime = 18 + extraWaiting * 2;                if (amISearching)                    myWaitingTime = 0;            }        }        FireSite site;        Iterator it = fireSites.iterator();        float minValue = Float.MAX_VALUE;        for (; it.hasNext(); ) {            site = (FireSite) it.next();            if (site.burningBuildings().isEmpty())                site.setValue(Float.MAX_VALUE);            isTargetAssigned = false;            if (site.getTotalArea() < 7500 && !site.burningBuildings().isEmpty()) {                sortAgentDistanceToSite(site);                assignSmallSiteToAgent(site);            }            if (isTargetAssigned) {                amISearching = false;                return;            }            if (time() - site.burningTime < myWaitingTime)                continue;            if (site.getValue() < minValue) {                minValue = site.getValue();                target = site;            }        }        if (target != null)            amISearching = false;    }    public void selectTarget() {        if (target == null) {            target_Building = null;            return;        }        double value = Double.MAX_VALUE;        double building_value = 0;        List targets;        int victimCount = 0;        if (!isSiteExtinguishable(target)) {            int totalVictim = 0;            int direction = 0;            int totalArea = 0;            int numBldgsInDirection = 0;            float mainValue = Float.MAX_VALUE;            int maxDistance = 1;            int[] distances = new int[4];            for (int k = 0; k < 4; k++) {                distances[k] = getLastCoordinateInDirection(k, target);                if (distances[k] > maxDistance)                    maxDistance = distances[k];            }            int[] averageDistance = new int[4];            for (int i = 0; i < 4; i++) {                totalVictim = 0;                totalArea = 0;                numBldgsInDirection = 0;                List bldgs = getTargetsInExtinguishDirection(i, target);                for (Iterator it = bldgs.iterator(); it.hasNext(); ) {                    Building bd = (Building) it.next();                    averageDistance[i] +=                            Util.distance(bd.x(), bd.y(),                                          getSecureCenterOfMap().x,                                          getSecureCenterOfMap().y);                    totalArea += bd.buildingAreaTotal();                    numBldgsInDirection += 1;                }                averageDistance[i] /= bldgs.size();                int tempValue = 0;                if (distances[i] / (maxDistance + 1) < 0.3)                    tempValue = (maxDistance / (distances[i] + 1)) * 2;                totalVictim = getNumberVictimInConnectedBldgs(i, target);                float dirValue = (float) (totalVictim * -6 +                                          totalArea * 0.00001 +                                          numBldgsInDirection * .5 + tempValue +                                          averageDistance[i] * 0.001);//              System.out.println(" self  " + self().id + " time " + time() +//                                   " Direction " + i + " Value " + dirValue +//                                   " total vic " + totalVictim * -5 +//                                   " totalArea " + totalArea * 0.00001 +//                                   " numbldgDirection " +//                                   numBldgsInDirection * .5 + " avrgDis " +//                                   averageDistance[i] * 0.001);                System.out.flush();                int tempFinal = totalArea / 15000;                world.sortByID(world.fireBrigades);                int indexFinal = world.fireBrigades.indexOf(self());                if ( tempFinal > indexFinal  )                {                    System.out.println("ok go to next direction self "                            + self().id + " tempFinal " + tempFinal                            + " time " + time()  );                  continue;                }                if (dirValue < mainValue) {                    mainValue = dirValue;                    direction = i;                }            }            target.setDirectionForExtinguish(direction);            targets = getTargetsInExtinguishDirection(direction, target);            extinguishBuildingsInDirection(targets);            return;        } else            targets = target.burningBuildings();        if (targets.isEmpty()) {            if (MRL.MRLConstants.FB_DEBUG_MODE)                System.out.println("No target");            return;        }        float mapSizeCoef = 1;        if (world.nodes.size() > 25000)            mapSizeCoef = 0.3f;        int k = 0;        for (Iterator it = targets.iterator(); it.hasNext(); ) {            Building bd = (Building) it.next();            sortAgentDistanceToBuilding(bd);   // 18 june            int index = firebrigadesAssignedToBuilding.indexOf(self());  // 18 june            if ( (( bd.buildingAreaTotal() / 5000 ) < index-k )&& (bd.buildingAreaTotal() < target.getTotalArea()/10 ) )               {                   k+= (int)(bd.buildingAreaTotal() / 5000 );                  // System.err.println("self to  bedoon dir " + self().id + " time " + time() + " continue "  );                   continue; // 18 june               }            if (bd.buildingAreaTotal() <= 58752.37) {                victimCount = getVictimsAroundBuilding(bd);                building_value = ((time() - bd.getFireStart()) +                                  self().distance(bd) * 0.001 * mapSizeCoef +                                  victimCount * -5                                  +                                  bd.fieryness() * bd.buildingAreaTotal() * 0.0001);            } else                building_value = bd.buildingAreaTotal();            if (building_value < value) {                if (MRL.MRLConstants.FB_DEBUG_MODE)                    System.err.println("Victim Around building " + victimCount);                value = building_value;                target_Building = bd;            }        }    }    private Building buildingToposition;    public void moveForExtinguish() throws ActionCommandException {        if (target_Building == null)            return;        if (self().distance(target_Building) <            SimulatorsConstants.EXTINGUISHABLE_DISTANCE && time() <= 15)            extinguish(target_Building); //it is clear        List surroundedBuildings = ACCESSABLE_BUILDINGS_TO_GO.extract(                target_Building.neighbourBuildings);//        List surroundedBuildings = ACCESSABLE_BUILDINGS_TO_GO.and (target_Building.distancePrp.lte(SimulatorsConstants.EXTINGUISHABLE_DISTANCE)).extract(world.buildings);        List surroundedRoads = (target_Building.distancePrp.lte(                SimulatorsConstants.EXTINGUISHABLE_DISTANCE)).extract(world.                nodes);        surroundedBuildings.removeAll(fullBuildings);        Node nearestRoad;        List<Building> reachableBldgs = new ArrayList<Building>();        for (int i = 0; i < surroundedBuildings.size(); i++) {            Building bd = (Building) surroundedBuildings.get(i);            if (REACHABLE_C.eval(bd))                reachableBldgs.add(bd);        }//        reachableBldgs.addAll(surroundedBuildings);        world.sortByID(reachableBldgs);        world.sortByID(world.fireBrigades);        int index = world.fireBrigades.indexOf(self());        if (index >= reachableBldgs.size()) {            //TODO go to the next target            if (MRL.MRLConstants.FB_DEBUG_MODE)                System.err.println("Natoonestam beram " + time() + " " +                                   self().id);            if (!surroundedRoads.isEmpty()) {                nearestRoad = (Node) target_Building.distancePrp.min(                        surroundedRoads);                if (self().motionlessPosition().id == nearestRoad.id                    &&                    self().distance(target_Building) < SimulatorsConstants.EXTINGUISHABLE_DISTANCE)                    extinguish(target_Building);                move(nearestRoad);            } else {                if (self().motionlessPosition().id ==                    target_Building.entrance().id                    &&                    self().distance(target_Building) < SimulatorsConstants.EXTINGUISHABLE_DISTANCE)                    extinguish(target_Building);                move(target_Building.entrance());            }        }        buildingToposition = (Building) reachableBldgs.get(index);        if (time() - lastMoveTime > 2 &&            self().motionlessPosition() != buildingToposition) {//            System.err.println("more than 2  self " + self().id + " time " + time() );            move(target_Building.neighbourBuildings);        }        if (!reachableBldgs.isEmpty() && !REACHABLE_C.eval(buildingToposition)) {            Building bldg = (Building) target_Building.distancePrp.min(                    reachableBldgs);            if (self().motionlessPosition().id == bldg.id                &&                self().distance(target_Building) < SimulatorsConstants.EXTINGUISHABLE_DISTANCE)                extinguish(target_Building);            if (REACHABLE_C.eval(bldg))                move(bldg.motionlessPosition());            else {                if (!surroundedRoads.isEmpty()) {                    nearestRoad = (Node) target_Building.distancePrp.min(                            surroundedRoads);                    if (self().motionlessPosition().id == nearestRoad.id                        &&                        self().distance(target_Building) <                        SimulatorsConstants.EXTINGUISHABLE_DISTANCE)                        extinguish(target_Building);                    move(nearestRoad);                } else {                    if (self().motionlessPosition().id == target_Building.id                        &&                        self().distance(target_Building) <                        SimulatorsConstants.EXTINGUISHABLE_DISTANCE)                        extinguish(target_Building);                    move(target_Building.entrance());                }            }        } else {            if (self().motionlessPosition().id == buildingToposition.id                &&                self().distance(target_Building) < SimulatorsConstants.EXTINGUISHABLE_DISTANCE)                extinguish(target_Building);            move(buildingToposition.motionlessPosition());        }    }    private boolean canExtinguish = false;    public void extinguishTarget() throws ActionCommandException {        if (target_Building == null)            return;//        System.out.println("self " + self().id + " mywaitingtime " + myWaitingTime + "" + " time " + time() +//                " myTarget " + target_Building.id + " targetAgainStart " + target.burningTime//                + " reigniteSize  " + reigniteSites.size() );        evaluateAmountOfExtraWater(target_Building);        int minPass = 0;        if (self().motionlessPosition() instanceof Node) {            Collection Connected_roads = ((Node) self().motionlessPosition()).                                         getConnectedRoads();            minPass = 10;            for (Iterator it = Connected_roads.iterator(); it.hasNext(); ) {                Road thisroad = (Road) it.next();                if (thisroad.passableLines() < minPass)                    minPass = thisroad.passableLines();            }        }        int numberFb = 0;        for (Iterator it = world.fireBrigades.iterator(); it.hasNext(); ) {            FireBrigade fb = (FireBrigade) it.next();            if (self().motionlessPosition() == fb.motionlessPosition() &&                fb.isVisible())

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -