Ejemplo n.º 1
0
  /**
   * main method of fire zone manager</br> this method call each cycle to update and determine new
   * fire zone
   *
   * @param time
   */
  public void update(int time) {
    long t1 = System.currentTimeMillis();
    log.info("size of fireSites " + getFireSites().size());
    printZoneData();
    if (me instanceof FireBrigadeAgent) {
      //			log.info("move updateIslands to updater ! ", null);
      ((FireWorldModel) model).updateIslands();
    }
    for (Iterator<Pair<ArrayList<SOSRealFireZone>, SOSEstimatedFireZone>> it =
            getFireSites().iterator();
        it.hasNext(); ) {
      Pair<ArrayList<SOSRealFireZone>, SOSEstimatedFireZone> p = it.next();
      checkEstimator(p.second());
      log.info("update fireZone  " + p);
      log.info("\tupdate estimated fireZone  " + p.second());
      p.second().update(time);
      for (SOSRealFireZone f : p.first()) {
        log.info("\tupdate real fireZone  " + f);
        f.update(time);
      }
    }
    log.info("going to create new fireZones  ");
    createNewZones(time);

    log.info("going to merge fireZones    ");
    mergeFireZones();
    printZoneData();
    //		if (!SOSConstant.IS_CHALLENGE_RUNNING)
    //			log.warn("Fire Zone Updater Finished  Time= " + (System.currentTimeMillis() - t1) + " ms
    // ");

  }
Ejemplo n.º 2
0
  /**
   * create new fire zones by buildings that don't belong to any existence fire zones
   *
   * @param time
   */
  private void createNewZones(int time) {
    for (Iterator<Building> it = model.fieryBuildings().iterator(); it.hasNext(); ) {
      Building b = it.next();

      if (b.getSOSEstimateFireSite() == null) {
        SOSEstimatedFireZone estimatefz = new SOSEstimatedFireZone(lastAssignedIndex, this);
        lastAssignedIndex++;
        log.info("New Estimate Fire Zone Created  " + estimatefz + "\t" + b);
        getFireSites()
            .add(
                new Pair<ArrayList<SOSRealFireZone>, SOSEstimatedFireZone>(
                    new ArrayList<SOSRealFireZone>(), estimatefz));
        updateNewSite(b, estimatefz);
        estimatefz.update(time);
      }

      if (b.getSOSRealFireSite() == null) {
        SOSRealFireZone realfz = new SOSRealFireZone(lastAssignedIndex, this);
        lastAssignedIndex++;
        log.info("New Real Fire Zone Created  " + realfz + "\t" + b);
        getFireZonePair(b.getSOSEstimateFireSite()).first().add(realfz);
        updateNewSite(b, realfz);
        realfz.update(time);
      }
    }
  }
Ejemplo n.º 3
0
 public ArrayList<Building> getAllRealBuilding() {
   ArrayList<Building> targets = new ArrayList<Building>();
   for (int i = 0; i < fireSites.size(); i++) {
     for (SOSRealFireZone fs : fireSites.get(i).first()) {
       targets.addAll(fs.getAllBuildings());
     }
   }
   return targets;
 }
Ejemplo n.º 4
0
  /**
   * merge real fire zones
   *
   * @param targets
   * @param mergeList
   */
  private void mergeRealFireZones(
      Pair<ArrayList<SOSRealFireZone>, SOSEstimatedFireZone> target,
      ArrayList<SOSAbstractFireZone> mergeList) {
    if (target == null) return;
    ArrayList<SOSRealFireZone> realZones = target.first();

    getFireSites().remove(target);

    SOSRealFireZone newRealFireSite = new SOSRealFireZone(lastAssignedIndex++, this);
    SOSRealFireZone real;

    for (SOSAbstractFireZone fz : mergeList) {
      real = (SOSRealFireZone) fz;
      realZones.remove(real);
      for (Building b : real.getAllBuildings()) {
        if (!b.getSOSRealFireSite().equals(newRealFireSite)) {
          b.setSOSRealFireSite(newRealFireSite);
          newRealFireSite.addFieryBuilding(b);
          newRealFireSite.updateXY(b, 1);
        }
      }
      real.update(model.time());
    }

    realZones.add(newRealFireSite);
    getFireSites()
        .add(
            new Pair<ArrayList<SOSRealFireZone>, SOSEstimatedFireZone>(realZones, target.second()));
  }