2012-12-04 6 views
3

quadratic programming 문제를 해결하기 위해 CGAL을 사용하고 있습니다. CGAL을 사용한 2 차 프로그래밍의 극대화

내가 +oo-oo (무한대)에서 x^2 x에 대한 촬영 값을 최소화하려는 가정합니다. 이것은 쉽게 수행하여 해결할 수 :
 Program qp (CGAL::SMALLER, false, 0, false, 0); 
     qp.set_d(0, 0, 2); 

     Solution s = CGAL::solve_quadratic_program(qp, ET()); 

가되는 과정의 결과로 0를 반환합니다. 이제 최대화하려는 경우 x^2. 그러기 위해서는 -x^2을 최소화해야합니다. 지금 D = [-2] 긍정적 semidefinite하지 행렬 (이차 프로그래밍 문제 "요청"에 대한 API D이 될 긍정적 인 semidefinite) 등

 Program qp (CGAL::SMALLER, false, 0, false, 0); 
     qp.set_d(0, 0, -2); 

     Solution s = CGAL::solve_quadratic_program(qp, ET()); 

:하지만 다음 "작업"CGAL의 하지 않습니다. 위의 스 니펫을 실행하면 대신 잘못된 결과 0가 반환됩니다.

CGAL에서 x^2과 같은 목적 함수를 최대화하려면 어떻게해야합니까?

답변

3

CGAL의 documentation은 목표 함수가 convex 함수를 최소화해야한다고 말합니다. 볼록하지 않은 -x^2를 최소화하려고합니다. 따라서 CGAL로는 이것을 할 수 없습니다.

필자가 링크 한 문서의 10.2.2 절에서 볼록하지 않은 함수를 최소화하려고하면 문제가 비 볼록하다고 경고하지 않고 대신 최적의 메시지를 반환합니다 솔루션이 발견되었습니다. 즉, QP 용으로 CGAL을 사용한다면 볼록한 이차 곡선인지 아니면 잘못된 대답을 얻는 지 확인하십시오.

볼록이없는 비선형 최적화를 처리 할 수있는 솔버를 고려해보십시오. IPOPT은 오픈 소스이며, 목적 함수와 제약 조건이 두 번 지속적으로 차별화 될 수 있다면 작동 할 것입니다. COIN-OR에는 여러 가지 해결 방법이 있습니다 ("최적화 결정 론적 비선형"참조). KNITRO은 훌륭한 상용 솔루션입니다.