📄 firebrigadeagent.java
字号:
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 + -