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

📄 firebrigadeagent.java

📁 2004年robotcup世界冠军源代码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                numberFb++;        }        if (self().distance(target_Building) <            MRL.Utilities.SimulatorsConstants.EXTINGUISHABLE_DISTANCE            && target_Building.isBurning() &&            ((self().motionlessPosition() instanceof Building) ||             ((self().motionlessPosition() instanceof Road) &&              (((Road) self().motionlessPosition()).passableLines() > numberFb)) ||             (minPass > numberFb) || canExtinguish)) {            canExtinguish = false;            if (self().distance(target_Building) <                MRL.Utilities.SimulatorsConstants.EXTINGUISHABLE_DISTANCE                && target_Building.isBurning() &&                !(((self().motionlessPosition() instanceof Road) &&                   (((Road) self().motionlessPosition()).passableLines() >                    numberFb)) || (minPass > numberFb)))                canExtinguish = true;            extinguish(target_Building);        }        if (self().distance(target_Building) <            MRL.Utilities.SimulatorsConstants.EXTINGUISHABLE_DISTANCE            && target_Building.isBurning() &&            !(((self().motionlessPosition() instanceof Road) &&               (((Road) self().motionlessPosition()).passableLines() > numberFb)) ||              (minPass > numberFb)))            canExtinguish = true;    }    public void moreExtinguish() throws ActionCommandException {        if (target_Building == null)            return;        if (target_Building.isBurning())            target_Building.isPutoutTimeSet = false;        if (!(target_Building.isBurning()) && !target_Building.isPutoutTimeSet) {            target_Building.timeOfPutout = time();            target_Building.isPutoutTimeSet = true;        }        if (time() <            (target_Building.timeOfPutout + target_Building.extraExtinguishTime) &&            target_Building.extraExtinguishTime != 0 &&            target_Building.isPutoutTimeSet            &&            self().distance(target_Building) <= SimulatorsConstants.EXTINGUISHABLE_DISTANCE) {            extinguish(target_Building);        }    }    void findNearestRefugeToSite(FireSite site) {        double nearestPos = -1.0;        Refuge nearestRefuge = null;        Point sitePos = site.getCenter();        for (Iterator it = world.refuges.iterator(); it.hasNext(); ) {            Refuge ref = (Refuge) it.next();            int x = ref.motionlessPosition().x();            int y = ref.motionlessPosition().y();            Point pos = new Point(x, y);            double distanceToRefuge = sitePos.distance(pos);            if (distanceToRefuge < nearestPos) {                nearestPos = distanceToRefuge;                nearestRefuge = ref;            }        }        site.setDistanceToNearestRefuge(nearestPos);        site.setNearestRefuge(nearestRefuge);    }    List<FireSite> reigniteSites = new ArrayList<FireSite>();    public void setValueForSelf(FireSite site) {        if (site.isPutOff) { // If site is putoff ignore it.            if (reigniteSites.contains(site))                reigniteSites.remove(site);            site.setValue(Float.MAX_VALUE);            return;        } else if (site.isIgniteAgain) {            if (!reigniteSites.contains(site)) {                reigniteSites.add(site);            }        }        if (!isSiteReachable(site)) {            site.setValue(site.getTotalArea());//            site.setValue(Float.MAX_VALUE);//            System.out.println("Not reachable " + self().id + " time " + time()    +//                    " disSiteToCenter " + getDistanceToCenterOfMap(site)*.00001   );            return;        }        float minArea = Float.MAX_VALUE;        float mindistanceToCenter = Float.MAX_VALUE;        float distToCenter = 10;        for (int i = 0; i < fireSites.size(); i++) {            if (fireSites.get(i).getTotalArea() < minArea &&                fireSites.get(i).getTotalArea() > 10.75)                minArea = fireSites.get(i).getTotalArea();            distToCenter = getDistanceToCenterOfMap(fireSites.get(i));            if (distToCenter < mindistanceToCenter)                mindistanceToCenter = distToCenter;        }        float areaValue = (site.getTotalArea() / minArea);        int coefOfMapSize = 1;        if (world.nodes.size() > 1500)            coefOfMapSize = 2;        float value;        int X = self().position().x();        int Y = self().position().y();        int disToSite = Util.distance(X, Y, site.getCenter().x,                                      site.getCenter().y);        int tempCoef = 1;        //float disCoef = 1;        int distanceToCenterofMAp = getDistanceToCenterOfMap(site);        if (time() <= 15)            tempCoef = 2;        float disCoef = (distanceToCenterofMAp / mindistanceToCenter);        value = (float) (site.getNumberOfbuildings() * .2 +                         site.totalFieryness_Area * 0.00005 +                         site.getTotalArea() * .00001 +                         (disToSite * .00001 * tempCoef * coefOfMapSize) +                         (getNumberVictimInConnectedBldgsAroundSite(site) *                          ( -2) + distanceToCenterofMAp * .00001 * disCoef)); // coefficient of disToSite changed : .01 to .0001        value += site.sumCndValues * -1 + areaValue * .2;        //System.out.println(" Time " + time() + "  Self "+self().id + " numBldgs " + site.getNumberOfbuildings()*.2 + " Tota Fireness Area " + site.totalFieryness_Area*0.00005 +" TOTAREA " + site.getTotalArea() * .00001 +        //      " Distance to center: "+ .00001*getDistanceToCenterOfMap(site)+" Distance to self: " + disToSite*.00001  +" victim "+getNumberVictimInConnectedBldgsAroundSite(site)*(-1)+" value connected "  +        //    site.sumCndValues*-1 /*+" num connected "+site.numConnectedBldgs*-1 */ + " AreaValue " + areaValue*2  + " Value: " + value);        //System.out.flush();        site.setValue(value);    }    private Property X_PRP = new Property() {        public Object eval(Object obj) {            return new Integer(((MotionlessObject) obj).x());        }    };    private Property Y_PRP = new Property() {        public Object eval(Object obj) {            return new Integer(((MotionlessObject) obj).y());        }    };    public int getNumberVictimInDirection(int direction, FireSite site) {        List positions = POSITION_PRP.collect(world.needRescueCivs);        int count = 0;        int mainDepthSearch = 35000;        int x_DepthSearch = Math.abs((site.getMaxX() - site.getMinX()) / 3);        int y_DepthSearch = Math.abs((site.getMaxY() - site.getMinY()) / 3);        switch (direction) {        case 0:            Condition northCondition = Y_PRP.gte(site.getMaxY() - y_DepthSearch).                                       and(Y_PRP.lte(site.getMaxY() +                    mainDepthSearch)).                                       and((X_PRP.gte(site.getMinX() -                    x_DepthSearch)).and(X_PRP.lte(site.getMaxX() +                                                  x_DepthSearch)));            count = Utils.getConditionCount(positions, northCondition);            break;        case 1:            Condition eastCondition = X_PRP.gte(site.getMaxX() - x_DepthSearch).                                      and(X_PRP.lte(site.getMaxX() +                    mainDepthSearch)).                                      and((Y_PRP.gte(site.getMinY() -                    y_DepthSearch)).and(Y_PRP.lte(site.getMaxY() +                                                  y_DepthSearch)));            count = Utils.getConditionCount(positions, eastCondition);            break;        case 2:            Condition southCondition = Y_PRP.gte(site.getMinY() -                                                 mainDepthSearch).and(Y_PRP.lte(                    site.getMinY() + y_DepthSearch)).                                       and((X_PRP.gte(site.getMinX() -                    x_DepthSearch)).and(X_PRP.lte(site.getMaxX() +                                                  x_DepthSearch)));            count = Utils.getConditionCount(positions, southCondition);            break;        case 3:            Condition westCondition = X_PRP.gte(site.getMinX() -                                                mainDepthSearch).and(X_PRP.lte(                    site.getMinX() + x_DepthSearch)).                                      and((Y_PRP.lte(site.getMaxY() +                    y_DepthSearch)).and(Y_PRP.gte(site.getMinY() -                                                  y_DepthSearch)));            count = Utils.getConditionCount(positions, westCondition);            break;        }        return count;    }    public void calculateVictimsAroundSite(FireSite site) {        int victimAround = 0;        int count = 0;        for (int i = 0; i < 4; i++) {            count = getNumberVictimInDirection(i, site);            victimAround += count;        }        site.setNumberVictimsAround(victimAround);    }    public int getVictimsAroundBuilding(Building bldg) {        int totalDistance = 0;        int victimCount = 0;        for (Iterator it = world.needRescueCivs.iterator(); it.hasNext(); ) {            Humanoid hum = (Humanoid) it.next();            int distance = bldg.distance(hum);            if (distance <= 20000) {                victimCount++;                totalDistance += distance;            }        }        bldg.setTotalDistanceToVictims(totalDistance);        return victimCount;    }    public final float inBlock = (float) Integer.MAX_VALUE *                                 (float) Integer.MAX_VALUE;    public boolean isTargetAccessible(Building bd) {        Building bldg;        bldg = (Building) bd.motionlessPosition();        Route rt;        rt = Router.get(self().motionlessPosition(), Collections.singleton(bldg),                        RELIABILITY_COST_FUNCTION);        if (rt.cost >= inBlock)            return false;        else            return true;    }    private Comparator valueComparator = new Comparator() {        public int compare(Object o1, Object o2) {            FireSite f1 = (FireSite) o1;            FireSite f2 = (FireSite) o2;            if (f1.getValue() > f2.getValue())                return 1;            if (f1.getValue() == f2.getValue())                return 0;            return -1;        }    };    private Comparator distanceComparator = new Comparator() {        public int compare(Object o1, Object o2) {            FireSite f1 = (FireSite) o1;            FireSite f2 = (FireSite) o2;            if (f1.getValue() > f2.getValue())                return 1;            if (f1.getValue() == f2.getValue())                return 0;            return -1;        }    };    private Comparator fierynessComparator = new Comparator() {        public int compare(Object o1, Object o2) {            Building b1 = (Building) o1;            Building b2 = (Building) o2;            if (b1.fieryness() < b2.fieryness())                return 1;            if (b1.fieryness() == b2.fieryness())                return 0;            return -1;        }    };    public void evaluateAmountOfExtraWater(Building bd) {        int Extracoef = 0;        bd.extraExtinguishTime = 0;        if (target.isIgniteAgain) {            Extracoef = 1;        }        if (bd.buildingAreaTotal() > 7500) {            if (bd.buildingAreaTotal() < 15000) {                bd.extraExtinguishTime = 1;            } else if (bd.buildingAreaTotal() < 25000) {                bd.extraExtinguishTime = 2;            } else if (bd.buildingAreaTotal() < 50000) {                bd.extraExtinguishTime = 3;            } else                bd.extraExtinguishTime = 0;        }        bd.extraExtinguishTime = bd.extraExtinguishTime * Extracoef;    }    public boolean isSiteExtinguishable(FireSite site) {        return site.getTotalArea() / world.fireBrigades.size() < 33000;    }    public List getTargetsInExtinguishDirection(int direction, FireSite site) {        List targetBuildings = null;        int x_DepthSearch = Math.abs((site.getMaxX() - site.getMinX()) / 3);        int y_DepthSearch = Math.abs((site.getMaxY() - site.getMinY()) / 3);        int y_minDistance = Util.min(35000, y_DepthSearch);        int x_minDistance = Util.min(35000, x_DepthSearch);        switch (direction) {        case 0:            Condition northCnd = Y_PRP.gte(site.getMaxY() -

⌨️ 快捷键说明

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