2016-04-11 10 views
0

Für eine variable Array wiechoco assign Int IntVar

IntVar[][] array = VF.boolMatrix("example", 5, 10, solver); 

Was ist der Unterschied zwischen

solver.post(ICF.arithm(array[i][j], "=", 0)); 

und

array[i][j] = VariableFactory.fixed(0, solver); 

Ist ein anderes überlegen in Bezug auf z. weniger Platzbedarf, schnellere Lösung, weniger Backtracking?

Antwort

0

Array [i] [j] = VariableFactory.fixed (0, Solver); ist effizienter, da die fixierte Ansicht weniger Speicher belegt (kein großer Unterschied für ein BoolVar, sondern ein IntVar, der auf einer BitSet-List-Domänenimplementierung basiert) und vermeidet, dass eine nutzlose Einschränkung entsteht. Diese Elemente sind recht klein, aber wenn sie mit 10000 multipliziert werden, kann dies die Laufzeit beeinflussen. Außerdem werden sie zwischengespeichert: Wenn zwei Ansichten denselben Wert haben, wird nur ein neues Objekt tatsächlich erstellt. Die Backtrack-Nummer bleibt jedoch gleich (es sei denn, die Suchheuristik basiert auf der Zufälligkeit oder der Anzahl der Constraints usw.).

Best,

Jean-Guillaume Fages https://www.cosling.com/