You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用MiniZinc的Gecode求解器报错,Chuffed可正常运行

Python调用MiniZinc时Gecode求解器报错,Chuffed正常运行

问题现象

通过Python运行MiniZinc模型,使用Gecode求解器时即使是简单测试模型也报错,切换为Chuffed求解器则能正常执行。

测试代码

import minizinc 

model = minizinc.Model()

model.add_string("""
var -100..100: x;
int: a; int: b; int: c;
constraint a*(x`*`x) + b`*`x = c;
solve satisfy;
""")
gecode = minizinc.Solver.lookup("gecode")
inst = minizinc.Instance(gecode, model)
inst["a"] = 1
inst["b"] = 4
inst["c"] = 0
result = inst.solve(all_solutions=True)
for i in range(len(result)):
print("x = {}".format(result[i, "x"]))

报错信息

result = inst.solve()
File "C:\Users\acer\AppData\Local\Programs\Python\Python310\lib\site-packages\minizinc\instance.py", line 183, in solve
return asyncio.run(coroutine)
File "C:\Users\acer\AppData\Local\Programs\Python\Python310\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\Users\acer\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 646, in run_until_complete
return future.result()
File "C:\Users\acer\AppData\Local\Programs\Python\Python310\lib\site-packages\minizinc\instance.py", line 235, in solve_async
async for result in self.solutions()
File "C:\Users\acer\AppData\Local\Programs\Python\Python310\lib\site-packages\minizinc\instance.py", line 450, in solutions
raise parse_error(stderr)
minizinc.error.MiniZincError: MiniZinc stopped with a non-zero exit code, but did not output an error message.

解决方法

  1. 修正MiniZinc模型语法错误:模型中的乘法表达式被错误地用反引号包裹,将xx改为x*x,bx改为b*x。
  2. 修正Python代码缩进:for循环内的print语句缺少缩进,需添加4个空格。

修正后的完整代码:

import minizinc 

model = minizinc.Model()

model.add_string("""
var -100..100: x;
int: a; int: b; int: c;
constraint a*(x*x) + b*x = c;
solve satisfy;
""")
gecode = minizinc.Solver.lookup("gecode")
inst = minizinc.Instance(gecode, model)
inst["a"] = 1
inst["b"] = 4
inst["c"] = 0
result = inst.solve(all_solutions=True)
for i in range(len(result)):
    print("x = {}".format(result[i, "x"]))

原因说明

Gecode求解器对MiniZinc语法的严格性更高,错误的反引号语法会导致模型解析失败;而Chuffed求解器对这类语法错误有一定容错能力,所以能正常运行。修正语法错误后,Gecode即可正常执行求解。

内容的提问来源于stack exchange,提问作者Giacomo Gaiani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:17:44