Skip to main content

使用ZPL进行优化除了能感受到速度慢之外,还有一个迷惑点:

当一个系统优化到一定程度后,MF的值不变了。

比如我想写个for loop 每次执行OPTIMIZE 10, (10 个循环的optimization)。是不是由于在10个循环没有找到解后,它又回到了起始的状况,这样使得优化器在MACRO中永远没法找到解? 

ZPL macro中与优化相关的Keywords 有 OPTIMIZE 和 HAMMER.

在使用ZPL进行优化时感受到速度比使用UI进行优化速度慢的原因是,在UI界面上可选择使用多核进行优化,效率比 single-threaded 高。在OPTIMIZE 或 HAMMER 关键字时,是单线程的。

针对个别情况,在使用OPTIMIZE时无法观察到MF值的变化,是由于OPTIMIZE本身使用的是局部优化算法,在找到局部最优解之后无法在当前搜寻范围内找到能使MF继续降低的可能的解。在这种情况下,即使多次运行OPTIMIZE 10,该局部优化器可能无法继续推动优化进行下去。这种情况下如果使用UI进行操作,将看到类似的结果。

如果要摆脱这种困境,可继而使用全局优化 HAMMER。 

OPTIMIZE和 HAMMER 这两个keywords 在使用上有一点点小差别,如果不指定cycle number,局部优化可以 automatic 模式进行。HAMMER的话cycle number会指定在1-99之间,会有情形运行完HAMMER之后依然无法进一步优化系统。对于这种情况,可在同一loop的优化过程内交替使用局部优化器和全局优化器。

 

 

 

 


Reply