비선형 제약 최소화를위한 C ++ 라이브러리


9

현재 matlab "fmincon"함수로 구현 된 비선형 제약 최소화 문제를 해결하려고합니다. 내 기대는 최소화 (fun1, x0, uB, lB, fun2)입니다. 여기서 x0은 초기 상태이고 fun1은 최소화 해야하는 함수, uB는 상한, lB는 하한 및 fun2는 비선형 평등의 벡터를 제공하는 함수입니다 http://www.mathworks.com/help/optim/ug/fmincon.html에 설명 된 / inequalitiesnonlcon 기능으로. 이러한 벡터는 반복을 통해 변경됩니다 (x_n, n 번째 솔루션 벡터 반복에 비선형 적으로 종 속됨). matlab 구현에서 이들은 c (x) <= 0 형식입니다. 이것은 matlab에서 c ++로 이식 해야하는 마지막 코드 이며이 알고리즘을 포함하는 적절한 c ++ 라이브러리를 찾으려고 노력하고 있습니다. 이것이 제가 여기서 도움을 구하는 이유이며 귀하가 전문 지식을 제공 할 수 있다면 대단히 감사하겠습니다.

내가하고 싶은 것의 좋은 예는이 페이지의 첫 번째입니다 http://www.mathworks.com/help/optim/ug/constrained-nonlinear-optimization-examples.html#f10960?s_tid=doc_12b 만 차이하면 해당 I입니다 경계도 필요합니다 ...

미리 감사드립니다.

베드로


NLOPT ab-initio.mit.edu/wiki/index.php/NLopt_C-plus-plus_Reference 를 사용할 가능성이 있지만 목적 함수에서 "최소화 된"함수 평가를 여러 번 호출하여 유한 한 차이를 계산해야합니다. 알고리즘에 의해 처리되어 성능을 향상시키기 위해 자체적으로 처리되기를 희망합니다. 최소화 된 함수는 계산하는 데 정말 비쌉니다. 명확히하기 위해 최소화 된 기능은 시계열 마코프 전환 모델 추정에서 원본 데이터를 사용하여 추정 모델의 로그 가능성입니다.
피터 코타 스

1
이 질문에 대한 답을 보셨습니까 ? 요구 사항이 충분히 해결되지 않은 경우 유용한 권장 사항을 얻으려면 질문을 편집하여 지적해야합니다.
Christian Clason

감사합니다. 유용한 정보가 몇 가지 있습니다. 현재 NLOPT 라이브러리에서 팔꿈치까지 올라가서 문제에 적합하다는 것을 알았습니다. 나는이 주제를 계속해서 게시 할 것이고 해결책을 제시 할 것이다. 프로세스를 더 빠르게 할 수있는 도움은 여전히 ​​감사합니다. 예를 들어 실제 구현
Peter Kottas

1
몇 가지 질문 : 1. 문제가 볼록합니까? 2. 목표와 제약이 다른가? 그렇다면 몇 번입니까? 한번? 두번? 3. 파생 상품이있는 경우 쉽게 파생 상품을 계산할 수 있습니까? 이러한 미분을 쉽게 구할 수없는 경우 유한 차이 근사값을 쉽게 계산할 수 있습니까? 4. 결정 변수는 몇 개입니까? (즉, 얼마나 많은 변수를 최소화하려고합니까?) 대략적인 추정으로 충분합니다. 5. 기능 평가는 비쌉니까? 더 나은 답변을 제공하기 위해이 모든 정보를 갖는 것이 도움이 될 것입니다.
제프 옥스 베리

안녕! 우선 답장을 보내 주셔서 감사합니다. 1. 최소화 된 기능은 재무 애플리케이션에서 시계열의 마르코프 스위칭 모델 추정과 로그 특성 사이의 로그 우도이므로 시끄러운 결과는 아닙니다. 2.no 3. 유한 한 차이 만 사용 4. 솔루션 벡터는 n 개의 변수로 구성되며, 여기서 n은 원하는 모델 매개 변수에 따라 다르며 일반적으로 12에서 30을 말합니다. 계산에 삐악 삐악 소리입니다
피터 Kottas

답변:


2

함수를 차별화 할 수없는 경우 유한 차이를 사용하는 방법에주의해야합니다. 미분 정보를 사용하려는 경우 가장 좋은 방법은 반 부드러운 뉴턴 유형의 방법 일 것입니다. 이러한 방법을 설명하는 일련의 노트는 여기 에서 찾을 수 있습니다 .

12 개에서 30 개의 변수는 패턴 검색 (직접 검색이라고도 함) 방법으로 가능한 것의 상단에있을 것입니다. 패턴 검색 방법과 같은 미분없는 최적화 방법에 대한 Rios and Sahinidis의 Journal of Global Optimization의 최근 검토 논문은 여기 에서 웹 사이트 와 함께 찾을 수 있습니다 . SIAM Review의 Kolda, Lewis 및 Torczon의 이러한 방법에 대한 최신 리뷰 논문은 여기를 참조하십시오 . 이러한 방법은 고가의 기능 평가에 상당히 효과적이며 반드시 차별화 또는 파생 정보가 필요하지는 않습니다.

이러한 방법 중 많은 방법은 세계 최적의 수렴을 보장하기 위해 일종의 볼록성이 필요하므로 문제를 엄격하게 해결하려면 위의 방법을 분기 및 바운드 전략과 결합해야 할 수 있습니다. 그러나 엄격한 것을 신경 쓰지 않으면 MATLAB과 같은 접근 방식 fmincon이 제대로 작동 할 수 있습니다 (더 이상 보장은 없습니다). 유한 한 차이로 인해 미분 할 수없는 기능의 하위 미분의 멤버가 될 가능성이 높으며, 이는 문제 인스턴스 및 특정 입력 데이터로 충분하여 목적에 맞게 충분히 정확한 결과를 반환 할 수 있습니다. 이 경우, Christian이 그의 의견과 관련이있는 질문에 대한 답변에서 언급 된 라이브러리를보아야 할 것입니다.


2

비선형 최적화 문제를 해결하기 위해 C ++ 라이브러리 만 있으면 RobOptim 을 사용할 수 있습니다 . RobOptim은 처음에 로봇 최적화 문제를 염두에두고 개발되었지만 모든 비선형 최적화 문제에 적합합니다. 여러 비선형 솔버 ( Ipopt , NAG 등)를 위한 플러그인 이 포함 된 간단한 C ++ 인터페이스 를 제공합니다 . 이러한 종류의 래퍼를 사용하면 다른 NLP 솔버를 쉽게 사용할 수 있습니다. 그래디언트를 제공 할 수없는 경우 유한 차분 계산을 자동으로 수행 할 수 있습니다.

오픈 소스이므로 GitHub에서 소스 코드를 확인할 수 있습니다 : https://github.com/roboptim/

@Geoff Oxberry가 수행 한 분석은 RobOptim에 의해 호출 될 비선형 솔버를 선택하는 데 필수적입니다. 이러한 종류의 솔버를 다룰 ​​때 매개 변수 조정은 성능에 큰 영향을 줄 수 있으며 여전히 로컬 미니 마에 갇힐 수 있습니다 (실제로 다루는 문제의 종류에 따라 다름).

참고 : 저는이 프로젝트의 개발자 중 한 명입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.