コード例 #1
0
ファイル: SOSFireProbability.java プロジェクト: jpollo/rcrss
  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;
  }
コード例 #2
0
ファイル: SOSFireProbability.java プロジェクト: jpollo/rcrss
  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);

    }
  }
コード例 #3
0
ファイル: SOSFireProbability.java プロジェクト: jpollo/rcrss
  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;
  }