2014-10-01 2 views
1

Matlab의 유전자 알고리즘과 fmincon 함수를 사용하여 문제를 해결하려고합니다. 여기서 변수의 값에는 상한과 하한이 하나도 없습니다. 대신 변수는 x = 0 또는 lb < = x < = ub의 값을 가져야합니다. 이것은 터빈 할당 문제로, 터빈을 끄거나 (x = 0) 또는 낮은 캐비테이션 제한과 높은 캐비테이션 제한 (lb 및 ub) 내에 둘 수 있습니다. 물론 0과 lb 사이의 값을 위반하는 제약 조건을 만들어 문제를 속일 수는 있지만 문제가 이와 같이 수렴하는 데 어려움을 겪고 있음을 알 수 있습니다. 검색 공간을 줄이는 더 쉬운 방법이 있을까요?Matlab 최적화 - "도넛 구멍"이있는 변수 경계

+0

진행 했습니까? 그 문제에 관해서? 나는 비슷한 문제가있다. 0 이상의 임계 값을 갖는 가중치를 최적화하고 켜기/끄기 가중치의 가능한 모든 조합을 최적화하면 '느껴지지 않습니다'. – ymihere

+0

@ymihere, 지금까지 행운이 없습니다. 나는 이것이 일반적인 제약 시나리오 인 것 같아서, 누군가가 그것을 처리 할 좋은 방법을 발견했을 것입니다 ... – Amy

답변

0

변수의 수가 충분히 작 으면 (예 : 10 또는 15 이하) 변수가 0이 아닌 모든 하위 집합을 시도하고 어떤 하위 집합이 최적 값을 제공하는지 확인할 수 있습니다. 최적화 문제의 구조에 대해 가정 할 수없는 경우 (예 : 0이 아닌 변수에 대한 처벌이 있지만 주요 목적 함수가 "이국적인"경우), 이것이 본질적으로 할 수있는 최선의 방법입니다. 대략적인 해답을 얻으 려한다면, 목표 함수에 소위 "L1"페널티를 더할 수 있습니다.이 페널티는 상수와 변수의 절대 값의 합입니다. 이렇게하면 일부 변수가 0이되고, 주 목표 함수가 볼록하면 음의 절대 값이 볼록이기 때문에 결과 목표 함수가 볼록이됩니다. 엄격하게 convex 함수는 항상 MATLAB에서 구현 된 것을 포함하여 최적화 루틴을 사용하여 도달 할 수있는 전역 최소값을 가지므로 convex 함수를 최적화하는 것이 훨씬 쉽습니다.

+0

변수의 수는 그보다 훨씬 많습니다 (수백 개). 객관적 및 비선형 제약 조건 함수는 복잡하거나 절대적으로 연속적이지 않습니다. 어떤 변수가 0이 될 필요가 없다는 말은 아니 었습니다 ... 사실, 다른 제약 조건을 충족시키는 경우 모두 0이 아니어야합니다. 나는 이것이 당신이 "이것이 어떤 변수가 제로가 될 것을 장려 할 것입니다."라고 말한 것입니다. 그러나 당신의 논리를 따르는 데 어려움을 겪었으므로 오해했을 수 있습니다. 또한 유전자 알고리즘을 사용하면 전역 최적을 찾을 수 없다는 보장이 있으므로 솔루션은 관계없이 "근사치"로 간주 될 수 있습니다. – Amy