Ich bin sehr neu in der Constraint-Programmierung und lerne MiniZinc. ich große Prädikate haben, und ich möchte ein Äquivalent einer Funktion (in einer klassischen Programmiersprache) erstellen, die PrädikateWie man ein Äquivalent für eine Funktion in Minizinc erstellt, um ein Prädikat zu vereinfachen
Zum Beispiel zu vereinfachen, habe ich:
% INPUTS
int: nodes;
float: T;
%OUTPUT
array [1..nodes, 1..nodes] of var 0..1000: rates_matrix;
predicate column_summ(int: to_dc) =
sum(from_dc in 1..nodes) (rates_matrix[from_dc, to_dc]) * sum(from_dc in 1..nodes) (rates_matrix[from_dc, to_dc]) * 2 < T;
constraint forall(n in 1..nodes) (column_summ(n));
solve satisfy;
Das column_summ Prädikat einfach ein berechnet Äquivalent einer Funktion f (x) 2x^2 < T aber in seiner aktuellen Form braucht es viel Platz und es ist schwer dem Code zu folgen. Ich mag den Code in der folgenden Art und Weise in die Lage sein zu umschreiben:
function f_polynomial(x) = 2*x*x;
function f_sum(y, m) = sum(from_dc in 1..nodes) (m[from_dc, y])
predicate column_summ(int: to_dc) =
f_polynomial(f_sum(to_dc, rates_matrix)) < T;
Was ist die korrekte Syntax in MiniZinc den obigen Code zum Ausdruck bringen? Danke!
Ich habe dieses Tutorial durchgesehen, aber habe kein Beispiel für die "klassische" Funktionsdefinition in der Art gefunden, wie Sie es gezeigt haben, das hilft sehr! Vielen Dank! – kirbo