从 Python 访问 minizinc 数据
Accessing minizinc data from Python
我正在使用 Minizinc 的 Python 接口,并从外部文件读取模型 (.mzn) 和数据 (.dzn)。有没有办法从 Python 访问问题数据?
例如,我使用 Minizinc 手册中的 cakes2-model,它有一个决策变量 b 和一个数据字段 flour.
from minizinc import Instance, Model, Solver
solverToUse = "coinbc"
solver = Solver.lookup(solverToUse)
print(solver.name, ",", solver.version)
model = Model("cakes2.mzn")
model.add_file("cakes2.dzn")
instance = Instance(solver, model)
print(instance.method)
result=instance.solve()
b = result.solution.b
print(b)
这运行良好。但是我怎样才能访问 data/parameter 面粉 ?以下是以与决策变量相同的方式交互式请求数据时的结果:
C:\Users\MartinJo>python -i callingMinizinc2.py
COIN-BC , 2.10.5/1.17.5
Method.MAXIMIZE
3
>>> result.solution.b
3
>>> result.solution.flour
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Solution' object has no attribute 'flour'
>>>
MiniZinc Python 接口当前是使用 minizinc
可执行文件进行通信的接口。默认情况下,MiniZinc 不会在解决方案输出中提供有关其参数变量的任何信息。问题有两种解决方法。
如果您可以更改模型并且在解决之前没有 Python 代码依赖于数据,那么您可以向决策变量和参数变量添加 ::add_to_output
注释你很感兴趣。这样 result.solution.flour
就可用了。
或者,MiniZinc Python 有自己的 DZN 解析器。这可以通过将软件包安装为 pip install minizinc[dzn]
,然后将 parse_data
标志设置为 True
的数据文件包含在内来启用。在您的示例中 model.add_file("cakes2.dzn", parse_data=True)
。之后数据将通过 Model
对象的索引可用:model["flour"]
.
我正在使用 Minizinc 的 Python 接口,并从外部文件读取模型 (.mzn) 和数据 (.dzn)。有没有办法从 Python 访问问题数据?
例如,我使用 Minizinc 手册中的 cakes2-model,它有一个决策变量 b 和一个数据字段 flour.
from minizinc import Instance, Model, Solver
solverToUse = "coinbc"
solver = Solver.lookup(solverToUse)
print(solver.name, ",", solver.version)
model = Model("cakes2.mzn")
model.add_file("cakes2.dzn")
instance = Instance(solver, model)
print(instance.method)
result=instance.solve()
b = result.solution.b
print(b)
这运行良好。但是我怎样才能访问 data/parameter 面粉 ?以下是以与决策变量相同的方式交互式请求数据时的结果:
C:\Users\MartinJo>python -i callingMinizinc2.py
COIN-BC , 2.10.5/1.17.5
Method.MAXIMIZE
3
>>> result.solution.b
3
>>> result.solution.flour
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Solution' object has no attribute 'flour'
>>>
MiniZinc Python 接口当前是使用 minizinc
可执行文件进行通信的接口。默认情况下,MiniZinc 不会在解决方案输出中提供有关其参数变量的任何信息。问题有两种解决方法。
如果您可以更改模型并且在解决之前没有 Python 代码依赖于数据,那么您可以向决策变量和参数变量添加
::add_to_output
注释你很感兴趣。这样result.solution.flour
就可用了。或者,MiniZinc Python 有自己的 DZN 解析器。这可以通过将软件包安装为
pip install minizinc[dzn]
,然后将parse_data
标志设置为True
的数据文件包含在内来启用。在您的示例中model.add_file("cakes2.dzn", parse_data=True)
。之后数据将通过Model
对象的索引可用:model["flour"]
.