고가의 목적 함수의 글로벌 극대화


12

나는 많은 ( ) 실제 매개 변수 (복잡한 시뮬레이션의 결과) 의 기능을 세계적으로 최대화하는 데 관심 이 있습니다. 그러나 문제의 기능은 평가하는 데 상대적으로 비싸므로 각 매개 변수 세트에 약 2 일이 소요됩니다. 다른 옵션을 비교하고 있으며 제안이 있는지 궁금합니다.30

근사 함수를 개발 한 다음 최대화하는 과정을 포함하는 이러한 종류의 프로세스에는 일련의 메소드가 있다는 것을 알고 있습니다 (예 : Jones et al. "고효율 블랙 박스 함수의 효율적인 글로벌 최적화" ). 그러나 이것은 코드와 관련이있는 것으로 보입니다.

많은 수의 시뮬레이션을 병렬로 실행할 수 있습니다 (50+). 후보 알고리즘을 만들 수있는 한 빨리 후보 솔루션을 만들 수 있기 때문에이 최적화를 수행하기 위해 유전자 알고리즘과 같은 것을 사용하는 것이 좋습니다.

내 질문은 다음과 같습니다. 1) 누구나 이런 종류의 글로벌 솔버 / 권장을 자유롭게 구현할 수있는 경험이 있습니까? 2) 유전자 알고리즘을 선호하거나 피해야 할 이유가 있습니까?

이것은 물리적 인 문제이며 초기 실험에서 매개 변수를 변경하면 성능 변화가 상당히 부드럽게 나타납니다.

최신 정보:

도와 줘서 고마워! 몇 가지 추가 정보 : 최대 위치 이외의 정보는 필요하지 않습니다. 시뮬레이션은 Monte Carlo가 아니라 결정론 적이므로 복잡성이 큰 문제가 아닙니다. 매개 변수에는 명시 적 경계 또는 제한 조건이 없습니다. 내가 가지고 있고 이전에 언급하지 않은 다른 정보는 필요한 최대 크기의 감각입니다. 나는 세계 최대치를 찾고 있지만이 규모 이상의 것에 만족할 것입니다-이것이 도움이 될지 모르겠습니다. 희망적으로 내가 체계적으로 선별을 수행하면 (Brian Borchers가 제안한 라틴 하이퍼 큐브) 이것이 나타납니다.


목적 함수를 평가할 때 추가 정보가 생성됩니까? 모수와 관련하여 미분 (또는 근사)? 목적 함수 자체는 계산하는 데 비용이 많이 들기 때문에 보충 정보를 위해 그러한 계산을 작성해야 할 수도 있습니다.
hardmath

(1 년 후), 30 가지 매개 변수 중 몇 가지를 바꾸면서 무엇을 했습니까?
데니스

부인 : 나는 가장 직감적 인 매개 변수를 추측하기 위해 물리적 직관 (및 운)을 사용할 수 있었으며 "충분히 좋은"결과를 얻도록 다양하게 사용할 수있었습니다. (이 경우 정확한 최적 값을 찾는 것이 충분히 큰 답을 찾는 것만 큼 중요하지는 않습니다.) 이러한 기술을 최대한 활용할 필요는 없었지만 편리하게 사용하는 것이 좋습니다.
AJK

이것은 2 년 반 전이지만, 객관적인 기능 평가 (결정적 시뮬레이션)에서 정확도 수준을 선택할 수 있습니까? 정확성과 실행 시간을 절충 할 수 있습니까?
Mark L. Stone

답변:


11

목적 함수가 평가하는 데 비용이 매우 많이 드는 경우 유전자 알고리즘은 매우 좋지 않은 선택입니다. 이러한 방법은 각 세대 (병렬 처리가 도움이 될 수 있음) 및 많은 세대 (본질적으로 순차적 임)에서 많은 함수 평가가 필요합니다. 세대당, 이것은 매우 느릴 것입니다.

이 문제가 어디에서 왔는지 언급하지 않았습니다. 가능성 표면을 통계적으로 분석하고 있습니까 (이 경우 최적의 매개 변수와 목표 값 이상을 원할 것입니까) 또는 목적 함수를 최적화하고 있습니까?

목적 함수 계산이 정확한지 또는 부 정확한지 언급하지 않았습니다. 종종 목적 함수가 Monte Carlo 시뮬레이션에 의해 계산 될 때 값이 시끄러운 경우가 종종 있습니다. 이것은 많은 최적화 알고리즘을 오도 할 수 있습니다. 응답 표면 방법은 노이즈를 부드럽게하여이 문제를 해결합니다.

매개 변수에 대한 제한 사항은 언급하지 않았습니다. 그들은 묶여 있습니까? 매개 변수간에 선형 또는 비선형 구속 조건이 있습니까?

30 개의 매개 변수 중 대부분이 실제로 문제에 그렇게 중요하지 않을 수 있습니다. 실험 설계 스크리닝 접근법을 사용하여 최적화에서 실제로 30 개의 매개 변수 중 어느 것이 중요한지 결정한 다음 중요하지 않은 매개 변수에 대해 합리적인 값을 설정 한 후 중요한 매개 변수에 대해 최적화하는 것이 좋습니다. Latin Hypercube Sampling과 같은 방법은 상대적으로 중요하지 않은 매개 변수를 선별하는 데 매우 유용합니다. 이 선별 단계에서는 수백 개의 프로세서를 쉽게 사용할 수 있습니다.

매개 변수 수를보다 합리적인 크기로 줄인 후 응답 표면 방법을 사용하여 나머지 매개 변수를 최적화합니다. 반응 표면이 실제로 다중 모달이고 지나치게 간단한 반응 표면 모델 (일반적으로 2 차 모델에 맞는 사람들)을 사용하면 쉽게 오도 될 수 있고 전체 최대 값을 놓칠 수 있습니다. 조심해! 이 단계에서는 매개 변수 공간을 매우 잘 다루는 실험 설계를 사용하여 많은 프로세서를 다시 사용할 수 있습니다. 적합 모델이 계산 된 값에서 멀리 떨어져있는 설계 점을 찾으십시오. 이는 해당 영역에서 반응 표면이 제대로 작동하지 않음을 나타냅니다. 매개 변수 공간의 별도 영역에 응답 표면을 작성해야 할 수도 있습니다.

마지막 단계로, 반응 표면 최적화의 매개 변수로 시작하여 한 번에 하나씩 조정하여 스크린 아웃 된 매개 변수의 값을 개선 할 수 있습니다 (좌표 강하).

이런 종류의 최적화를위한 프레임 워크로서 DAKOTA의 추천을 두 번째로하겠습니다. 이 최적화를 한 번만 수행하려는 경우 계산을 수동으로 구성하는 것이 더 쉬울 수 있지만 반복적으로 수행하려는 경우 DAKOTA가 매우 유용합니다.


4
  1. 나는 이런 종류의 솔버에 대한 경험이 없다. 내 동료 중 일부가 사용했습니다. DAKOTA 는 이러한 종류의 작업에 권장되는 소프트웨어 패키지 인 것 같습니다. 여기에는 사용자가 작업을 제출 대기열에 반복적으로 제출하고 매개 변수 연구, 감도 분석 등에 대한 출력을 사용할 수있는 인터페이스가 포함되어 있습니다. 많은 시뮬레이션 실행의 이점을 활용할지 여부를 잘 알지 못합니다. 동시에.

  2. 매개 변수가 연속적이라고 가정하면 매개 변수가 변경 될 때 성능 지수가 부드럽게 변경되면 서로 게이트 모델이 성능 수치를 적합하게 조정해야하며 대리 파생 정보가 수렴을 수정하는 데 도움이됩니다. 30 개 매개 변수의 경우 결정 론적 미분없는 최적화 방법도 유용해야합니다. 다시, 매끄러움이 도움이 될 것입니다. 대조적으로, 유전자 알고리즘은 파생 정보를 전혀 사용하지 않으며, 종종 우수한 성능을 달성하기 위해 돌연변이 속도, 재조합 속도 및 선택 파라미터와 같은 파라미터의 튜닝이 필요합니다. 알고리즘 선택으로, 잘 설계된 대리 최적화 또는 결정 론적 미분없는 최적화 방법이 더 나은 수렴 동작을 갖기를 기대하기 때문에 유전자 알고리즘을 폴백으로 사용합니다.


결정 론적 미분없는 최적화 방법을 사용하는 것이 현명하지 않을 수있는 몇 가지 이유입니다. 첫째, 로컬 검색 방법은 로컬 최대 값을 찾아서 매개 변수 공간의 다른 곳에서 훨씬 더 나은 지점을 찾을 수 없게합니다. 둘째, 이러한 방법은 일반적으로 반복 당 기능 평가가 상대적으로 적은 반복이 많이 필요하므로 병렬화가 잘되지 않습니다.
브라이언 Borchers

당신은 지역 검색 방법에 대한 권리입니다. 대리 모델을 구성하지 않고 로컬 검색 방법보다 더 나은 동작을 수행하는 전역 검색 방법 (DIRECT, 분기 및 바운드, 다단계 좌표 검색)이 있습니다. 나는 이러한 방법을 병렬화하는 효과에 대해 말할 수 없다.
Geoff Oxberry

1

블랙 박스 최적화를 위해 TOMLAB, DAKOTA 및 OpenMDAO를 살펴보십시오.


편집 # 3 : 베이지안 최적화는 EGO와 매우 유사합니다.

https://github.com/mwhoffman/pybo

https://github.com/hyperopt/hyperopt

제한된 라이센스 :

https://github.com/rmcantin/bayesopt

https://github.com/HIPS/Spearmint


편집 # 2 :

첫 번째 방법은 고가의 기능을 중심으로 메타 모델 / 서로 게이트 (kriging / GP 사용)를 구축하고이 추가 정보를 사용하여보다 적은 평가 (EGO)로 전체 최적 지점을 더 빨리 찾는 것입니다.

MDAS에서와 같은 두 번째 방법은 여러 수준에서 영리한 적응을 통해 직접 검색하는 것입니다.

휴리스틱 접근법은 본질적으로 유전 적 / 무작위 적이며 어떠한 보장도 없습니다.


편집 # 1 :

TOMLAB은 Sahinidis의 논문에 따라 최상의 속도 / 최적화 품질을 갖춘 MATLAB 기반 도구입니다. 그러나 이것은 회사의 사용량이 많은 상용 도구입니다. 나는 이것을 사용하지 않고있다.

DAKOTA는 일반적인 최적화 외에도 불확실성 정량화에 더 적합합니다. C ++ 및 일부 레거시 포트란 코드를 기반으로합니다. LGPL 라이센스 및 바이너리를 다운로드 할 수는 있지만 GCC 또는 MSVS / ifort를 사용한 Win7에서의 경험으로는 최소한 재 컴파일하기가 매우 어렵습니다. boost, lapack, cmake for build에 의존합니다. 기본적으로 이것은 수많은 오픈 소스 솔버와 몇몇 상용 솔버를위한 래퍼입니다. 이 제품은 SNL 제품이며 Sandia NL의 다른 프로젝트와 긴밀하게 통합되어 있습니다. IMSL 루틴 대신이 것을 성공적으로 통합 할 수있었습니다. Sahinidis의 논문은 DAKOTA와의 엄청난 병렬성을 놓쳤다.

OpenMDAO는 NASA가 APACHE 라이센스에 따라 Python으로 개발 한 최적화 기반 설계 소프트웨어입니다. 현재 이것을 시도하고 있습니다.


SciComp에 오신 것을 환영합니다! 현재 작성된 것처럼 게시물에 TOMLAB 또는 OpenMDAO를 보는 것이 좋은 아이디어가되는 이유는 실제로 설명되어 있지 않습니다 (다른 답변은 이미 DAKOTA에 대해 논의하고 있습니다). 우리는 권장 사항을 제공했을뿐만 아니라 그 권장 사항이 유용한 이유, 잠재적 인 함정 등을 논의합니다.
Geoff Oxberry

나는 먼저 대답을 서두르고 설명을 추가했다.
denfromufa

0

당신이 30 개 실행, 각 VARYING 하나의 매개 변수를 감당할 수없는 경우, 그룹에서 그들을 변화 :
예를 들어, 각 함께 4 개 매개 변수를 변화 8 개 실행을 누른 후 최고 2 실행 / 8 매개 변수를 수정 ...
(나는 절충하는 방법을 몰라 정보 이득 대 총 런타임; 다중 무기 산적 ?)


-3

다음은 멀티 코어 CPU를 사용하여 고가의 블랙 박스 기능을 효율적으로 최적화 할 수 있는 코드 입니다.

코드 뒤의 수학에 대한 설명은 여기에 있습니다 .


1
이것은 이 게시물 에서 제공 한 것과 같은 답변 입니다. 또한 이것은 당신의 일인 것 같습니다. 그것이 사실이라면, 귀하의 답변에 명시 적으로 기재하십시오.
nicoguaro

이 백서에서 설명하고 소프트웨어로 구현 된 접근 방식에 대한 세부 정보를 제공 할 수 있습니까? 사용 된 방법은 무엇입니까? 왜 좋은가요? 이 접근법에서 다른 답변이 다루지 않는 것은 무엇입니까?
nicoguaro

1
또한 귀하가이 소프트웨어의 저자라는 점을 언급 하시기 바랍니다. 따라서이 내용을 읽는 사람은 귀하가 a) 귀하가 말하고있는 것을 알고 b) 약간 부분적 일 수 있음을 알고 있습니다.
Christian Clason
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.