함수 최적화를 위해 Nelder-Mead 알고리즘을 구현하려고합니다. Nelder-미드에 대한 위키 페이지 의 정지 기준을 제외하고, 전체 알고리즘에 대한 놀라 울 정도로 분명하다. 슬프게도 다음과 같이 말합니다.
수렴을 확인하십시오 [설명 필요] .
나는 두 가지 기준을 직접 시도하고 테스트했다.
-
중지하면
에프(엑스엔+1)−에프(엑스1)<ϵ여기서
ϵ작고, 여기서 은 IS 번째 정점 낮은 (주문할 단방향의 하이로) ( ) 함수 값. 즉, 심플 렉스의 최대 값이 최소값과 거의 같은 경우. 이것이 함수가 심플 렉스 내부에서 수행하는 작업에 대해 보장하지 않기 때문에 이것이 제대로 작동하지 않는다는 것을 알았습니다. 예를 들어, 함수를 고려하십시오.
엑스나는나는
에프(엑스1)
에프(엑스엔+1)
에프(엑스)=엑스2이것은 물론 최적화하기는 쉽지 않지만 NM을 사용 하여이 작업을 수행하고 두 개의 단일 점을 및 이라고 가정 해 봅시다 . 알고리즘은 최적을 찾지 않고 여기에 수렴합니다.
x1=−1x2=1
-
두 번째 옵션은 단면의 중심 평가가 포함됩니다 정지를하는 경우
|f(x1)−f(xc)|<ϵ. 이것은 심플 렉스와 중심의 가장 낮은 점이 이와 유사한 값을 갖는 경우 심플 렉스는 수렴을 호출하기에 충분히 작다고 가정합니다.
이것이 수렴을 확인하는 적절한 방법입니까? 아니면 이것을 확인하는 기존의 방법이 있습니까? 대부분의 검색 히트는 알고리즘의 복잡성에 중점을두기 때문에 이에 대한 소스를 찾을 수 없습니다.
답변
Numerical Recipes 의 원본 버전에서이 "다운 힐 심플 렉스 알고리즘"에 대한 설명 은 특히 명확하고 도움이됩니다. 따라서 관련 부분을 인용하겠습니다. 배경은 다음과 같습니다.
1 차원 최소화에서 최소한의 브라켓을 만들 수있었습니다. 아아! 다차원 공간에는 유사한 절차가 없습니다. ... 우리가 할 수있는 최선은 알고리즘에 시작 추측을주는 것입니다. 즉, 시도 할 첫 번째 지점으로 독립 변수로 구성된 벡터입니다. 그런 다음 알고리즘은 (최소한 로컬) 최소값에 도달 할 때까지 상상할 수없는 N 차원 지형의 복잡성을 통해 내리막 길을 내 립니다.
엔엔
다운 힐 심플 렉스 방법은 단일 점뿐만 아니라 초기 심플 렉스를 정의하는 점 으로 시작해야합니다 . [참고 초기 시작점으로 이러한 점을 취할 수 P 0 과 함께] P 난 = P 0 + λ E I 여기서 E I 의 인 N의 단위 벡터와 여기서 λ는 문제의 특성중인 추측 상수되는 길이 스케일. ...
엔+1피0
(10.4.1)피나는=피0+λ이자형나는이자형나는
엔
λ
대부분의 단계는 단순의 반대면을 통해 함수가 가장 큰 단순 점 ( "가장 높은 점")을 아래쪽 점으로 [이동]합니다. ...
이제 당면한 문제에 대해 알고리즘을 종료하십시오. 계정의 일반성에 유의하십시오. 저자는 다차원 옵티 마이저 를 종료 하는 데 직관적이고 유용한 조언을 제공 하고이 알고리즘이이 알고리즘에 어떻게 적용되는지 구체적으로 보여줍니다. 첫 번째 단락은 우리 앞에있는 질문에 대한 답입니다.
종료 기준은 섬세 할 수 있습니다. 우리는 일반적으로 다차원 알고리즘의 하나의 "사이클"또는 "단계"를 식별 할 수 있습니다. 그런 다음 해당 단계에서 이동 한 벡터 거리가 일부 허용 오차보다 조금 작은 경우 종료 할 수 있습니다
TOL
. 대안으로, 종료 단계에서 함수 값의 감소가 일부 공차보다 부분적으로 작을 것을 요구할 수 있습니다FTOL
. ...위의 기준 중 하나는 어떤 이유로 든 다른 곳에서는 도달하지 못한 단일 예외 단계에 의해 속일 수 있습니다. 따라서 최소값을 찾은 시점에서 다차원 최소화 루틴 을 다시 시작 하는 것이 좋습니다 . 다시 시작하려면 보조 입력 수량을 다시 초기화해야합니다. 다운 힐 심플 렉스 법에서는, 예를 들어, 재 초기화해야 의 N + 1 개 식으로 다시 단면의 정점 ( 10.4.1 ) 로, P 0 청구 최소의 정점 중 하나 인.
엔엔+1
(10.4.1)
피0
재시작은 매우 비싸지 않아야합니다. 결국 알고리즘은 재시작 지점으로 한 번 수렴했으며 이제 알고리즘을 이미 시작했습니다.
[페이지 290-292.]
이 텍스트에 첨부 된 부호 수치 조리법 '분별 작은 "의 의미를 명확히 : 차이 값 와 Y (두 값 인수 또는 함수의 값)이 임계 값보다"단편적 작은 "인 T > 0
엑스와이
티>0
에프(엑스,와이)=(|엑스|+|와이|)/2
(1)
참고
William H. Press et al. , 수치 레시피 : 과학 컴퓨팅 기술. 케임브리지 대학 출판부 (1986). 최신 버전은 http://numerical.recipes/ 를 방문하십시오 .
답변
완전한 답변은 아니지만 의견이 너무 길어서 올바른 길로 안내 할 수 있습니다.
이 항목은 John C. Nash의 "컴퓨터의 컴팩트 숫자 방법"2 판의 171 페이지에서 간단히 다루고 있습니다. 그리고 R의 optim()
함수로 구현 된 Nelder-Mead 루틴에 인용 된 참조가 됩니다. 관련 부분 인용 :
티이자형에스티=[(∑나는=1엔+1[에스(비나는)−에스¯]2)/엔]1/2
에스¯=∑나는=1엔+1에스(비나는)/(엔+1).
에스(.)
비
엔+1
엔
비H
비엘
에스(비엘)
에스(비H)
출처를 간략히 살펴보면optim()
가장 높은 함수 값과 가장 낮은 함수 값의 차이 (단일을 정의하는 점의 차이)를 사용하여 수렴을 결정할 수 있습니다. 높은 값과 낮은 값 은 if (VH <= VL + convtol || VL <= abstol) break;
어디에 있습니까 ? 이것은 내가 소스를 매우 빨리 보았고 아마도 뭔가 빠졌을 것이라는 경고와 함께 제공됩니다.VH
VL
이제 귀하의 옵션 (1)은 Nash가 옹호하는 두 번째 접근법 인 것으로 보입니다. 또한 발생한 문제에 대해서도 설명합니다.
(엔+1)
(엔−1)
엔
내쉬가 여기에 언급 한 최초의 참고 문헌은 다음과 같습니다.
Nelder JA, Mead R. 1965. 함수 최소화를위한 단순한 방법. 컴퓨터 저널 7 : 308-313.
O'Neill R. 1971. Algorithm AS 47 : 심플 렉스 절차를 사용한 함수 최소화. 응용 통계 20 : 338-345.
답변
# stop when you run out of patience, no improvement for say 10 iterations in a row:
if t > tbest + patience:
message = "iter %d: f %g >= fbest %g" ...
return message, fbest, xbest
엔+1
- 문제 : 거친 지형, 아마도 잘못된 스케일링 또는 바보 같은 제약 조건
- 알고리즘, 탐색 및 이동 균형 조정 (및 소프트웨어 복잡성)
- 적절한 중지 규칙
실제 테스트 사례를 환영합니다.
(실제 Stopiter
클래스에는 정지 조건이 많으며 patience
벽시계 시간이 가장 간단합니다.)
참조 :
NLopt가 : Nelder-미드 등 많은 알고리즘이 쉽게 비교 할 수 있습니다. 내리막 알고리즘 비교에 대한 참고 사항을 참조하십시오
.
min_improvement