我正在编写一个应该解决 MiniZinc 中的纸牌游戏的代码。如果条件不满足,我已被要求返回一条消息“此纸牌无法解决”。
不幸的是,我在 Internet 上找不到解决此问题的方法。有谁知道我该怎么做?
我不知道这样做的万无一失的版本,实际上它有点棘手。但这里有一些想法。
模型不满意时的标准响应是“=====UNSATISFIABLE=====”。您可以编写一个包装程序来将此字符串替换为“无法解决此纸牌”。这可能是我自己会做的。
该字符串可以通过程序“solns2out”(MiniZinc 工具链中的程序,该程序执行解决方案的漂亮打印)进行更改,该程序具有参数“--unsat-msg”,您可以在其中声明自己的消息。
solns2out 的参数是-据我所知-不能通过 MiniZincIDE 获得,因此您必须推出自己的工具链,因此您必须编写完整的程序链来使用它,例如
flatzinc model.mzn -some_parameters | solver model.fzn -with_some_parameters | solns2out model.ozn --unsat-msg "This solitaire cannot be solved"
这可能会非常棘手,具体取决于您希望它有多灵活,例如您需要什么参数等。
(有时使用“minizinc”程序而不是“flatzinc”程序更容易。使用 -help 选项运行程序以查看不同的参数。)