private ArrayList<Building> getProbabilisticBuilding() { ArrayList<Building> probabilisticBuildings = new ArrayList<Building>(); boolean[] checked = new boolean[agent.model().buildings().size()]; for (Building b : agent.model().buildings()) { b.setSpecialForFire(0, "reset"); boolean fireProbability = hasFireProbability(b); if (fireProbability) { log.info("Fire Prob " + b); if (!checked[b.getBuildingIndex()]) { b.setSpecialForFire(0, "reset"); probabilisticBuildings.add(b); checked[b.getBuildingIndex()] = true; log.info("\t\t aded " + b); } for (Building neigh : b.realNeighbors_Building()) { if (!checked[neigh.getBuildingIndex()]) { // && hasFireProbability(neigh) neigh.setSpecialForFire(0, "reset"); probabilisticBuildings.add(neigh); checked[neigh.getBuildingIndex()] = true; log.info("\t\t aded " + neigh); } } } } return probabilisticBuildings; }
private void addProbScore(ArrayList<Building> region, Building center) { for (Building neigh : center.realNeighbors_Building()) { neigh.setSpecialForFire(neigh.getValuSpecialForFire() - 100000, " -100 " + center); ////////////////////////////////////// if (neigh.updatedtime() >= center.updatedtime()) { log.info("\t\t\t Neigh is update " + neigh); continue; } if (neigh.updatedtime() >= center.getTemperatureIncreasedTime()) { log.info( "\t\t\t Neigh is update after sensed temp " + neigh + " NeighUpdTime=" + neigh.updatedtime() + "\t increaseTime=" + center.getTemperatureIncreasedTime()); continue; } ///////////////////////////////// if (agent.model().time() - neigh.updatedtime() < Math.min(8, agent.model().time() / 2)) continue; if (center.updatedtime() < neigh.updatedtime() + 3) continue; if (!region.contains(neigh)) continue; neigh.setSpecialForFire(neigh.getValuSpecialForFire() + 100000, "Add 100 score "); double t = temperatureScore(center); t *= (center.getRealNeighValue(neigh) + 0.001) * 100d / ((Math.max(1, distance(center, neigh) / 1000))); if (center.getTemperature() < 3) t += center.getNeighValue(neigh) * 200 * temperatureScore(center); double c = 1; for (Building n2 : neigh.realNeighbors_Building()) { if (n2.getTemperature() > 0) c -= neigh.getNeighValue(n2); else c += neigh.getRealNeighValue(n2); } neigh.setSpecialForFire( neigh.getValuSpecialForFire() + (int) (Math.ceil(t * c)), " temp = " + temperatureScore(center) + " distance and neigh = " + t + " c " + c + " " + center); // if (!res.contains(neigh)) // res.add(neigh); } }
private ArrayList<Building> getBestProb(ArrayList<Building> region) { for (Building b : region) { if (hasFireProbability(b)) { addProbScore(region, b); } else { if (agent.model().time() - b.updatedtime() < Math.min(7, agent.model().time() / 2) && b.isTemperatureDefined() && b.getTemperature() == 0) { for (Building neigh : b.realNeighbors_Building()) { double t = 0; double c = 0; for (Building n2 : neigh.realNeighbors_Building()) { if (n2.getTemperature() > 0) c -= neigh.getRealNeighValue(n2); else c += neigh.getRealNeighValue(n2); } t = (b.getRealNeighValue(neigh) + 0.001) * 100d / (Math.max(1, distance(b, neigh) / 1000)) * 3; if (c > 0) neigh.setSpecialForFire( neigh.getValuSpecialForFire() - (int) (Math.ceil(t * c)), "negative center=" + b + " t" + t + " c" + c); } } if (agent.model().time() == b.updatedtime()) { if (b.getTemperature() == 0) { for (Building neigh : b.realNeighbors_Building()) { if (neigh.getGroundArea() > 1.7 * b.getGroundArea()) neigh.setSpecialForFire( neigh.getValuSpecialForFire() - 50, "negative value update in big building=" + b + " " + (-50)); } } } } } return region; }