이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

문제 해결과 팁

다음 표에는 흔히 발생하는 최적화 문제와 이 문제를 해결하기 위한 권장 사항이 나와 있습니다.

문제

권장 사항

fminbnd 또는 fminsearch로 구한 해가 전역 최솟값이 아닙니다. 전역 최솟값은 검색 공간에 있는 모든 점 중에서 가장 작은 목적 함수 값을 가집니다.

문제가 연속적이지 않고 최솟값을 여러 개 가지는 경우라면 해가 전역 최솟값이 아닐 수 있습니다. 전역 최솟값을 검색하려면 여러 개의 시작점(또는 fminbnd의 경우 구간)에서 최적화를 시작하십시오.

일부 점 x에서 목적 함수 f(x)를 계산할 수 없습니다. 이러한 점을 실현불가능점이라고 합니다.

실현불가능점 x에서 f(x)에 대해 큰 양수 값을 반환하도록 함수를 수정하십시오.

최소화 루틴이 무한 루프에 빠지는 것처럼 보이거나 최솟값이 아닌 해(또는 fzero의 경우 영점이 아닌 해)를 반환합니다.

목적 함수가 NaN 값이나 복소수 값을 반환하는 것 같습니다. 솔버는 목적 함수 값으로 실수 값만 예상합니다. 기타 모든 값은 예기치 못한 결과를 초래할 수 있습니다. NaN 값이나 복소수 값이 있는지 확인하려면 다음을 설정하고,

options = optimset('FunValCheck','on')

options를 입력 인수로 사용하여 최적화 함수를 호출하십시오. 목적 함수가 NaN 값이나 복소수 값을 반환하는 경우, 이와 같이 설정하면 솔버가 오류를 발생시킵니다.

솔버를 실행하는 데 시간이 오래 걸립니다.

대부분의 최적화 문제는 시작점이 좋은 경우 이점을 얻습니다. 문제의 특성에 따라, 해에 가까울 수 있는 영역에서 임의 시작점을 사용해 보십시오.

복잡한 문제는 경우에 따라 진화적인 접근 방식을 통해 효과적으로 풀 수 있습니다. 먼저, 독립 변수의 수가 상대적으로 적은 문제부터 풉니다. 이렇게 더 단순한 문제의 해를 적합한 매핑을 거쳐 더 복잡한 문제에 대한 시작점으로 사용합니다. 또한, 경우에 따라 최적화 문제의 초기 단계에 더 간단한 목적 함수와 덜 엄격한 중지 조건을 사용하여 해를 더 빠르게 구할 수도 있습니다.

솔버가 무슨 작업을 하고 있는지 확실하지 않습니다.

솔버가 반복 실행되면서 무슨 작업을 하는지 확인하려면 다음과 같이 하십시오.

  • @optimplotfval 같은 플롯 함수를 사용하여 반복 과정을 주시하십시오. optimset을 사용하여 PlotFcns 옵션을 설정하십시오. 플롯 함수 항목을 참조하십시오.

  • Display 옵션을 설정하여 명령줄에 정보를 표시합니다. 반복 표시 항목을 참조하십시오.

fminsearch가 해에 도달하지 못합니다.

fminsearch는 다양한 이유로 인해 해에 도달하지 못할 수 있습니다.

  • 스케일링이 제대로 되지 않음. 문제가 적절하게 정규화되지 않으면 솔버가 올바르게 수렴하지 못할 수 있습니다. 각 좌표가 목적 함수에 비슷한 정도의 영향을 주도록 설정하고, 가능한 해 가까이에서 각 좌표의 스케일링이 너무 크거나 작지 않도록 하십시오. 이렇게 하려면 목적 함수를 편집하고 각 좌표에 대해 적절한 상수를 더하거나 곱하십시오.

  • 중지 조건이 적절하지 않음. TolFun 또는 TolX에 지정한 값이 너무 작을 경우 fminsearch는 해에 도달했을 때 이를 인식하지 못할 수 있습니다. 값이 너무 큰 경우 fminsearch는 해에서 멀리 떨어진 지점에서 중단될 수 있습니다.

  • 초기점이 적절하지 않음. 다양한 초기점에서 fminsearch를 시작해 보십시오.

  • 반복 횟수가 충분하지 않음. 솔버가 반복을 모두 마치거나 중지되는 경우, 더 나은 해에 도달할 수 있도록 그 최종점에서 fminsearch를 다시 시작해 보십시오. 경우에 따라 fminsearchMaxFunEvals 옵션과 MaxIter 옵션의 값을 디폴트 값인 200*length(x0)보다 더 큰 값으로 늘릴 경우 더 나은 해에 도달할 수 있습니다.

관련 항목