2017-02-08 29 views
0

中的收斂性(帕累託前沿的平滑性)在DEAP算法(see documentation here)中,我注意到我們需要指定世代數(NGEN)。我被告知,如果帕累託曲線平滑,已經實現了收斂。如何測試DEAP

可以通過在統計中指定「平滑度」值來監視收斂。但是,我仍然對如何定義「平滑度」感到困惑。例如,考慮Knapsack problem specified here。在這個例子中,我們如何監控平滑度?一般來說,我如何監控DEAP的收斂?

回答

1

您可以使用日誌統計來監視各種度量。 只需將「平滑度」定義爲可觀察值,並在其達到所需值後立即退出迭代。

def smoothness(pop): 
    pareto = tools.ParetoFront() 
    pareto.update(pop) 
    return xxx  # <-- need to fill you measure here 

stats = tools.Statistics() 
stats.register("smoothness", smoothness) 

如果您正在使用deap進行符號迴歸,您可能需要查看https://github.com/Ambrosys/glyph。儘管如此,它仍處於早期階段。 Glyph目前正在建立頂端,試圖隱藏樣板代碼。您也可以設置自定義中斷條件:https://github.com/Ambrosys/glyph/blob/master/glyph/application.py#L131

+0

如何定義平滑度?我可以看到,我可以監控每一代的平均,最小和最大適應度。我如何指定「平滑度」? – meraxes

+0

我編輯了我上面的答案。你如何定義平滑度取決於你的問題/領域。 – Ohjeah

+0

好的。雖然定義平滑度有一點幫助。例如,考慮揹包問題:http://deap.readthedocs.io/en/master/examples/ga_knapsack.html 如何定義此類的平滑度? – meraxes