这类方法的主要思想就是从一个函数的任意一个出发点开始在邻域取值,寻找更优点,逐渐逼近最小值。这个方法有一个明显明显的问题就是容易陷入局部极小值点。所以对于整个问题的步骤主要分为两个部分,一部分是逼近极小值,另一部分是使函数取值跳出极小值的坑,寻找最小值。需要完成这些步骤我们需要三个operator:
- expand operator
- irredundant operator
- reduce operator
其中前两个是为了取到局部最小,而reduce operator是为了跳出局部最小而取到全局最小值
expand operator
选择一个在cube上的minterm为起始点进行扩展,如果一个面上四个点都是minterm那么就可以扩展为一个面,如果是一条楞上都是那么就可以扩展为一条楞,扩展完之后就相当于弄出来了一个implicant。然后再另外选一个没有被cover的点同样的步骤扩展,直到cover到所有的点。下图为一个4输入构成的4维立方体表达。
最终expand的结果如下图所示,这里得到的都是prime implicant:
所以。
irredundant
然而显然在这里是冗余的,因为去掉之后其余的implicant还是能cover到所有的minterm,因此可以去掉这个implicant。这一步去冗余是由irredundant operator来做的。在irredundant operator和expand operator的共同作用下对于这个问题达到了局部最优值。
reduce
这一步需要做的是将一些本来不需要考虑的Literal(a,a',b,b'之类的)降级为care,在cube中表现为原来是一个面的降为一个楞,一个楞降为一个点上面的图就变成了下图,最终的cover也就变成了
然后重复这个步骤一直到得到最优的结果为止