gpt4 book ai didi

Minizinc 在求解过程中跟踪数组

转载 作者:行者123 更新时间:2023-12-04 01:11:00 28 4
gpt4 key购买 nike

我有一个二维网格,其中某些单元格值会产生不同的分数,我想通过为单元格分配值来最大化分数。是否可以跟踪求解器在求解过程中尝试的每个网格?下面是模型的一个片段,只是为了演示这个想法。

int: i_count;
int: e_count;
set of 1..3: ROW;
set of 1..3: COL;

enum CELL = { U, I, E };

array[ROW,COL] of var CELL: grid;

constraint sum(r in ROW, c in COL)(grid[r, c] = I) <= i_count;

constraint sum(r in ROW, c in COL)(grid[r, c] = E) <= e_count;

var int: assignment_gain = sum(r in ROW, c in COL)(
let {var CELL: cell = grid[r,c]} in (cell = I) * I_SCORE + (cell = E) * E_SCORE
);

solve maximize assignment_gain;

output
["Max assignment_gain: \(assignment_gain), with below grid:\n"] ++
["\(grid[r,c])" ++ if c = n then "\n" else "" endif
| r in ROW, c in COL];

我尝试将 trace 放入 assignment_gain 语句中,如下所示,但没有成功,输出示例为:

grid[1,1]=X_INTRODUCED_0_, grid[1,2]=X_INTRODUCED_1_, ...
var int: assignment_gain = sum(r in ROW, c in COL)(
let {var CELL: cell = trace("grid[\(r),\(c)]=\(grid[r,c]), ", grid[r,c])} in (cell = I) * I_SCORE + (cell = E) * E_SCORE
);

最佳答案

MiniZinc 中包含的trace 功能允许您在编译阶段输出表达式。这不允许您在求解过程中跟踪表达式。

在求解过程中查看变量值的选项取决于您想要查看的值。

在 MiniZinc 中很容易看到中间解决方案。因此,求解器找到的解决方案还不是最优的,但确实满足所有约束。要查看这些解决方案,您可以在命令行上添加 --intermediate-solutions。在 MiniZincIDE 中,这应该是默认行为,但您可以通过单击“显示配置编辑器”来配置它。

另一方面,如果您想在搜索过程中探索变量的值(即,求解器为某些变量尝试哪些值),那么您必须更深入地挖掘。 MiniZinc 支持多种解算器,它们使用不同种类的算法来求解。因此,MiniZinc 没有标准的方式来交互(或显示)求解器中的搜索。但是,一些求解器确实具有允许您检查/调试搜索的工具。例如:

  • Chuffed、Gecode 和其他一些求解器使用最近集成到 MiniZincIDE 中的“CPProfiler”。您可以通过单击工具栏中的“MiniZinc > Profile Search”来激活它。该工具可以帮助您可视化搜索树,甚至可以分析 LCG 求解器中的不良学习。

  • 标准 MiniZinc 发行版包括“Gecode Gist”,它具有专门针对 Gecode 的搜索分析。它还将显示搜索树和做出的决策,但有一些更复杂的工具来检查搜索树中的节点。

这些是 MiniZinc 附带的工具,但对于其他 MiniZinc 求解器,可能有更多工具可用。

关于Minizinc 在求解过程中跟踪数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64849221/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com