Main Content

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

optimproblem

최적화 문제 만들기

설명

optimproblem을 사용해 최적화 문제를 만듭니다.

전체 워크플로는 Problem-Based Optimization Workflow 항목을 참조하십시오.

예제

prob = optimproblem은 디폴트 속성을 사용하여 최적화 문제를 만듭니다.

예제

prob = optimproblem(Name,Value)는 하나 이상의 Name,Value 쌍 인수로 지정된 추가 옵션을 사용합니다. 예를 들어, 최소화 문제 대신 최대화 문제를 지정하려면 prob = optimproblem('ObjectiveSense','maximize')를 사용합니다.

예제

모두 축소

디폴트 속성을 사용하여 최적화 문제를 만듭니다.

prob = optimproblem
prob = 
  OptimizationProblem with properties:

       Description: ''
    ObjectiveSense: 'minimize'
         Variables: [0x0 struct] containing 0 OptimizationVariables
         Objective: [0x0 OptimizationExpression]
       Constraints: [0x0 struct] containing 0 OptimizationConstraints

  No problem defined.

최대화를 위한 선형 계획법 문제를 만듭니다. 이 문제에는 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

입력 인수

모두 축소

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: 최대화 문제를 지정하려면 prob = optimproblem('ObjectiveSense','maximize')를 사용하십시오.

문제 제약 조건으로, OptimizationConstraint 배열 또는 OptimizationConstraint 배열을 필드로 갖는 구조체로 지정됩니다.

예: prob = optimproblem('Constraints',sum(x,2) == 1)

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

예: "An iterative approach to the Traveling Salesman problem"

데이터형: char | string

목적 함수로, 스칼라 OptimizationExpression 객체로 지정됩니다.

예: 2차원 변수 x에 대해 prob = optimproblem('Objective',sum(sum(x)))

최적화 관점으로, 'minimize' 또는 'maximize'로 지정됩니다. 'min'을 지정하여 'minimize'를 얻거나 'max'를 지정하여 'maximize'를 얻을 수도 있습니다. solve 함수는 ObjectiveSense'minimize'일 때 목적 함수를 최소화하고 ObjectiveSense'maximize'일 때 목적 함수를 최대화합니다.

예: prob = optimproblem('ObjectiveSense','max')

데이터형: char | string

출력 인수

모두 축소

최적화 문제로, OptimizationProblem 객체로 반환됩니다. 일반적으로, 문제 설명을 완성하려면 목적 함수와 제약 조건을 지정해야 합니다. 그러나 목적 함수가 없는 실현가능성 문제나 제약 조건이 없는 문제가 있을 수 있습니다. 완성된 문제는 solve를 호출하여 풉니다.

경고

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

R2017b에 개발됨