有没有办法将 Minizinc 求解器的所有解决方案绑定到 python 变量(当通过 cell magic 在 jupyter notebook 中使用时)?

Is there a way to bind all the solutions of Minizinc solver to a python variable (when used in jupyter notebook via cell magic)?

我想用 minizinc 解决一个优化问题。我通过 cell magic 在 Jupyter notebook 上使用它,如下所示。

对于下面的简单二次方程,当我单独使用 -a 标志时,我会根据需要在输出中获得 x 的所有可能解。

%load_ext iminizinc
a=1
b=4
c=0
%%minizinc -a

include "gecode.mzn";
var -100..100: x;
int: a; int: b; int: c;
constraint a*(x*x) + b*x = c;
solve satisfy;

[Out]: [{'x': -4}, {'x': 0}]

但是,当我尝试将所有可能的解决方案绑定到一个 python 变量时,它只绑定其中一个解决方案,而不是全部:

%%minizinc -a -m bind

include "gecode.mzn";
var -100..100: x;
int: a; int: b; int: c;
constraint a*(x*x) + b*x = c;
solve satisfy;
x

[Out]:0

同样,当我只使用 -m 绑定标志而不使用 -a 标志时,它也只将一个解决方案绑定到变量:

%%minizinc -m bind
x

[Out]:-4

如果有办法将所有可能的解决方案绑定到 python 变量,请告诉我。 (需要声明不同数据类型的变量吗?)

bind 选项背后的想法是将 MiniZinc 变量的解值绑定到 Python 中具有相同名称的变量。目前还没有定义当你使用 -a 标志时它是如何工作的,因为这意味着 Python 变量不知何故需要多个值。目前的行为似乎是只有最后一个解决方案存储在 Python 变量中。

如果您对如何更改它有想法,那么您可以向 iMiniZinc 存储库提交问题。

解决方法是只使用您的第一个示例,其中结果作为包含解决方案的字典列表返回。