2017-02-08 18 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) 

Если вы используете ОЭАП для символической регрессии вы можете посмотреть на https://github.com/Ambrosys/glyph. Тем не менее, он все еще находится на ранней стадии. В настоящее время Glyph построен поверх deap и пытается скрыть код шаблона. Вы также можете установить пользовательские условия перерыва: https://github.com/Ambrosys/glyph/blob/master/glyph/application.py#L131

+0

Как определить гладкость? Я вижу, что я могу контролировать среднюю, минимальную и максимальную пригодность для каждого поколения. Как указать «гладкость»? – meraxes

+0

Я отредактировал свой ответ выше. Как вы определяете гладкость, зависит от вашей проблемы/домена. – Ohjeah

+0

Хорошо. Немного помогите, хотя с определением гладкости. Например, рассмотрим проблему Knapsack: http://deap.readthedocs.io/en/master/examples/ga_knapsack.html Как определить гладкость для таких? – meraxes