Ich habe eine einfache Frage bezüglich der Minizinc-Syntax. Meine Eingangs .dzn Datei enthält einen Satz von 2 dimentional Arrays (etwa bis zu 30 Arrays), erklärt sich wie folgt:Minizinc, wie man eine Karte oder eine Wörterbuchdatenstruktur erstellt
rates_index_0 = array2d(1..3, 1..501, [ 15, 20, 23, ....
rates_index_12 = array2d(1..3, 1..501, [ 21, 24, 27, ....
...
Anmerkung: Indexzahlen haben Lücken in ihnen (zB 12 -> 20)
In meinem Modell muss ich eines dieser Arrays abhängig vom Wert der Variablen verwenden. In der üblichen Programmiersprache würde ich es mit einer Karte oder einer Wörterbuchdatenstruktur lösen. Aber in Minizinc ich hartzucodieren dies auf folgende Weise:
function var int: get_rate(int: index, var int: load, int: dc_size) =
if index == 0 then
rates_index_0[dc_size, load]
else if index == 12 then
rates_index_12[dc_size, load]
else if index == 16 then
rates_index_16[dc_size, load]
else if index == 20 then
rates_index_20[dc_size, load]
else
assert(false, "unknown index", 0)
endif endif endif endif;
Das einzige offensichtliche Problem mit diesem Code ist, dass ich brauche Modell I-Eingang ändere jedes Mal zu ändern. Gibt es einen besseren Weg, wie ich das generisch kodieren kann?
Danke!
OK, ich sehe, könnten Sie bitte Ihre Aussage über Kompilierung und Speichernutzung klären. Benötigt array3d (0..60, 1..3, 1..501) mehr Rechen-/Speicherressourcen als 60 array2d (1..3, 1..501)? Ich habe Ihre Lösung verstanden, im Grunde füge ich einfach mein Array2ds in ein 3d zusammen und mappe dann Indizes. Der einzige Nachteil ist, dass die Daten für Menschen schwieriger zu verstehen sind. Aber natürlich muss ich das Modell nicht ändern. Vielen Dank! – kirbo
Ich denke du hast es verstanden! Zum Speicherverbrauch: 60 2d-Arrays nehmen beim Kompilieren nicht mehr Speicher auf als die kombinierten 3d-Arrays. Wenn Sie jedoch den Übersetzungsschritt nicht ausführen und zusätzliche (leere) Arrays im 3D-Array hinzufügen möchten, die nicht zu den 2D-Arrays gehören, kann der Speicherbedarf hoch sein. – Dekker
hab es geschafft, danke! – kirbo