Hallo,
ich arbeite an einer Scheduling-Anwendung mit Threads und Vektoren. Habe mich soweit durchgekämpft und muss nun feststellen, dass die implementierten Algorithmen zwar arbeiten, die Lösungen aber allesamt ungültig werden.
Ich speichere Zeitpläne mit einzelnen Operationen (Objekt-Klasse Operation, selbst angelegt) als Vektoren ab. Die benötigten Operationen beziehe ich aus einer Datei, in der das zu berechnende Problem gespeichert ist. Es ergibt sich eine Sammlung an einzuplanenden Operationen (als Vektor angelegt). Ich erstelle in jeder Methode/Iteration eine Instanz des Ausgangs-Vektors und plane damit weiter. Das ist aber wohl nur eine Referenz und keine echte Kopie. Aus diesem Operations-Vektor nehme ich jeweils eine einzuplanende Operationen raus und plane sie mit verschiedenen zusätzlichen berechneten Werten (Startzeit, Endzeit etc.) ein. Danach wird die (Teil-)Lösung als Objekt-Klasse Solution gespeichert, eine andere geladen und weiter bearbeitet (ist ne Art Agentensystem).
So schön so gut - läuft auch alles ohne Probleme. Wenn ich nun aber bei weiterem Planungsverlauf eine komplette Lösung erhalten habe und die ausgebe, stimmen die Startzeiten etc. hinten und vorne nicht mehr. Ich weiss aber, dass der Algorithmus hinhaut!
Meine Befürchtung (fast schon Gewissheit):
Der eigentlich unveränderliche Operations-Vektor verändert sich durch Entnahme und Weiterverarbeitung von Operationen !!!!
Eingeplante Operationen (mit Referenz vom Orig-Operations-Vektor) scheinen mit vergebenen Startzeiten an den Orig-Vektor zurückgegeben/ -verwiesen und bei neuen Einplanungsschritten aufgegriffen zu werden.
Das ist schlecht !!!
Da ich bis dato viel (zuviel ;-) ) mit Vectoren hantiert habe, schwirrte schon des öfteren die Methode 'clone()' mit d. Interface 'Cloneable' durch mein Kalkül. Komm ich da noch drum herum?
Hat jemand Erfahrungen damit und kann mir evtl. eine Vorgehensweise empfehlen? Gibt es ein verständliches (deutsches?) Tutorial dafür? In allen Büchern, die ich so rumliegen habe, sind darüber nur fadenscheinige Äußerungen zu finden. Am detailliertesten ist noch "Thinking in Java" (Bruce Eckel). Trotzdem nicht richtig verständlich.
Ich vermute, dass ich, wenn clone() zum Einsatz kommen muss, alle Objekte (d.h. alle aber auch alle), die irgendwo verarbeitet werden, gecloned werden müssen. Hat jemand einen Tipp?
Vielen Dank schon jetzt,
chris
ich arbeite an einer Scheduling-Anwendung mit Threads und Vektoren. Habe mich soweit durchgekämpft und muss nun feststellen, dass die implementierten Algorithmen zwar arbeiten, die Lösungen aber allesamt ungültig werden.
Ich speichere Zeitpläne mit einzelnen Operationen (Objekt-Klasse Operation, selbst angelegt) als Vektoren ab. Die benötigten Operationen beziehe ich aus einer Datei, in der das zu berechnende Problem gespeichert ist. Es ergibt sich eine Sammlung an einzuplanenden Operationen (als Vektor angelegt). Ich erstelle in jeder Methode/Iteration eine Instanz des Ausgangs-Vektors und plane damit weiter. Das ist aber wohl nur eine Referenz und keine echte Kopie. Aus diesem Operations-Vektor nehme ich jeweils eine einzuplanende Operationen raus und plane sie mit verschiedenen zusätzlichen berechneten Werten (Startzeit, Endzeit etc.) ein. Danach wird die (Teil-)Lösung als Objekt-Klasse Solution gespeichert, eine andere geladen und weiter bearbeitet (ist ne Art Agentensystem).
So schön so gut - läuft auch alles ohne Probleme. Wenn ich nun aber bei weiterem Planungsverlauf eine komplette Lösung erhalten habe und die ausgebe, stimmen die Startzeiten etc. hinten und vorne nicht mehr. Ich weiss aber, dass der Algorithmus hinhaut!
Meine Befürchtung (fast schon Gewissheit):
Der eigentlich unveränderliche Operations-Vektor verändert sich durch Entnahme und Weiterverarbeitung von Operationen !!!!
Eingeplante Operationen (mit Referenz vom Orig-Operations-Vektor) scheinen mit vergebenen Startzeiten an den Orig-Vektor zurückgegeben/ -verwiesen und bei neuen Einplanungsschritten aufgegriffen zu werden.
Das ist schlecht !!!
Da ich bis dato viel (zuviel ;-) ) mit Vectoren hantiert habe, schwirrte schon des öfteren die Methode 'clone()' mit d. Interface 'Cloneable' durch mein Kalkül. Komm ich da noch drum herum?
Hat jemand Erfahrungen damit und kann mir evtl. eine Vorgehensweise empfehlen? Gibt es ein verständliches (deutsches?) Tutorial dafür? In allen Büchern, die ich so rumliegen habe, sind darüber nur fadenscheinige Äußerungen zu finden. Am detailliertesten ist noch "Thinking in Java" (Bruce Eckel). Trotzdem nicht richtig verständlich.
Ich vermute, dass ich, wenn clone() zum Einsatz kommen muss, alle Objekte (d.h. alle aber auch alle), die irgendwo verarbeitet werden, gecloned werden müssen. Hat jemand einen Tipp?
Vielen Dank schon jetzt,
chris