package JOpt.SDK.Examples;
import JOpt.SDK.*;
import JOpt.SDK.Implementation.*;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.Calendar;
import java.util.Properties;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class BestPractices4GarbageCollection2 extends Optimization
{
public BestPractices4GarbageCollection2()
{
OpeningHours[] weeklyOpeningHours= new OpeningHours[1];
weeklyOpeningHours[0] = new OpeningHours(new GregorianCalendar(2007,Calendar.MARCH,6,8,0,0),new GregorianCalendar(2007,Calendar.MARCH,6,18,0,0));
TimeWindowGeoNode koeln = new TimeWindowGeoNode("Koeln", 50.9333,6.95,weeklyOpeningHours,2400,1);
double[] koelnLoad = {5};
koeln.setLoad(koelnLoad);
this.addElement(koeln);
... hier sind mehrere Knoten
for(int count = 0; count < 4; count++){
TimeWindowGeoNode unloadingPoint = new TimeWindowGeoNode("Unloading Point", 50.8,6.48333,weeklyOpeningHours,1200,1);
unloadingPoint.setUnloadAll(true);
this.addElement(unloadingPoint);
}
WorkingHours[] workingHours= new WorkingHours[1];
workingHours[0] = new WorkingHours(new GregorianCalendar(2007,Calendar.MARCH,6,8,0,0),new GregorianCalendar(2007,Calendar.MARCH,6,16,0,0));
double[] initialDepotLoad = {0};
CapacityResource rep1 = new CapacityResource("Jack",50.1167,7.68333,8.0,1200.0,workingHours);
rep1.setCost(1000,1,1);
rep1.addCapacity(10);
rep1.setInitialLoad(initialDepotLoad);
rep1.setEmptyAtEndOfRoute(true);
this.addElement(rep1);
... hier eigentlich sind mehrere Fahrzeuge
Properties props = new Properties();
props.setProperty("JOptExitCondition.JOptGenerationCount","1000");
props.setProperty("JOptExitCondition.Type","JOptCostConvergency");
props.setProperty("JOptExitCondition.JOptConvergencyCount","100");
props.setProperty("JOptWeight.Capacity","1000");
this.addElement(props);
Properties systemproperties = this.getProperties();
systemproperties.list(System.out);
try{
this.startAsynchronousOptimizationRun();
} catch (Exception ex)
{
System.out.println(ex.getMessage());
}
}
public void onAsynchronousOptimizationResult(IOptimizationResult result)
{
if(result == null)
{
return;
}
NumberFormat numform = new DecimalFormat("0.000");
System.out.println("\n##########################################################");
System.out.println("NEW OPTIMIZATION RESULT");
System.out.println("##########################################################");
System.out.println("costfunction : " + result.getTotalCost());
System.out.println("total route time : " + numform.format(result.getTimeTotal()/3600.0) + " [h]");
System.out.println("total driving time : " + numform.format(result.getTimeTrip()/3600.0) + " [h]");
System.out.println("total service time : " + numform.format(result.getTimeStop()/3600.0) + " [h]");
System.out.println("total idle time : " + result.getTimeIdle()/3600.0 + " [h]");
System.out.println("total break time : " + result.getTimeBreak()/3600.0 + " [h]");
System.out.println("total distance : " + numform.format(result.getTotalDistance()/1000.0) + " [km]");
for(int i = 0; i < result.getRoutes().length; i++){
System.out.println("\n-----------------------------------------------------------");
System.out.println("Route information");
System.out.println("Route:" + result.getRoutes()[i].getRouteId() + " resource scheduled: " + result.getRoutes()[i].getResourceId());
System.out.println("-----------------------------------------------------------");
System.out.println("route time : " + numform.format(result.getRoutes()[i].getTimeTotal()/3600.0) + " [h]");
System.out.println("driving time : " + numform.format(result.getRoutes()[i].getTimeTrip()/3600.0) + " [h]");
System.out.println("service time : " + numform.format(result.getRoutes()[i].getTimeStop()/3600.0) + " [h]");
System.out.println("idle time : " + result.getRoutes()[i].getTimeIdle()/3600.0 + " [h]");
System.out.println("break time : " + result.getRoutes()[i].getTimeBreak()/3600.0 + " [h]");
System.out.println("distance : " + numform.format(result.getRoutes()[i].getTotalDistance()/1000.0) + " [km]");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
System.out.println("start : " + sdf1.format(result.getRoutes()[i].getRouteStart().getTime()));
System.out.println("end : " + sdf1.format(result.getRoutes()[i].getRouteEnd().getTime()));
for (int k = 0; k < result.getRoutes()[i].getViolations().length; k++)
{
IViolation violation = result.getRoutes()[i].getViolations()[k];
IAttributeValuePair avp = (IAttributeValuePair)violation;
System.out.println(" [" + avp.getCategory() + "/" + avp.getAttribute() + "/" + avp.getValue() + "]");
}
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
for(int j = 0; j < result.getRoutes()[i].getRouteNodes().length; j++){
IScheduledNode scheduledNode = result.getRoutes()[i].getRouteNodes()[j];
System.out.print("\n"
+ result.getRoutes()[i].getRouteId() + "."
+ scheduledNode.getSequenceNumber() + " "
+ scheduledNode.getNodeId()
+ " arrival time: "
+ sdf.format(scheduledNode.getArrivalTime().getTime())
+ " driving time: " + numform.format(scheduledNode.getTimeDrive()/3600.0) +" [h]"
+ " service time: " + scheduledNode.getVisitDuration()/60.0 +" [min]");
if(scheduledNode.getLoad() != null){
System.out.print(" load: " + scheduledNode.getLoad()[0]);
}
for(int k = 0; k < scheduledNode.getViolations().length; k++){
IViolation violation = scheduledNode.getViolations()[k];
if(violation instanceof IAttributeValuePair)
{
IAttributeValuePair avp = (IAttributeValuePair) violation;
System.out.print(" [" + avp.getCategory() + "/" + avp.getAttribute() + "/" + avp.getValue() + "]");
}
}
}
}
}
public static void main(String[] args)
{
BestPractices4GarbageCollection2 prg = new BestPractices4GarbageCollection2();
}
}