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

📄 firebrigadeagent.java

📁 2004年robotcup世界冠军源代码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            lastCoordinate = lastBuilding.x();            distanceToEnd = Math.abs(lastCoordinate - target.getMinX());            break;        }        return distanceToEnd;    }    public int getNumberVictimInConnectedBldgsAroundSite(FireSite site) {        int numOfSearch = 1;        int numberVictim = 0;        HashSet<Building> cndBldgs = new HashSet<Building>();        HashSet<Building> unBurnedBldgs = new HashSet<Building>();        List targets = site.burningBuildings();        float Sumof_Dis = 0;        for (int i = 0; i < numOfSearch; i++) {            site.sumCndValues = 0.0f;            for (Iterator it = targets.iterator(); it.hasNext(); ) {                Building bd = (Building) it.next();                for (int k = 0; k < bd.connectedBuildings.size(); k++) {                    Building bd1 = (Building) bd.connectedBuildings.get(k);                    if (!bd1.isBurning())                        site.sumCndValues += bd.connectionValues[k] *                                bd1.buildingAreaTotal();                }                cndBldgs.addAll(bd.connectedBuildings);            }            unBurnedBldgs.addAll(FIERYNESS_PRP.eq(0).extract(cndBldgs));            if (i == 0)                site.numConnectedBldgs = unBurnedBldgs.size() / targets.size();            site.sumCndValues /= site.getTotalArea();            targets.clear();            cndBldgs.removeAll(bagoor.not().extract(cndBldgs));            targets.addAll(cndBldgs);        }        List victimPositions = POSITION_PRP.collect(world.needRescueCivs);        for (int i = 0; i < targets.size(); i++) {            Building bd = (Building) targets.get(i);            Sumof_Dis +=                    Util.distance(bd.x(), bd.y(), site.getCenter().x,                                  site.getCenter().y);            for (int j = 0; j < victimPositions.size(); j++) {                if ((RealObject) victimPositions.get(j) == bd)                    numberVictim++;            }        }        site.DistancetoConnecteds = Sumof_Dis / targets.size();        return numberVictim;    }    public void selectReachableSites() {        for (Iterator it = fireSites.iterator(); it.hasNext(); ) {            FireSite site = (FireSite) it.next();            int index = 0;            while (index < site.burningBuildings().size() && !site.isReachable()) {                Building bd = (Building) site.burningBuildings().get(index);                List unburnedBldgs = FIERYNESS_PRP.eq(0).and                                     (bd.distancePrp.lte(SimulatorsConstants.                        EXTINGUISHABLE_DISTANCE)).extract(world.buildings);                for (int j = 0; j < unburnedBldgs.size(); j++) {                    if (REACHABLE_C.eval((Building) unburnedBldgs.get(j))) {                        site.setReachability(true);                        break;                    }                }                site.setReachability(true);                index++;            }        }    }    public boolean isSiteReachable(FireSite site) {        Building bd;        bd = (Building) X_PRP.max(site.getMaxXBldg().neighbourBuildings);        if (REACHABLE_C.eval(bd)) {            site.setReachability(true);            return true;        }        bd = (Building) X_PRP.min(site.getMinXBldg().neighbourBuildings);        if (REACHABLE_C.eval(bd)) {            site.setReachability(true);            return true;        }        bd = (Building) Y_PRP.max(site.getMaxYBldg().neighbourBuildings);        if (REACHABLE_C.eval(bd)) {            site.setReachability(true);            return true;        }        bd = (Building) Y_PRP.min(site.getMinYBldg().neighbourBuildings);        if (REACHABLE_C.eval(bd)) {            site.setReachability(true);            return true;        }        return false;    }    public Point getSecureCenterOfMap() {        Set unBurnedBuildings = new HashSet(world.buildings);        unBurnedBuildings.removeAll(world.burningBuildings);        int sumX = 0;        int sumY = 0;        for (Iterator it = unBurnedBuildings.iterator(); it.hasNext(); ) {            Building bd = (Building) it.next();            sumX += bd.x();            sumY += bd.y();        }        sumX /= unBurnedBuildings.size();        sumY /= unBurnedBuildings.size();        return new Point(sumX, sumY);    }    public void extinguishLastPutOutSite() throws ActionCommandException {        if (target == null)            return;        if (target.isIgniteAgain)            sitereignit = true;        if (!areSitesFinished)            return;        if (target.burnedDownBuildings().isEmpty())            return;        world.sortByID(world.fireBrigades);        Collections.sort(target.getFires(), fierynessComparator);        if (target.isPutOff) {            Building putOffBldg;            int index = world.fireBrigades.indexOf(self());            if (index >= target.burnedDownBuildings().size()) {                int randomBldg = random.nextInt(target.burnedDownBuildings().                                                size());                putOffBldg = (Building) target.burnedDownBuildings().get(                        randomBldg);            } else                putOffBldg = (Building) target.burnedDownBuildings().get(index);            if (sitereignit) {                if (putOffBldg.buildingAreaTotal() <= 15673)                    putOffBldg.extraExtinguishTime2 = 1;                else if (putOffBldg.buildingAreaTotal() <= 25000)                    putOffBldg.extraExtinguishTime2 = 2;                else if (putOffBldg.buildingAreaTotal() > 25000 &&                         putOffBldg.buildingAreaTotal() < 55000)                    putOffBldg.extraExtinguishTime2 = 3;                else                    putOffBldg.extraExtinguishTime2 = 4;                putOffBldg.timeOfPutout = time();                //putOffBldg.isBurnedDownTimeSet = true;                sitereignit = false;            }//            if ( time() >= putOffBldg.timeOfPutout + putOffBldg.extraExtinguishTime) putOffBldg.isPutOutAndExtinguish = true;            if (time() <                putOffBldg.timeOfPutout +                putOffBldg.extraExtinguishTime2 /* && putOffBldg.isBurnedDownTimeSet                                 if ( time() < putOffBldg.timeOfPutout + putOffBldg.extraExtinguishTime && sitereignit/* && putOffBldg.isBurnedDownTimeSet                                  /* && !putOffBldg.isPutOutAndExtinguish */                      ) {//                System.out.println("Man too lastam self " + self().id + " time "//                        + time() + " putout bldg " + putOffBldg.id + " fieryness " + putOffBldg.fieryness() );                  if (self().distance(putOffBldg) <                      SimulatorsConstants.EXTINGUISHABLE_DISTANCE) {                      extinguish(putOffBldg);                  } else                      move(putOffBldg.entrance());              }        }    }    public void areSitesFinished() {        areSitesFinished = true;        for (Iterator it1 = fireSites.iterator(); it1.hasNext(); ) {            FireSite isBurining = (FireSite) it1.next();            if (!isBurining.burningBuildings().isEmpty()) {                areSitesFinished = false;                break;            }        }    }    private boolean isTargetAssigned = false;    public void assignSmallSiteToAgent(FireSite site) {        if (site.burningBuildings().isEmpty()) {            site.setValue(Float.MAX_VALUE);            return;        }        int index = firebrigadesAssignedToDistance.indexOf(self());        if (!site.isSensingTimeSet) {            site.sensingTime = time();            site.isSensingTimeSet = true;        }        switch (index) {        case 0:            target = site;            isTargetAssigned = true;            break;        case 1:            target = site;            isTargetAssigned = true;            break;        case 2:            if (time() - site.sensingTime >= 4) {                target = site;                isTargetAssigned = true;            } else                site.setValue(site.getTotalArea());            break;        case 3:            if (time() - site.sensingTime >= 6) {                target = site;                isTargetAssigned = true;            } else                site.setValue(site.getTotalArea());            break;        case 4:            if (time() - site.sensingTime >= 8) {                target = site;                isTargetAssigned = true;            } else                site.setValue(site.getTotalArea());            break;        case 5:            if (time() - site.sensingTime >= 10) {                target = site;                isTargetAssigned = true;            } else                site.setValue(site.getTotalArea());            break;        case 6:            if (time() - site.sensingTime >= 12) {                target = site;                isTargetAssigned = true;            } else                site.setValue(site.getTotalArea());            break;        default:            site.setValue(site.getTotalArea());        }    }    private List<Integer> distanceToSite = new ArrayList<Integer>();    private List<FireBrigade> firebrigadesAssignedToDistance = new ArrayList<            FireBrigade>();    void sortAgentDistanceToSite(FireSite site) {//        if  world.fireStations.isEmpty()        distanceToSite.clear();        firebrigadesAssignedToDistance.clear();        for (Iterator it = world.fireBrigades.iterator(); it.hasNext(); ) {            FireBrigade fb = (FireBrigade) it.next();            int distance = Util.distance(fb.x(), fb.y(),                                         (int) site.getCenter().getX(),                                         (int) site.getCenter().getY());            if ( fb.motionlessPosition() instanceof Refuge )                distance += 1000000;            distanceToSite.add(distance);            firebrigadesAssignedToDistance.add(fb);        }        for (int i = 0; i < distanceToSite.size(); i++)            for (int j = 0; j < distanceToSite.size() - 1; j++)                if (distanceToSite.get(j) > distanceToSite.get(j + 1)) {                    int temp = distanceToSite.get(j + 1);                    distanceToSite.set(j + 1, distanceToSite.get(j));                    distanceToSite.set(j, temp);                    FireBrigade fb = firebrigadesAssignedToDistance.get(j + 1);                    firebrigadesAssignedToDistance.set(j + 1,                            firebrigadesAssignedToDistance.get(j));                    firebrigadesAssignedToDistance.set(j, fb);                }    }    private List<Integer> distanceToBuilding = new ArrayList<Integer>();    private List<FireBrigade> firebrigadesAssignedToBuilding = new ArrayList<            FireBrigade>();    public void sortAgentDistanceToBuilding(Building bd)    {        distanceToBuilding.clear();        firebrigadesAssignedToBuilding.clear();        for (Iterator it = world.fireBrigades.iterator(); it.hasNext(); )        {            FireBrigade fb = (FireBrigade)it.next();            int distance = Util.distance(fb.x(), fb.y(), bd.x(), bd.y() );            if ( fb.motionlessPosition() instanceof Refuge )                distance += 1000000;            distanceToBuilding.add(distance);            firebrigadesAssignedToBuilding.add(fb);        }        for (int i = 0; i < distanceToBuilding.size(); i++)            for (int j = 0; j < distanceToBuilding.size() - 1; j++)        if (distanceToBuilding.get(j) > distanceToBuilding.get(j + 1)) {            int temp = distanceToBuilding.get(j + 1);            distanceToBuilding.set(j + 1, distanceToBuilding.get(j));            distanceToBuilding.set(j, temp);            FireBrigade fb = firebrigadesAssignedToBuilding.get(j + 1);            firebrigadesAssignedToBuilding.set(j + 1,                    firebrigadesAssignedToBuilding.get(j));            firebrigadesAssignedToBuilding.set(j, fb);        }    }    // end of FireBrigade}

⌨️ 快捷键说明

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