Esempio n. 1
0
 public Evaluator() throws IOException {
   config = new EvaluatorConfig();
   switch (config.getType()) {
     case GENDREAU:
       evaluateGendreau();
       return;
   }
   throw new RuntimeException();
 }
Esempio n. 2
0
  private void evaluateGendreau() throws IOException {
    final EvaluatorGendreauConfig gconfig = new EvaluatorGendreauConfig(config);
    final GendreauEvaluator evaluator =
        new GendreauEvaluator(
            gconfig.getScenarios(),
            SolutionType.MYOPIC,
            gconfig.getInternalEvaluator(),
            new SimpleStopcondition(), // this does not matter
            new Absolute(), // this does not matter
            GendreauEvaluator.DEFAULT_NUMBER_OF_SCENARIOS_PER_GENERATION);
    config.getOutputFile().delete();
    if (config.isDry()) return;

    final BufferedWriter writer = new BufferedWriter(new FileWriter(config.getOutputFile()));

    writer.append(
        Joiner.on(",")
            .join(
                "genome_id", "scenario_id", "travel_time", "tardiness", "over_time", "total_cost"));
    writer.newLine();

    if (gconfig.getBatch()) { // batch mode
      System.out.println("Batch mode");
      System.out.println("Using data provider: " + gconfig.isUseDataprovider());

      final Map<String, BlackBox> idBbMap = newLinkedHashMap();
      for (final BlackBox bb : config.getGenomes()) {
        idBbMap.put(bb.getId(), bb);
      }

      final ResultDTO[][] results =
          evaluator.evaluateGenomes(
              config.getGenomes(),
              gconfig.getNumberOfScenariosInNonfinalGenerations(),
              gconfig.getNumberOfScenariosInFinalGeneration(),
              gconfig.isUseDataprovider());
      System.out.println("Results received, writing file");
      for (int m = 0; m < results.length; m++) {
        for (int n = 0; n < results[m].length; n++) {
          final ResultDTO cur = results[m][n];

          final String fileName = config.getGenomeMap().get(idBbMap.get(cur.taskDataId));
          final String fileId =
              new File(fileName).getName().replaceAll(" ", "").split("run")[1].split("\\.")[0];
          writer.append(fileId + ",");

          writer.append(resultDTOToString(cur));
          if (n + 1 < results[m].length) {
            // writer.append(",");
            writer.newLine();
          }
        }
        if (m + 1 < results.length) writer.newLine();
      }
      System.out.println("Done!");
    } else { // not in batch mode
      System.out.println("Not in batch mode");
      System.out.println("Using data provider: " + gconfig.isUseDataprovider());
      // We do not evaluate all genomes before writing; just in case something goes wrong...
      final ArrayList<BlackBox> genomeList = new ArrayList<>();
      final Iterator<Entry<BlackBox, String>> it = config.getGenomeMap().entrySet().iterator();
      while (it.hasNext()) {
        final Entry<BlackBox, String> genomeEntry = it.next();
        genomeList.clear();
        genomeList.add(genomeEntry.getKey());
        final ResultDTO[][] results =
            evaluator.evaluateGenomes(
                genomeList,
                gconfig.getNumberOfScenariosInNonfinalGenerations(),
                gconfig.getNumberOfScenariosInFinalGeneration(),
                gconfig.isUseDataprovider());
        assert results.length == 1;
        writer.append(genomeEntry.getValue()).append(",");
        for (int i = 0; i < results[0].length; i++) {
          writer.append(resultDTOToString(results[0][i]));
          //					if (i + 1 < results[0].length)
          //						writer.append(",");
        }
        if (it.hasNext()) writer.newLine();
      }
    }
    writer.flush();
    writer.close();
    System.out.println("File closed");
  }