Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

문제 기반 최적화 알고리즘

solve 함수는 내부적으로 다음과 같은 솔버를 호출하여 최적화 문제를 풉니다.

  • 선형 목적 함수와 선형 제약 조건의 경우 linprog

  • 선형 목적 함수와 선형 제약 조건 및 정수 제약 조건의 경우 intlinprog

  • 2차 목적 함수와 선형 제약 조건의 경우 quadprog

  • 선형 제약 조건이 있는 선형 최소제곱의 경우 lsqlin 또는 lsqnonneg

  • 범위 제약 조건이 있는 비선형 최소제곱의 경우 lsqcurvefit 또는 lsqnonlin

  • 제약 조건이 없고(변수 범위도 없음) 일반 비선형 목적 함수가 있는 문제의 경우 fminunc

  • 비선형 제약 조건이 있거나 일반 비선형 목적 함수와 적어도 하나 이상의 제약 조건이 있는 문제의 경우 fmincon

  • 스칼라 비선형 방정식의 경우 fzero

  • 범위가 있거나 없는 선형 연립방정식의 경우 lsqlin

  • 제약 조건이 없는 비선형 연립방정식의 경우 fsolve

  • 범위가 있는 비선형 연립방정식의 경우 lsqnonlin

solve 또는 다른 관련 함수나 객체를 통해 문제를 솔버 형식으로 변환해야 solve가 이러한 함수를 호출할 수 있습니다. 예를 들어, 이 변환에는 최적화 변수 표현식이 아닌 행렬 표현을 가진 선형 제약 조건이 수반됩니다.

알고리즘의 첫 번째 단계는 문제에 최적화 표현식을 적용하는 것입니다. OptimizationProblem 객체에는 표현식에 사용되는 변수의 내부 목록이 있습니다. 각 변수는 표현식에서 선형 인덱스와 크기를 가집니다. 따라서 문제 변수는 자연스럽게 행렬 형식을 갖게 됩니다. prob2struct 함수가 문제 형식에서 솔버 형식으로의 변환을 수행합니다. 예제는 Convert Problem to Structure 항목을 참조하십시오.

비선형 최적화 문제의 경우, solve자동 미분을 사용하여 목적 함수와 비선형 제약 조건 함수의 기울기를 계산합니다. 이런 도함수는 목적 함수와 제약 조건 함수가 Supported Operations for Optimization Variables and Expressions 항목으로 구성되어 있고 fcn2optimexpr 함수를 사용하지 않을 때 적용됩니다. 자동 미분이 적용되지 않으면 솔버는 유한 차분을 사용해 도함수를 추정합니다. 자동 미분에 대한 자세한 내용은 Automatic Differentiation Background 항목을 참조하십시오.

문제 목적 함수 및 제약 조건에 따라 solve가 호출하는 디폴트 솔버와 허용되는 솔버가 달라집니다. 자세한 내용은 'solver'를 참조하십시오. solve를 호출할 때 'solver' 이름-값 쌍 인수를 사용하여 디폴트 값을 재정의할 수 있습니다.

intlinprog가 MILP 문제를 푸는 데 사용하는 알고리즘에 대해서는 intlinprog 알고리즘 항목을 참조하십시오. linprog가 선형 계획법 문제를 푸는 데 사용하는 알고리즘에 대해서는 선형 계획법 알고리즘 항목을 참조하십시오. quadprog가 2차 계획법 문제를 푸는 데 사용하는 알고리즘에 대해서는 2차 계획법 알고리즘 항목을 참조하십시오. 선형 또는 비선형 최소제곱 솔버 알고리즘에 대해서는 최소제곱(모델 피팅) 알고리즘 항목을 참조하십시오. 비선형 솔버 알고리즘에 대해서는 제약 조건이 없는 비선형 최적화 알고리즘제약 조건이 있는 비선형 최적화 알고리즘 항목을 참조하십시오.

비선형 방정식 풀이의 경우 solve는 내부적으로 각 방정식을 좌변과 우변 사이의 차로 표현합니다. 그런 다음 solve는 방정식 성분의 제곱합을 최소화하려고 시도합니다. 비선형 연립방정식 풀이를 위한 알고리즘에 대해서는 방정식 풀이 알고리즘 항목을 참조하십시오. 문제에 범위도 있는 경우, solve는 방정식 성분의 제곱합을 최소화하기 위해 lsqnonlin을 호출합니다. 최소제곱(모델 피팅) 알고리즘 항목을 참조하십시오.

참고

목적 함수가 제곱합이고 이를 그렇게 인식하도록 solve에 전달하려면 목적 함수를 expr'*expr 또는 다른 형태가 아니라 sum(expr.^2)으로 쓰십시오. 내장 구문 분석기는 명시적인 제곱합만 인식합니다. 자세한 내용은 Write Objective Function for Problem-Based Least Squares 항목을 참조하십시오. 예제는 Nonnegative Linear Least Squares, Problem-Based 항목을 참조하십시오.

참고 항목

| |

관련 항목