Problem mit größer oder gleich >=

mzm

Mitglied
Hi,

vorab vielen Dank für die Hilfe bei meinem letzten Problem. Als nicht Javaianer bekommt man hier echt guten Support.

Ich habe ein Problem mit folgendem Code.

Ein Fahrzeug sammelt Ware ein und wenn es "voll" ist, fährt es zu einem Abladeplatz.

Mein Problem:
Das Fahrzeug soll dort auch hin, wenn die Kapazität nicht voll ausgenutzt ist.

Eigentlich ist diese Codestelle dafür verantwortlich, hoffe ich doch.
Java:
     for(int count = 0; count < 4; count++){ 
     TimeWindowGeoNode unloadingPoint = new TimeWindowGeoNode("Depot", 53.34814874,9.752080064,weeklyOpeningHours,5400,1);
     unloadingPoint.setUnloadAll(true);
     this.addElement(unloadingPoint); 
     }

Kann mir jemand helfen wie ich das ändern kann, also das die Fahrzeuge auch bei einer Teilbeladung am Ende zum Abladeplatz fahren.

Ich bin kein Java Programmierer, daher stehe ich etwas aufm Schlauch.

Gruß
Marcus
 
"dass die Fahrzeuge auch bei einer Teilbeladung am Ende zum Abladeplatz fahren." ist keine Java-bezogene Aussage.
Dein Codeausschnitt ist einfach nur eine Schleife, die irgendwelche unbekannten Klassen instanziiert und noch weniger umbekannte Methoden aufruft.
Also ist a) das Problem nicht klar b) wenig Code da
 
Hi,

ja sorry ich kenn mich da net so aus 🙂 Dachte vielleicht der Code reicht fürn Anfang.

Hier mal der Code aus der Datei - ... kennzeichnet auslassungen.

Es geht um den "unloadingPoint"

Java:
package JOpt.SDK.Examples;

/*
 * When the resource is fully loaded it goes to a unloading point where it can release all load. From there it again starts collecting goods until its fully loaded then goes to the
 * unloading point and so on.
 * 
 * The evaluation copy of JOpt.SDK is limited up to 12 elements = number of nodes + number of resources.   
 * */ 

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()
  {

     // 0.) define the weekly opening hours for the nodes we want to visit    
     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));
   
       
    // 1.) add the nodes to be visited
     TimeWindowGeoNode koeln    = new TimeWindowGeoNode("Koeln", 50.9333,6.95,weeklyOpeningHours,2400,1);
     double[] koelnLoad = {5}; // 5 units will be picked up  
     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);
     }

     // 2.) add the resources 
     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");  // Maximum Number of Generations  
     props.setProperty("JOptExitCondition.Type","JOptCostConvergency");  // The algorithm may stop in advance if there is a cost convergency for more than n Generations 
     props.setProperty("JOptExitCondition.JOptConvergencyCount","100");     
     props.setProperty("JOptWeight.Capacity","1000");                    // value has been balanced according to the specific scenario 
     
     
     this.addElement(props);   
 
     Properties systemproperties = this.getProperties();
     systemproperties.list(System.out);    
      // 3.) start the optimization
     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");
    
    // 4.) read the header
    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]");
    
    // 5.) iterate through each tour
    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() + "]");             
            }
          }    
      }

    }
  }
  
  /**
   * 
   * @param args
   */
  public static void main(String[] args)
  {
    BestPractices4GarbageCollection2 prg = new BestPractices4GarbageCollection2();
  }
}
 
Zuletzt bearbeitet:
Ändert aber nicht daran, dass die Frage unklar ist und dass die Klassen unbekannt sind, wobei dir ja scheinbar zu irgendeine JOpt SDK gehören
 
Ok,

dann mit einer konkreten Frage zum Einstieg:

Was bedeutet die folgende Codezeile genau?

Java:
for(int count = 0; count < 4; count++){
Zeile 43 aus meinem letzten Posting



Kann ich evtl daran etwas ändern, so dass die Lade Kapazität der Ressourcen (Fahrzeuge) "rep1.addCapacity(10);" nicht voll ausgeschöpft sein muss, bevor der Punkt angefahren wird?

Diesen Link hab ich noch Generated Documentation (Untitled)
Vielleicht ist das eine gute Info zu dem Package.

Gruß
Marcus
 
Zuletzt bearbeitet:
Das bedeutet, dass du eine Schleife von 0..3 läufst...
Hat die Library kein Supportforum, wo Menschen unterwegs sind, die es schon mal im Leben gesehen haben?
 
Ne, leider nicht.
Ich hab von der Firma eine Version mit einer zeitlichen Beschränkung (2 Monate) für umsonst bekommen. Dafür geben die aber keinen Support, weil die Testversion ja schon umsonst war. :bloed:

Es gibt zwar ein Forum, da sind aber nur 23 Themen eröffnet und davon 6 von mir. Die Antworten gibt nur ein Mitarbeiter, andere User sind da nicht wirklich.

Das Problem ist nur das es um meine Abschlussarbeit geht und ich gerne die Tourenplanung mit diesem Programm bearbeiten möchte.
 
Zuletzt bearbeitet:

Jo, die Info zum Forum hatte ich auch eben noch im meinem letzten Posting ergänzt.

Nachtrag2: Ah, da hast du ja schon dezent 6 Themen am Stück erstellt...
😀

Ja, ganz dezent.

Das hab ich halt so gemacht weil der Support meinte, "eine garantierte Reaktionszeit gibt es aber nicht". ???:L
 

Zurück
Oben