最小化A *算法的布尔函数启发式算法

时间:2011-11-14 08:03:14

标签: algorithm search a-star minimization

我必须在python中编写一个程序来最小化布尔函数,但问题是我必须使用搜索算法,例如A *或更简单的算法BFS或类似的东西。我用迭代加深编写了一个程序,它解决了每个问题,但它太慢了(每个问题限制为20秒)。

所以我用A *算法写了另一个程序,(我们被告知如果我们想要更好的成绩我们必须使用这个),但我设法使它比使用Iterative加深的那个慢10倍,这是因为我无法找出算法的正确启发式算法。我无法弄清楚有效最小化的标准是什么(良好的启发式)。

问题:

您将获得表示真值表的列表([[0,1,0,1],[...],[...],[....],...])列表(内部列表中的最后一个元素表示函数的值)。编写一个程序,只使用搜索算法(例如A *,BFS,IDA *,DFS,..)找到最小的析取形式的布尔函数。对于每个问题,你有20秒可以解决它。

1 个答案:

答案 0 :(得分:1)

我将假设你的州是有效的合谋。这是一个简单的可接受启发式算法。设U是映射到1的函数输入集,它们与当前状态中的任何合取都不匹配。当U不为空时,在U中选择输入x。从U中删除所有输入y,使得存在与x和y匹配的有效联合。返回从U中选择的元素数。

实际上,这个问题可以看作是set cover的一个实例,而这种启发式方法正在贪婪地构建LP松弛的双重解决方案。如果您可以访问LP求解器,则可以通过将双LP解析为最优来获得更高质量(但可能更慢)的启发式。