我对约束编程很陌生,我正在学习 MiniZinc。我有很大的谓词,我想创建一个等效的函数(在经典编程语言中)来简化谓词
例如,我有:
% 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;
column_summ 谓词仅计算函数 f(x) 2x^2 < T 的等价物,但在当前形式下,它占用大量空间并且难以遵循代码。我希望能够通过以下方式重写代码:
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;
MiniZinc 中表达上述代码的正确语法是什么?谢谢!