Exemplo n.º 1
0
 private void writeInitialRoutes(XMLConf xmlConfig) {
   if (vrp.getInitialVehicleRoutes().isEmpty()) return;
   String path = "initialRoutes.route";
   int routeCounter = 0;
   for (VehicleRoute route : vrp.getInitialVehicleRoutes()) {
     xmlConfig.setProperty(path + "(" + routeCounter + ").driverId", route.getDriver().getId());
     xmlConfig.setProperty(path + "(" + routeCounter + ").vehicleId", route.getVehicle().getId());
     xmlConfig.setProperty(path + "(" + routeCounter + ").start", route.getStart().getEndTime());
     int actCounter = 0;
     for (TourActivity act : route.getTourActivities().getActivities()) {
       xmlConfig.setProperty(
           path + "(" + routeCounter + ").act(" + actCounter + ")[@type]", act.getName());
       if (act instanceof JobActivity) {
         Job job = ((JobActivity) act).getJob();
         if (job instanceof Service) {
           xmlConfig.setProperty(
               path + "(" + routeCounter + ").act(" + actCounter + ").serviceId", job.getId());
         } else if (job instanceof Shipment) {
           xmlConfig.setProperty(
               path + "(" + routeCounter + ").act(" + actCounter + ").shipmentId", job.getId());
         } else {
           throw new IllegalStateException(
               "cannot write solution correctly since job-type is not know. make sure you use either service or shipment, or another writer");
         }
       }
       xmlConfig.setProperty(
           path + "(" + routeCounter + ").act(" + actCounter + ").arrTime", act.getArrTime());
       xmlConfig.setProperty(
           path + "(" + routeCounter + ").act(" + actCounter + ").endTime", act.getEndTime());
       actCounter++;
     }
     xmlConfig.setProperty(path + "(" + routeCounter + ").end", route.getEnd().getArrTime());
     routeCounter++;
   }
 }
Exemplo n.º 2
0
  public void write(String filename) {
    if (!filename.endsWith(".xml")) filename += ".xml";
    log.info("write vrp: " + filename);
    XMLConf xmlConfig = new XMLConf();
    xmlConfig.setFileName(filename);
    xmlConfig.setRootElementName("problem");
    xmlConfig.setAttributeSplittingDisabled(true);
    xmlConfig.setDelimiterParsingDisabled(true);

    writeProblemType(xmlConfig);
    writeVehiclesAndTheirTypes(xmlConfig);

    // might be sorted?
    List<Job> jobs = new ArrayList<Job>();
    jobs.addAll(vrp.getJobs().values());
    for (VehicleRoute r : vrp.getInitialVehicleRoutes()) {
      jobs.addAll(r.getTourActivities().getJobs());
    }

    writeServices(xmlConfig, jobs);
    writeShipments(xmlConfig, jobs);

    writeInitialRoutes(xmlConfig);
    writeSolutions(xmlConfig);

    OutputFormat format = new OutputFormat();
    format.setIndenting(true);
    format.setIndent(5);

    try {
      Document document = xmlConfig.createDoc();

      Element element = document.getDocumentElement();
      element.setAttribute("xmlns", "http://www.w3schools.com");
      element.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
      element.setAttribute("xsi:schemaLocation", "http://www.w3schools.com vrp_xml_schema.xsd");

    } catch (ConfigurationException e) {
      logger.error("Exception:", e);
      e.printStackTrace();
      System.exit(1);
    }

    try {
      Writer out = new FileWriter(filename);
      XMLSerializer serializer = new XMLSerializer(out, format);
      serializer.serialize(xmlConfig.getDocument());
      out.close();
    } catch (IOException e) {
      logger.error("Exception:", e);
      e.printStackTrace();
      System.exit(1);
    }
  }
Exemplo n.º 3
0
  private void writeShipments(XMLConf xmlConfig, List<Job> jobs) {
    String shipmentPathString = "shipments.shipment";
    int counter = 0;
    for (Job j : jobs) {
      if (!(j instanceof Shipment)) continue;
      Shipment shipment = (Shipment) j;
      xmlConfig.setProperty(shipmentPathString + "(" + counter + ")[@id]", shipment.getId());
      //			xmlConfig.setProperty(shipmentPathString + "("+counter+")[@type]", service.getType());
      if (shipment.getPickupLocation().getId() != null)
        xmlConfig.setProperty(
            shipmentPathString + "(" + counter + ").pickup.location.id",
            shipment.getPickupLocation().getId());
      if (shipment.getPickupLocation().getCoordinate() != null) {
        xmlConfig.setProperty(
            shipmentPathString + "(" + counter + ").pickup.location.coord[@x]",
            shipment.getPickupLocation().getCoordinate().getX());
        xmlConfig.setProperty(
            shipmentPathString + "(" + counter + ").pickup.location.coord[@y]",
            shipment.getPickupLocation().getCoordinate().getY());
      }
      if (shipment.getPickupLocation().getIndex() != Location.NO_INDEX) {
        xmlConfig.setProperty(
            shipmentPathString + "(" + counter + ").pickup.location.index",
            shipment.getPickupLocation().getIndex());
      }

      xmlConfig.setProperty(
          shipmentPathString + "(" + counter + ").pickup.duration",
          shipment.getPickupServiceTime());
      xmlConfig.setProperty(
          shipmentPathString + "(" + counter + ").pickup.timeWindows.timeWindow(0).start",
          shipment.getPickupTimeWindow().getStart());
      xmlConfig.setProperty(
          shipmentPathString + "(" + counter + ").pickup.timeWindows.timeWindow(0).end",
          shipment.getPickupTimeWindow().getEnd());

      if (shipment.getDeliveryLocation().getId() != null)
        xmlConfig.setProperty(
            shipmentPathString + "(" + counter + ").delivery.location.id",
            shipment.getDeliveryLocation().getId());
      if (shipment.getDeliveryLocation().getCoordinate() != null) {
        xmlConfig.setProperty(
            shipmentPathString + "(" + counter + ").delivery.location.coord[@x]",
            shipment.getDeliveryLocation().getCoordinate().getX());
        xmlConfig.setProperty(
            shipmentPathString + "(" + counter + ").delivery.location.coord[@y]",
            shipment.getDeliveryLocation().getCoordinate().getY());
      }
      if (shipment.getDeliveryLocation().getIndex() != Location.NO_INDEX) {
        xmlConfig.setProperty(
            shipmentPathString + "(" + counter + ").delivery.location.index",
            shipment.getDeliveryLocation().getIndex());
      }

      xmlConfig.setProperty(
          shipmentPathString + "(" + counter + ").delivery.duration",
          shipment.getDeliveryServiceTime());
      xmlConfig.setProperty(
          shipmentPathString + "(" + counter + ").delivery.timeWindows.timeWindow(0).start",
          shipment.getDeliveryTimeWindow().getStart());
      xmlConfig.setProperty(
          shipmentPathString + "(" + counter + ").delivery.timeWindows.timeWindow(0).end",
          shipment.getDeliveryTimeWindow().getEnd());

      for (int i = 0; i < shipment.getSize().getNuOfDimensions(); i++) {
        xmlConfig.setProperty(
            shipmentPathString
                + "("
                + counter
                + ").capacity-dimensions.dimension("
                + i
                + ")[@index]",
            i);
        xmlConfig.setProperty(
            shipmentPathString + "(" + counter + ").capacity-dimensions.dimension(" + i + ")",
            shipment.getSize().get(i));
      }

      // skills
      String skillString = getSkillString(shipment);
      xmlConfig.setProperty(shipmentPathString + "(" + counter + ").requiredSkills", skillString);

      // name
      if (shipment.getName() != null) {
        if (!shipment.getName().equals("no-name")) {
          xmlConfig.setProperty(shipmentPathString + "(" + counter + ").name", shipment.getName());
        }
      }
      counter++;
    }
  }
Exemplo n.º 4
0
 private void writeSolutions(XMLConf xmlConfig) {
   if (solutions == null) return;
   String solutionPath = "solutions.solution";
   int counter = 0;
   for (VehicleRoutingProblemSolution solution : solutions) {
     xmlConfig.setProperty(solutionPath + "(" + counter + ").cost", solution.getCost());
     int routeCounter = 0;
     for (VehicleRoute route : solution.getRoutes()) {
       //				xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter
       // + ").cost", route.getCost());
       xmlConfig.setProperty(
           solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").driverId",
           route.getDriver().getId());
       xmlConfig.setProperty(
           solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").vehicleId",
           route.getVehicle().getId());
       xmlConfig.setProperty(
           solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").start",
           route.getStart().getEndTime());
       int actCounter = 0;
       for (TourActivity act : route.getTourActivities().getActivities()) {
         xmlConfig.setProperty(
             solutionPath
                 + "("
                 + counter
                 + ").routes.route("
                 + routeCounter
                 + ").act("
                 + actCounter
                 + ")[@type]",
             act.getName());
         if (act instanceof JobActivity) {
           Job job = ((JobActivity) act).getJob();
           if (job instanceof Service) {
             xmlConfig.setProperty(
                 solutionPath
                     + "("
                     + counter
                     + ").routes.route("
                     + routeCounter
                     + ").act("
                     + actCounter
                     + ").serviceId",
                 job.getId());
           } else if (job instanceof Shipment) {
             xmlConfig.setProperty(
                 solutionPath
                     + "("
                     + counter
                     + ").routes.route("
                     + routeCounter
                     + ").act("
                     + actCounter
                     + ").shipmentId",
                 job.getId());
           } else {
             throw new IllegalStateException(
                 "cannot write solution correctly since job-type is not know. make sure you use either service or shipment, or another writer");
           }
         }
         xmlConfig.setProperty(
             solutionPath
                 + "("
                 + counter
                 + ").routes.route("
                 + routeCounter
                 + ").act("
                 + actCounter
                 + ").arrTime",
             act.getArrTime());
         xmlConfig.setProperty(
             solutionPath
                 + "("
                 + counter
                 + ").routes.route("
                 + routeCounter
                 + ").act("
                 + actCounter
                 + ").endTime",
             act.getEndTime());
         actCounter++;
       }
       xmlConfig.setProperty(
           solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").end",
           route.getEnd().getArrTime());
       routeCounter++;
     }
     int unassignedJobCounter = 0;
     for (Job unassignedJob : solution.getUnassignedJobs()) {
       xmlConfig.setProperty(
           solutionPath
               + "("
               + counter
               + ").unassignedJobs.job("
               + unassignedJobCounter
               + ")[@id]",
           unassignedJob.getId());
       unassignedJobCounter++;
     }
     counter++;
   }
 }