optimproblem
최적화 문제 만들기
설명
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
15
다중 목적 함수 문제를 만들고 풀기
2차원 변수 x
의 목적 함수 2개를 갖는 문제를 만듭니다. 목적 함수를 x
의 표현식으로 만들고, 이 표현식을 목적 함수에 구조체로 넣습니다.
x = optimvar("x",2,LowerBound=-2,UpperBound=2);
prob = optimproblem;
prob.Objective.first = norm(x)^2;
prob.Objective.second = norm(x - [1;0])^2;
문제를 풉니다.
rng default % For reproducibility sol = solve(prob);
Solving problem using gamultiobj. gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.
해를 플로팅합니다.
paretoplot(sol)
파레토 경계에 있는 한 점을 검토합니다. 이를 위해 Figure를 클릭한 후 데이터팁 툴을 클릭합니다.
그런 다음 파레토 경계의 한 점을 클릭합니다.
위 그림에 있는 점의 인덱스는 9입니다. 이 점에 연결된 x
값을 인덱스가 9인 해를 통해 구할 수 있습니다.
sol(9).x
ans = 2×1
0.5544
-0.0306
입력 인수
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: 최대화 문제를 지정하려면 prob = optimproblem('ObjectiveSense','maximize')
를 사용하십시오.
Constraints
— 문제 제약 조건
OptimizationConstraint
배열 | OptimizationConstraint
배열을 필드로 갖는 구조체
문제 제약 조건으로, OptimizationConstraint
배열 또는 OptimizationConstraint
배열을 필드로 갖는 구조체로 지정됩니다.
예: prob = optimproblem('Constraints',sum(x,2) == 1)
Description
— 문제 레이블
''
(디폴트 값) | string형 | 문자형 벡터
문제 레이블로, string형 또는 문자형 벡터로 지정됩니다. Description
은 계산에 사용되지 않습니다. Description
은 사용자가 어떠한 이유로든 필요하면 사용할 수 있는 임의의 레이블입니다. 예를 들어, 모델이나 문제를 공유, 보관하거나 표현할 때 그 모델이나 문제를 설명하는 정보를 Description
에 저장할 수 있습니다.
예: "An iterative approach to the Traveling Salesman problem"
데이터형: char
| string
Objective
— 목적 함수
스칼라 OptimizationExpression
| OptimizationExpression
으로 구성된 배열 | 스칼라 OptimizationExpression
을 필드로 갖는 구조체
목적 함수로, 스칼라 OptimizationExpression
객체, OptimizationExpression
객체로 구성된 배열 또는 스칼라 OptimizationExpression
을 필드로 갖는 구조체로 지정됩니다.
스칼라(단일 목적 함수) 문제의 경우, 목적 함수를 스칼라 최적화 표현식이나 스칼라 최적화 표현식을 값으로 갖는 구조체로 지정하십시오.
다중 목적 함수 문제의 경우에는 목적 함수를 벡터 값 최적화 표현식, 최적화 표현식으로 구성된 배열 또는 최적화 표현식의 구조체로 지정하십시오. 예를 들어, 다음 목적 함수는 스칼라 최적화 변수
x
의 최적화 표현식으로 구성된 구조체입니다.prob = optimproblem; prob.Objective.first = x^2; prob.Objective.second = (x + 1)^2;
예: 2차원 변수 x
에 대해 prob = optimproblem('Objective',sum(sum(x)))
.
예: prob = optimproblem('Objective',(x-a).^2)
(여기서 x
와 a
의 크기는 2×1이고 x
는 최적화 변수임).
ObjectiveSense
— 최적화 관점
'minimize'
(디폴트 값) | 'min'
| 'maximize'
| 'max'
| 나열된 값을 필드로 갖는 구조체
최적화 관점으로, 'minimize'
또는 'maximize'
로 지정됩니다. 'min'
을 지정하여 'minimize'
를 얻거나 'max'
를 지정하여 'maximize'
를 얻을 수도 있습니다. solve
함수는 ObjectiveSense
가 'minimize'
일 때 목적 함수를 최소화하고 ObjectiveSense
가 'maximize'
일 때 목적 함수를 최대화합니다.
ObjectiveSense
는 값 'minimize'
, 'min'
, 'maximize'
또는 'max'
를 갖는 구조체일 수 있습니다. 문제 목적 함수가 구조체일 때 이 형식을 사용할 수 있습니다. Objective
구조체와 ObjectiveSense
구조체는 동일한 필드 이름을 가져야 합니다. 그래야 ObjectiveSense
가 상응하는 Objective
에 적용될 수 있습니다. 예를 들면 다음을 입력합니다.
x = optimvar('x',2,"UpperBound",2,"LowerBound",-2); prob = optimproblem; prob.Objective.first = norm(x)^2; prob.Objective.second = -norm(x - [1;0])^2; prob.ObjectiveSense.first = "min"; prob.ObjectiveSense.second = "max";
Objective
가 구조체인 경우 ObjectiveSense
를 'max'
등의 이름으로 지정할 수 있습니다. 이 경우 모든 목적 함수는 동일한 ObjectiveSense
를 가집니다.
예: prob = optimproblem('ObjectiveSense','max')
데이터형: char
| string
출력 인수
prob
— 최적화 문제
OptimizationProblem
객체
최적화 문제로, OptimizationProblem
객체로 반환됩니다. 일반적으로, 문제 설명을 완성하려면 목적 함수와 제약 조건을 지정해야 합니다. 그러나 목적 함수가 없는 실현가능성 문제나 제약 조건이 없는 문제가 있을 수 있습니다. 완성된 문제는 solve
를 호출하여 풉니다.
경고
문제 기반 접근법은 목적 함수, 비선형 등식 또는 비선형 부등식에서 복소수 값을 지원하지 않습니다. 함수 계산에 중간값으로라도 복소수 값이 포함될 경우, 최종 결과가 올바르지 않을 수 있습니다.
버전 내역
R2017b에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)