2016-05-01 17 views
0

Ich versuche, ein Minizinc-Modell in Schokolade zu portieren. Ich weiß, wie man Variablen und andere grundlegende Dinge definiert, aber obwohl ich das Tutorial und einige Codebeispiele gelesen habe, habe ich einige Schwierigkeiten, einige nicht triviale Einschränkungen zu definieren. Kann mir jemand einen Rat geben, wie man den folgenden Code (nur z) in einen Choco-Solver-Stil übersetzt?Choco Solver Constraint/Variable Definition

array[1..n,1..n] of int: c; 
array[1..n] of var 0..10: next; 

var 0..sum(c): z = sum(i in 1..n)(c[i,next[i]]); 

Vielen Dank!

Antwort

0

Ich glaube, Sie wissen, wie Sie eine Summenbedingung posten, so dass der nicht-triviale Teil in c [i, next [i]] liegt, die die ganze Zahl in Matrix c in Zeile i und Spalte nächste [i] abruft. Das Problem ist, dass next [i] eine Variable ist, so dass Sie sie nicht direkt für den Zugriff auf ein (Java) -Array verwenden können.

Sie müssen das Element Einschränkung verwenden (das ist auch in minizinc):

/** 
* Creates an element constraint: value = table[index] 
* 
* @param value an integer variable taking its value in table 
* @param table an array of integer values 
* @param index an integer variable representing the value of value in table 
*/ 
default Constraint element(IntVar value, int[] table, IntVar index) 

Wie Sie mit einer Matrix arbeiten, müssen Sie, dass für jede Zeile tun und dann eine Summe auf sie schreiben. Beachten Sie, dass in Java auf Array-Zellen von 0 bis n-1 zugegriffen wird (in Minizinc von 1 bis n). Sie müssen das Modell entsprechend aktualisieren oder einen Offset verwenden.

this helps

https://www.cosling.com/