Main Content

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

OptimizationProblem

설명

OptimizationProblem 객체는 최적화 문제를 설명하는 것으로, 여기에는 최적화, 제약 조건, 목적 함수를 위한 변수 및 목적 함수의 최대화 또는 최소화 여부가 포함됩니다. solve를 사용하여 완성된 문제를 풉니다.

전체 워크플로는 문제 기반 최적화 워크플로 항목을 참조하십시오.

생성

optimproblem을 사용하여 OptimizationProblem 객체를 만듭니다.

경고

문제 기반 접근법은 목적 함수, 비선형 등식 또는 비선형 부등식에서 복소수 값을 지원하지 않습니다. 함수 계산에 중간값으로라도 복소수 값이 포함될 경우, 최종 결과가 올바르지 않을 수 있습니다.

속성

모두 확장

문제 레이블로, string형 또는 문자형 벡터로 지정됩니다. 소프트웨어는 Description을 사용하지 않습니다. 이는 사용자가 어떠한 이유로든 필요하면 사용할 수 있는 임의의 레이블입니다. 예를 들어, 모델이나 문제를 공유, 보관하거나 표현할 때 그 모델이나 문제를 설명하는 정보를 Description에 저장할 수 있습니다.

예: "Describes a traveling salesman problem"

데이터형: char | string

최소화 또는 최대화 표시로, 'minimize' 또는 'maximize'로 지정됩니다. 이 속성은 solve의 작동 방식에 영향을 줍니다.

'minimize' 대신 'min'으로, 'maximize' 대신 'max'로 짧게 줄인 이름을 사용할 수 있습니다.

예: 'maximize'

데이터형: char | string

이 속성은 읽기 전용입니다.

객체의 최적화 변수로, OptimizationVariable 객체의 구조체로 지정됩니다.

데이터형: struct

목적 함수로, 스칼라 OptimizationExpression 또는 스칼라 OptimizationExpression을 포함하는 구조체로 지정됩니다. 문제를 만들 때 또는 만든 후에 점 표기법을 사용하여 목적 함수를 문제에 통합합니다.

prob = optimproblem('Objective',5*brownies + 2*cookies)
% or
prob = optimproblem;
prob.Objective = 5*brownies + 2*cookies

최적화 제약 조건으로, OptimizationConstraint 객체, OptimizationEquality 객체, OptimizationInequality 객체 또는 이러한 객체 중 하나를 포함하는 구조체로 지정됩니다. 문제를 만들 때 또는 만든 후에 점 표기법을 사용하여 제약 조건을 문제에 통합합니다.

constrs = struct('TrayArea',10*brownies + 20*cookies <= traysize,...
    'TrayWeight',12*brownies + 18*cookies <= maxweight);
prob = optimproblem('Constraints',constrs)
% or
prob.Constraints.TrayArea = 10*brownies + 20*cookies <= traysize
prob.Constraints.TrayWeight = 12*brownies + 18*cookies <= maxweight

제약 조건을 []로 설정하여 제거합니다.

prob.Constraints.TrayArea = [];

객체 함수

optimoptions최적화 옵션 만들기
prob2structConvert optimization problem or equation problem to solver form
showoptimization 객체에 대한 정보 표시
solve최적화 문제 또는 방정식 문제 풀기
varindexMap problem variables to solver-based variable index
writeSave optimization object description

예제

모두 축소

최대화를 위한 선형 계획법 문제를 만듭니다. 이 문제에는 2개의 양의 변수와 3개의 선형 부등식 제약 조건이 있습니다.

prob = optimproblem('ObjectiveSense','max');

양의 변수를 만듭니다. 문제에 목적 함수를 포함시킵니다.

x = optimvar('x',2,1,'LowerBound',0);
prob.Objective = x(1) + 2*x(2);

문제에서 선형 부등식 제약 조건을 만듭니다.

cons1 = x(1) + 5*x(2) <= 100;
cons2 = x(1) + x(2) <= 40;
cons3 = 2*x(1) + x(2)/2 <= 60;
prob.Constraints.cons1 = cons1;
prob.Constraints.cons2 = cons2;
prob.Constraints.cons3 = cons3;

문제를 검토합니다.

show(prob)
  OptimizationProblem : 

	Solve for:
       x

	maximize :
       x(1) + 2*x(2)


	subject to cons1:
       x(1) + 5*x(2) <= 100

	subject to cons2:
       x(1) + x(2) <= 40

	subject to cons3:
       2*x(1) + 0.5*x(2) <= 60

	variable bounds:
       0 <= x(1)
       0 <= x(2)

문제를 풉니다.

sol = solve(prob);
Solving problem using linprog.

Optimal solution found.
sol.x
ans = 2×1

   25.0000
   15.0000

버전 내역

R2017b에 개발됨