DEAP

2017-02-08 11 views
0

에서 수렴 (파레토 프론트의 부드러움)을 테스트하는 방법 DEAP 알고리즘 (see documentation here)에서 세대 수 (NGEN)를 지정해야한다는 것을 알게되었습니다. 파레토 곡선이 매끄럽다면 컨버전스가 달성되었다고 권고 받았다.DEAP

통계에 "부드러움"값을 지정하여 수렴을 모니터링 할 수 있습니다. 그러나 나는 여전히 "부드러움"을 정의하는 방법에 대해 혼란스러워합니다. 예를 들어 Knapsack problem specified here을 예로 들어 보겠습니다. 이 예제에서 부드러움을 어떻게 모니터합니까? 일반적으로 DEAP에서 컨버전스를 모니터링하려면 어떻게합니까?

답변

1

로그 북 통계를 사용하여 다양한 조치를 모니터 할 수 있습니다. "smoothness"를 관측 가능으로 정의하고 원하는 값에 도달하자마자 반복 실행을 중단하십시오. 당신은 상징적 인 회귀에 대한 DEAP를 사용하는 경우

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

좋아. 부드러움을 정의하면서 조금 도움이됩니다. 예를 들어, 배낭 문제를 고려해보십시오. http://deap.readthedocs.io/en/master/examples/ga_knapsack.html 그런 부드러움을 어떻게 정의 할 수 있습니까? – meraxes