linprog에 대한 코드 생성을 위한 배경 정보
코드 생성이란?
코드 생성은 MATLAB® Coder™를 사용하여 MATLAB 코드를 C/C++ 코드로 변환하는 것을 말합니다. 코드를 생성하려면 MATLAB Coder 라이선스가 필요합니다.
일반적으로 MATLAB을 실행하지 않는 하드웨어에서 코드를 배포할 때 코드 생성을 수행합니다.
예제는 Generate Code for linprog 항목을 참조하십시오. 다른 최적화 솔버에서의 코드 생성에 대한 예제는 Generate Code for fmincon, fsolve에 대한 코드 생성하기, quadprog에 대한 코드 생성하기, Generate Code for coneprog, Generate Code for lsqcurvefit or lsqnonlin 항목을 참조하십시오.
코드 생성 요구 사항
linprog는codegen(MATLAB Coder) 함수 또는 MATLAB Coder 앱을 사용한 코드 생성을 지원합니다. 코드를 생성하려면 MATLAB Coder 라이선스가 있어야 합니다.타깃 하드웨어는 표준 배정밀도 부동소수점 계산을 지원해야 합니다.
코드 생성 대상은 MATLAB 솔버와 동일한 수학 커널 라이브러리를 사용하지 않습니다. 따라서 특히 조건이 나쁜 문제인 경우에 코드 생성의 해가 솔버의 해와 다를 수 있습니다.
linprog는 코드 생성 시problem인수를 지원하지 않습니다.[x,fval] = linprog(problem) % Not supportedA,Aeq,lb,ub같은linprog입력 행렬은 모두 비희소 행렬이거나 희소 행렬일 수 있습니다. 희소 형식 입력값을 사용하려면 동적 메모리 할당을 활성화해야 합니다. Code Generation Limitations (MATLAB Coder) 항목을 참조하십시오. 적은 부분이 0이 아닌 요소로 구성된 경우 솔버는 희소 형식 입력값에 대해 우수한 성능을 보입니다.lb인수와ub인수는 선형 목적 함수 벡터f와 동일한 개수의 요소를 가지거나 비어 있어야 합니다([]).타깃 하드웨어가 무한 범위를 지원하지 않는 경우
optim.coder.infbound를 사용하십시오.임베디드 프로세서가 사용되는 고급 코드 최적화의 경우에는 Embedded Coder® 라이선스도 필요합니다.
linprog에 대한 옵션을 포함하고optimoptions를 사용하여 옵션을 지정해야 합니다. 옵션에는"interior-point"로 설정된Algorithm옵션이 포함되어야 합니다.options = optimoptions("linprog",Algorithm="interior-point"); [x,fval,exitflag] = linprog(f,A,b,Aeq,beq,lb,ub,options);
코드 생성에 지원되는 옵션은 다음과 같습니다.
Algorithm—"interior-point"여야 함ConstraintToleranceDisplay— 표시하지 않는 경우"off","none"또는"final"로 지정되고, 반복 과정 표시의 경우"iter"로 지정됨MaxIterationsOptimalityTolerance
생성된 코드는 옵션에 대해 제한적인 오류 검사를 수행합니다. 옵션을 업데이트할 때 권장하는 방법은
optimoptions가 아니라 점 표기법을 사용하는 것입니다.opts = optimoptions("linprog",Algorithm="interior-point"); opts = optimoptions(opts,MaxIterations=1e4); % Not recommended opts.MaxIterations = 1e4; % Recommended
linprog는 코드에서 생성된 옵션뿐만 아니라 솔버에 전달된 옵션도 지원합니다.지원되지 않는 옵션을 지정하면 일반적으로 코드 생성 시에 해당 옵션이 무시됩니다. 안정된 결과를 얻기 위해, 지원되는 옵션만 지정하십시오.
생성된 코드에서 멀티스레드를 사용하지 않음
기본적으로 MATLAB 환경 외부에서 사용하도록 생성된 코드는 멀티스레드가 아닌 선형 대수 라이브러리를 사용합니다. 따라서 이 코드는 MATLAB 환경에서 실행되는 코드보다 상당히 느리게 실행될 수 있습니다.
타깃 하드웨어가 다중 코어를 갖는 경우 사용자 지정 멀티스레드 LAPACK 및 BLAS 라이브러리를 사용하여 성능을 높일 수 있습니다. 이러한 라이브러리를 생성된 코드에 포함하는 방법에 대한 자세한 내용은 Speed Up Linear Algebra in Generated Standalone Code by Using LAPACK Calls (MATLAB Coder) 항목을 참조하십시오.
참고 항목
linprog | codegen (MATLAB Coder) | optimoptions | optim.coder.infbound