Esempio n. 1
0
 public void write(final String outputFilename) {
   SimpleWriter sw = new SimpleWriter(outputFilename + ".txt");
   sw.writeln("car_avail--always");
   sw.writeln(
       "\tmale\tfemale\tage<30\t30<=age<50\t50<=age<70\tage>70\twith license\twithout license\tis employed\tnot employed");
   sw.writeln(
       "\t"
           + male_al
           + "\t"
           + female_al
           + "\t"
           + ageA_al
           + "\t"
           + ageB_al
           + "\t"
           + ageC_al
           + "\t"
           + ageD_al
           + "\t"
           + withLicense_al
           + "\t"
           + withoutLicense_al
           + "\t"
           + isEmployed_al
           + "\t"
           + notEmployed_al);
   sw.writeln("-----------------------------");
   sw.writeln("car_avail--sometimes");
   sw.writeln(
       "\tmale\tfemale\tage<30\t30<=age<50\t50<=age<70\tage>70\twith license\twithout license\tis employed\tnot employed");
   sw.writeln(
       "\t"
           + male_so
           + "\t"
           + female_so
           + "\t"
           + ageA_so
           + "\t"
           + ageB_so
           + "\t"
           + ageC_so
           + "\t"
           + ageD_so
           + "\t"
           + withLicense_so
           + "\t"
           + withoutLicense_so
           + "\t"
           + isEmployed_so
           + "\t"
           + notEmployed_so);
   sw.writeln("-----------------------------");
   sw.writeln("car_avail--never");
   sw.writeln(
       "\tmale\tfemale\tage<30\t30<=age<50\t50<=age<70\tage>70\twith license\twithout license\tis employed\tnot employed");
   sw.writeln(
       "\t"
           + male_ne
           + "\t"
           + female_ne
           + "\t"
           + ageA_ne
           + "\t"
           + ageB_ne
           + "\t"
           + ageC_ne
           + "\t"
           + ageD_ne
           + "\t"
           + withLicense_ne
           + "\t"
           + withoutLicense_ne
           + "\t"
           + isEmployed_ne
           + "\t"
           + notEmployed_ne);
   sw.writeln("-----------------------------");
   sw.close();
   BarChart chart =
       new BarChart(
           "Car Avail",
           "categories",
           "Car Availability %",
           new String[] {
             "male",
             "female",
             "age<30",
             "30<=age<50",
             "50<=age<70",
             "age>70",
             "with license",
             "without license",
             "is employed",
             "not employed"
           });
   chart.addSeries(
       "always",
       new double[] {
         male_al / (male_al + male_ne + male_so) * 100.0,
         female_al / (female_al + female_ne + female_so) * 100.0,
         ageA_al / (ageA_al + ageA_ne + ageA_so) * 100.0,
         ageB_al / (ageB_al + ageB_ne + ageB_so) * 100.0,
         ageC_al / (ageC_al + ageC_ne + ageC_so) * 100.0,
         ageD_al / (ageD_al + ageD_ne + ageD_so) * 100.0,
         withLicense_al / (withLicense_al + withLicense_ne + withLicense_so) * 100.0,
         withoutLicense_al / (withoutLicense_al + withoutLicense_ne + withoutLicense_so) * 100.0,
         isEmployed_al / (isEmployed_al + isEmployed_ne + isEmployed_so) * 100.0,
         notEmployed_al / (notEmployed_al + notEmployed_ne + notEmployed_so) * 100.0
       });
   chart.addSeries(
       "sometimes",
       new double[] {
         male_so / (male_al + male_ne + male_so) * 100.0,
         female_so / (female_al + female_ne + female_so) * 100.0,
         ageA_so / (ageA_al + ageA_ne + ageA_so) * 100.0,
         ageB_so / (ageB_al + ageB_ne + ageB_so) * 100.0,
         ageC_so / (ageC_al + ageC_ne + ageC_so) * 100.0,
         ageD_so / (ageD_al + ageD_ne + ageD_so) * 100.0,
         withLicense_so / (withLicense_al + withLicense_ne + withLicense_so) * 100.0,
         withoutLicense_so / (withoutLicense_al + withoutLicense_ne + withoutLicense_so) * 100.0,
         isEmployed_so / (isEmployed_al + isEmployed_ne + isEmployed_so) * 100.0,
         notEmployed_so / (notEmployed_al + notEmployed_ne + notEmployed_so) * 100.0
       });
   chart.addSeries(
       "never",
       new double[] {
         male_ne / (male_al + male_ne + male_so) * 100.0,
         female_ne / (female_al + female_ne + female_so) * 100.0,
         ageA_ne / (ageA_al + ageA_ne + ageA_so) * 100.0,
         ageB_ne / (ageB_al + ageB_ne + ageB_so) * 100.0,
         ageC_ne / (ageC_al + ageC_ne + ageC_so) * 100.0,
         ageD_ne / (ageD_al + ageD_ne + ageD_so) * 100.0,
         withLicense_ne / (withLicense_al + withLicense_ne + withLicense_so) * 100.0,
         withoutLicense_ne / (withoutLicense_al + withoutLicense_ne + withoutLicense_so) * 100.0,
         isEmployed_ne / (isEmployed_al + isEmployed_ne + isEmployed_so) * 100.0,
         notEmployed_ne / (notEmployed_al + notEmployed_ne + notEmployed_so) * 100.0
       });
   chart.addMatsimLogo();
   chart.saveAsPng(outputFilename + ".png", 1200, 900);
 }
Esempio n. 2
0
  public void write(final String outputFilename) {
    double sum = carTime + ptTime + othersTime + wlkTime + bikeTime;

    SimpleWriter sw = new SimpleWriter(outputFilename + "dailyEnRouteTime.txt");
    sw.writeln("\tDaily En Route Time\tn_agents\t" + count);
    sw.writeln("\tavg.[min]\t%\tsum.[min]");

    double avgCarTime = carTime / count;
    double avgPtTime = ptTime / count;
    double avgWlkTime = wlkTime / count;
    double avgBikeTime = bikeTime / count;
    double avgOtherTime = othersTime / count;

    sw.writeln("car\t" + avgCarTime + "\t" + carTime / sum * 100.0 + "\t" + carTime);
    sw.writeln("pt\t" + avgPtTime + "\t" + ptTime / sum * 100.0 + "\t" + ptTime);
    sw.writeln("walk\t" + avgWlkTime + "\t" + wlkTime / sum * 100.0 + "\t" + wlkTime);
    sw.writeln("bike\t" + avgBikeTime + "\t" + bikeTime / sum * 100.0 + "\t" + bikeTime);
    sw.writeln("others\t" + avgOtherTime + "\t" + othersTime / sum * 100.0 + "\t" + othersTime);

    PieChart pieChart = new PieChart("Avg. Daily En Route Time -- Modal Split");
    pieChart.addSeries(
        new String[] {CAR, "pt", "wlk", BIKE, OTHERS},
        new double[] {avgCarTime, avgPtTime, avgWlkTime, avgBikeTime, avgOtherTime});
    pieChart.saveAsPng(outputFilename + "dailyEnRouteTimeModalSplitPie.png", 800, 600);

    sw.writeln("--travel destination and modal split--daily on route time--");
    sw.writeln("\twork\teducation\tshopping\tleisure\thome\tother...");
    sw.writeln(
        "car\t"
            + carWorkTime
            + "\t"
            + carEducTime
            + "\t"
            + carShopTime
            + "\t"
            + carLeisTime
            + "\t"
            + carHomeTime
            + "\t"
            + carOtherTime);
    sw.writeln(
        "pt\t"
            + ptWorkTime
            + "\t"
            + ptEducTime
            + "\t"
            + ptShopTime
            + "\t"
            + ptLeisTime
            + "\t"
            + ptHomeTime
            + "\t"
            + ptOtherTime);
    sw.writeln(
        "walk\t"
            + wlkWorkTime
            + "\t"
            + wlkEducTime
            + "\t"
            + wlkShopTime
            + "\t"
            + wlkLeisTime
            + "\t"
            + wlkHomeTime
            + "\t"
            + wlkOtherTime);
    sw.writeln(
        "bike\t"
            + bikeWorkTime
            + "\t"
            + bikeEducTime
            + "\t"
            + bikeShopTime
            + "\t"
            + bikeLeisTime
            + "\t"
            + bikeHomeTime
            + "\t"
            + bikeOtherTime);
    sw.writeln(
        "others\t"
            + othersWorkTime
            + "\t"
            + othersEducTime
            + "\t"
            + othersShopTime
            + "\t"
            + othersLeisTime
            + "\t"
            + othersHomeTime
            + "\t"
            + othersOtherTime);
    sw.writeln(
        "total\t"
            + (carWorkTime + ptWorkTime + wlkWorkTime + bikeWorkTime + othersWorkTime)
            + "\t"
            + (carEducTime + ptEducTime + wlkEducTime + bikeEducTime + othersEducTime)
            + "\t"
            + (carShopTime + ptShopTime + wlkShopTime + bikeShopTime + othersShopTime)
            + "\t"
            + (carLeisTime + ptLeisTime + wlkLeisTime + bikeLeisTime + othersLeisTime)
            + "\t"
            + (carHomeTime + ptHomeTime + wlkHomeTime + bikeHomeTime + othersHomeTime)
            + "\t"
            + (carOtherTime + ptOtherTime + wlkOtherTime + bikeOtherTime + othersOtherTime));

    BarChart barChart =
        new BarChart(
            "travel destination and modal split--daily En Route Time",
            "travel destination",
            "daily En Route Time [min]",
            new String[] {"work", "education", "shopping", "leisure", "home", OTHERS});
    barChart.addSeries(
        CAR,
        new double[] {
          carWorkTime, carEducTime, carShopTime, carLeisTime, carHomeTime, carOtherTime
        });

    double[] ptDestinationTime =
        new double[] {ptWorkTime, ptEducTime, ptShopTime, ptLeisTime, ptHomeTime, ptOtherTime};
    if (CollectionMath.getSum(ptDestinationTime) > 0) barChart.addSeries("pt", ptDestinationTime);

    double[] wlkDestinationTime =
        new double[] {
          wlkWorkTime, wlkEducTime, wlkShopTime, wlkLeisTime, wlkHomeTime, wlkOtherTime
        };
    if (CollectionMath.getSum(wlkDestinationTime) > 0)
      barChart.addSeries("walk", wlkDestinationTime);

    double[] bikeDestinationTime =
        new double[] {
          bikeWorkTime, bikeEducTime, bikeShopTime, bikeLeisTime, bikeHomeTime, bikeOtherTime
        };
    if (CollectionMath.getSum(bikeDestinationTime) > 0)
      barChart.addSeries(BIKE, bikeDestinationTime);

    double[] othersDestinationTime =
        new double[] {
          othersWorkTime,
          othersEducTime,
          othersShopTime,
          othersLeisTime,
          othersHomeTime,
          othersOtherTime
        };
    if (CollectionMath.getSum(othersDestinationTime) > 0)
      barChart.addSeries(OTHERS, othersDestinationTime);

    barChart.addMatsimLogo();
    barChart.saveAsPng(outputFilename + "dailyEnRouteTimeTravelDistination.png", 1200, 900);

    double x[] = new double[101];
    for (int i = 0; i < 101; i++) x[i] = i;
    double yTotal[] = new double[101];
    double yCar[] = new double[101];
    double yPt[] = new double[101];
    double yWlk[] = new double[101];
    double yBike[] = new double[101];
    double yOthers[] = new double[101];
    for (int i = 0; i < 101; i++) {
      yTotal[i] = totalDayEnRouteTimeCounts[i] / count * 100.0;
      yCar[i] = carDayEnRouteTimeCounts[i] / count * 100.0;
      yPt[i] = ptDayEnRouteTimeCounts[i] / count * 100.0;
      yWlk[i] = wlkDayEnRouteTimeCounts[i] / count * 100.0;
      yBike[i] = bikeDayEnRouteTimeCounts[i] / count * 100.0;
      yOthers[i] = othersDayEnRouteTimeCounts[i] / count * 100.0;
    }
    XYLineChart chart =
        new XYLineChart(
            "Daily En Route Time Distribution",
            "Daily En Route Time in min",
            "fraction of persons with daily en route time longer than x... in %");
    chart.addSeries(CAR, x, yCar);
    if (CollectionMath.getSum(yPt) > 0) chart.addSeries("pt", x, yPt);
    if (CollectionMath.getSum(yWlk) > 0) chart.addSeries("walk", x, yWlk);
    if (CollectionMath.getSum(yBike) > 0) chart.addSeries(BIKE, x, yBike);
    if (CollectionMath.getSum(yOthers) > 0) chart.addSeries(OTHERS, x, yOthers);
    chart.addSeries("total", x, yTotal);
    chart.saveAsPng(outputFilename + "dailyEnRouteTimeDistribution.png", 800, 600);

    sw.writeln("\n--Modal split -- leg duration--");
    sw.writeln(
        "leg Duration [min]\tcar legs no.\tpt legs no.\twalk legs no.\tbike legs no.\tothers legs no.\t"
            + "car fraction [%]\tpt fraction [%]\twalk fraction [%]\tbike fraction [%]\tothers fraction [%]");

    double xs[] = new double[101];
    double yCarFracs[] = new double[101];
    double yPtFracs[] = new double[101];
    double yWlkFracs[] = new double[101];
    double yBikeFracs[] = new double[101];
    double yOthersFracs[] = new double[101];
    for (int i = 0; i < 101; i++) {
      double sumOfLegTimeCounts =
          carLegTimeCounts[i]
              + ptLegTimeCounts[i]
              + wlkLegTimeCounts[i]
              + bikeLegTimeCounts[i]
              + othersLegTimeCounts[i];
      xs[i] = i * 2;
      if (sumOfLegTimeCounts > 0) {
        yCarFracs[i] = carLegTimeCounts[i] / sumOfLegTimeCounts * 100.0;
        yPtFracs[i] = ptLegTimeCounts[i] / sumOfLegTimeCounts * 100.0;
        yWlkFracs[i] = wlkLegTimeCounts[i] / sumOfLegTimeCounts * 100.0;
        yBikeFracs[i] = bikeLegTimeCounts[i] / sumOfLegTimeCounts * 100.0;
        yOthersFracs[i] = othersLegTimeCounts[i] / sumOfLegTimeCounts * 100.0;
      } else {
        yCarFracs[i] = 0;
        yPtFracs[i] = 0;
        yWlkFracs[i] = 0;
        yBikeFracs[i] = 0;
        yOthersFracs[i] = 0;
      }
      sw.writeln(
          i
              + "+\t"
              + carLegTimeCounts[i]
              + "\t"
              + ptLegTimeCounts[i]
              + "\t"
              + wlkLegTimeCounts[i]
              + "\t"
              + bikeLegTimeCounts[i]
              + "\t"
              + othersLegTimeCounts[i]
              + "\t"
              + yCarFracs[i]
              + "\t"
              + yPtFracs[i]
              + "\t"
              + yWlkFracs[i]
              + "\t"
              + yBikeFracs[i]
              + "\t"
              + yOthersFracs[i]);
    }
    XYLineChart chart2 =
        new XYLineChart("Modal Split -- leg Duration", "leg Duration [min]", "mode fraction [%]");
    chart2.addSeries(CAR, xs, yCarFracs);
    if (CollectionMath.getSum(yPtFracs) > 0) chart2.addSeries("pt", xs, yPtFracs);
    if (CollectionMath.getSum(yWlkFracs) > 0) chart2.addSeries("walk", xs, yWlkFracs);
    if (CollectionMath.getSum(yBikeFracs) > 0) chart2.addSeries(BIKE, xs, yBikeFracs);
    if (CollectionMath.getSum(yOthersFracs) > 0) chart2.addSeries(OTHERS, xs, yOthersFracs);
    chart2.saveAsPng(outputFilename + "legTimeModalSplit2.png", 800, 600);
    sw.close();
  }