2016-02-12 78 views
1

在Minizinc中,是否可以对域进行采样?可以说我的域有很多解决方案,运行 - 所有解决方案最初都会返回非常类似的解决方案。采样搜索域

1)有没有办法对域进行采样?也许是BFS?目的是为了跟进解决方案分析。

2)有什么方法可以估计CP中的搜索域大小吗?

我的域名是员工排班问题

问候, ^ h

回答

2
  1. 这是不可能选择在BFS但MiniZinc有search annotations。通过搜索注释,您可以选择变量应以何种顺序分支。您也可以选择将分支的值。不幸的是,MiniZinc不支持随机变量搜索。

    在你的情况下,我会用一个随机值在dom_w_deg上进行分支,但是任何其他的变量选择都可以工作,试试它们。

    solve::seq_search([int_search(some_array, dom_w_deg, indomain_random,complete)]) satisfy; 
    

    请注意,并非所有求解器都支持搜索注释的使用。

    其他替代方法是添加删除相似结果的约束条件。

  2. 您可以随时计算您的解决方案中可以具有的排列数,即变量数乘以其域。这不会考虑任何约束条件,真正的搜索空间可能会更小。

可视化搜索的另一种方法是使用gist或其他程序来可视化搜索。

gist http://www.imada.sdu.dk/~marco/Teaching/AY2010-2011/DM826/gist2.png

您可以展开和收回搜索树的部分,看看哪些变量已经支上。