【问题标题】:MiniZinc on Jupyter Python [duplicate]Jupyter Python 上的 MiniZinc [重复]
【发布时间】:2021-04-18 23:50:35
【问题描述】:

我正在尝试在 Jupyter 中使用 Minizinc。 我已经安装了所有的软件包,但是当我运行模型时它运行一个错误。我尝试使用 MiniZinc Python pdf 上的示例,但它运行相同的错误。 代码是:

from minizinc import Instance, Model, Solver

gecode = Solver.lookup("gecode")

model = Model()
model.add_string(
    """
    include "all_different.mzn";
    set of int: A;
    set of int: B;
    array[A] of var B: arr;
    var set of B: X;
    var set of B: Y;

    constraint all_different(arr);
    constraint forall (i in index_set(arr)) ( arr[i] in X );
    constraint forall (i in index_set(arr)) ( (arr[i] mod 2 = 0) <-> arr[i] in Y );
    """
)

instance = Instance(gecode, model)
instance["A"] = range(3, 8)  # MiniZinc: 3..8
instance["B"] = {4, 3, 2, 1, 0}  # MiniZinc: {4, 3, 2, 1, 0}

result = instance.solve()
print(result["X"])  # range(0, 5)
assert isinstance(result["X"], range)
print(result["Y"])  # {0, 2, 4}
assert isinstance(result["Y"], set)

Jupyther 回归:

RuntimeError: asyncio.run() cannot be called from a running event loop

【问题讨论】:

标签: python runtime python-asyncio minizinc


【解决方案1】:

按照他们所说的安装步骤,这很神奇! Using MiniZinc in Jupyter Notebooks.

只需运行pip install -U iminizinc,然后您的单元格将如下所示:

%load_ext iminizinc

(^ 这可能会导致白色输出带有奇怪的青色错误,以防万一,请忽略它。如果您想确保已成功加载 minizinc,请再次运行单元格,应该会出现类似 The iminizinc extension is already loaded. 的内容)

# regular python assigments.
# Note that set and range are not JSON serializable, you will need
# always to convert your iterables to list

A = list(range(3, 8))
B = [4, 3, 2, 1, 0]
%%minizinc

include "all_different.mzn";
set of int: A;
set of int: B;
array[A] of var B: arr;
var set of B: X;
var set of B: Y;

constraint all_different(arr);
constraint forall (i in index_set(arr)) ( arr[i] in X );
constraint forall (i in index_set(arr))
    ( (arr[i] mod 2 = 0) <-> arr[i] in Y );

最后一个单元格实际上是 minizinc 代码,在单元格内执行,输出将是您的解决方案。

如果您正在寻找所有可能的解决方案,只需将标志 -a 添加到魔法中:%%minizinc -a

您还可以使用标志 -m bind:%%minizinc -m bind 将输出绑定到 python 变量。在您的情况下,您可以像这样在另一个单元格中检查您的输出变量:

arr # => [0, 1, 2, 3, 4]

要获得所有可能的标志,请使用魔法:%%minizinc?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2018-10-26
    • 2019-01-23
    • 2019-03-23
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多