createOptimProblem
최적화 문제 구조체 만들기
설명
은 problem
= createOptimProblem(solverName
)solverName
솔버를 위해 빈 최적화 문제 구조체를 만듭니다.
는 하나 이상의 이름-값 인수를 사용하여 추가 옵션을 지정합니다.problem
= createOptimProblem(solverName
,Name,Value
)
예제
fmincon
문제 구조체 만들기 및 실행하기
다음 사양으로 문제 구조체를 만듭니다.
fmincon
솔버"interior-point"
알고리즘임의의 2차원 초기점
x0
목적인 로젠브록 함수
하한 -2
상한 2
2차원 변수 에 대한 로젠브록 함수는 입니다(자세한 내용은 최적화 라이브 편집기 작업 또는 솔버를 사용한, 제약 조건이 있는 비선형 문제 항목을 참조하십시오). "interior-point"
알고리즘을 지정하려면 optimoptions
를 사용하여 옵션을 만듭니다.
anonrosen = @(x)(100*(x(2) - x(1)^2)^2 + (1-x(1))^2); opts = optimoptions(@fmincon,Algorithm="interior-point"); rng default % For reproducibility problem = createOptimProblem("fmincon",... x0=randn(2,1),... objective=anonrosen,... lb=[-2;-2],... ub=[2;2],... options=opts);
fmincon
을 호출하여 problem.x0
에서 문제 풀이를 시작합니다.
[x,fval] = fmincon(problem)
Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 2×1
1.0000
1.0000
fval = 2.0603e-11
GlobalSearch
를 호출하여 더 나은 해를 찾아봅니다.
gs = GlobalSearch; [x2,fval2] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points. All 16 local solver runs converged with a positive local solver exit flag.
x2 = 2×1
1.0000
1.0000
fval2 = 2.1093e-11
이 경우 fmincon
과 GlobalSearch
모두 동일한 해에 도달합니다.
입력 인수
solverName
— 최적화 솔버
"fmincon"
| @fmincon
| "fminunc"
| @fminunc
| "lsqnonlin"
| @lsqnonlin
| "lsqcurvefit"
| @lsqcurvefit
최적화 솔버로, 다음 유형 중 하나로 지정됩니다.
GlobalSearch
의 경우"fmincon"
또는@fmincon
을 지정합니다.MultiStart
의 경우"fmincon"
이나@fmincon
,"fminunc"
나@fminunc
,"lsqnonlin"
이나@lsqnonlin
또는"lsqcurvefit"
이나@lsqcurvefit
을 지정합니다.
예: "fmincon"
데이터형: char
| string
| function_handle
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: createOptimProblem("fmincon","x0",x0,"objective",fun,"lb",zeros(size(x0)))
Aeq
— 선형 등식 제약 조건
실수 행렬
선형 등식 제약 조건으로, 실수 행렬로 지정됩니다. Aeq
는 Me
×nvars
행렬입니다. 여기서 Me
는 등식 개수입니다.
Aeq
는 다음과 같이 Me
개의 선형 등식을 인코딩합니다.
Aeq*x = beq
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, beq
는 Me
개의 요소를 갖는 열 벡터입니다.
예를 들어 다음을 지정하려는 경우,
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,
다음 제약 조건을 지정합니다.
Aeq = [1,2,3;2,4,1]; beq = [10;20];
예: 제어 변수의 합이 1이 되도록 지정하려면 제약 조건 Aeq = ones(1,N)
및 beq = 1
을 지정합니다.
데이터형: double
Aineq
— 선형 부등식 제약 조건
실수 행렬
선형 부등식 제약 조건으로, 실수 행렬로 지정됩니다. Aineq
는 M
×nvars
행렬입니다. 여기서 M
은 부등식 개수입니다.
Aineq
는 다음과 같이 M
개의 선형 부등식을 인코딩합니다.
Aineq*x <= bineq
,
여기서 x
는 nvars
개의 변수 x(:)
으로 구성된 열 벡터이고, bineq
는 M
개의 요소를 갖는 열 벡터입니다.
예를 들어 다음을 지정하려는 경우,
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
다음 제약 조건을 지정합니다.
Aineq = [1,2;3,4;5,6]; bineq = [10;20;30];
예: 제어 변수의 합이 1 이하가 되도록 지정하려면 제약 조건 Aineq = ones(1,N)
및 bineq = 1
을 지정합니다.
데이터형: double
beq
— 선형 등식 제약 조건
실수형 벡터
선형 등식 제약 조건으로, 실수 벡터로 지정됩니다. beq
는 Aeq
행렬과 관련된, 요소를 Me
개 가진 벡터입니다. beq
를 행 벡터로 전달하면 솔버는 내부적으로 beq
를 열 벡터 beq(:)
으로 변환합니다.
beq
는 다음과 같이 Me
개의 선형 등식을 인코딩합니다.
Aeq*x = beq
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, Aeq
는 크기가 Meq
×N
인 행렬입니다.
예를 들어 다음을 지정하려는 경우,
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,
다음 제약 조건을 지정합니다.
Aeq = [1,2,3;2,4,1]; beq = [10;20];
예: 제어 변수의 합이 1이 되도록 지정하려면 제약 조건 Aeq = ones(1,N)
및 beq = 1
을 지정합니다.
데이터형: double
bineq
— 선형 부등식 제약 조건
실수형 벡터
선형 부등식 제약 조건으로, 실수 벡터로 지정됩니다. bineq
는 Aineq
행렬과 관련된, 요소를 M
개 가진 벡터입니다. bineq
를 행 벡터로 전달하면 솔버는 내부적으로 bineq
를 열 벡터 bineq(:)
으로 변환합니다.
bineq
는 다음과 같이 M
개의 선형 부등식을 인코딩합니다.
Aineq*x <= bineq
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, Aineq
는 크기가 M
×N
인 행렬입니다.
예를 들어 다음을 지정하려는 경우,
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
다음 제약 조건을 지정합니다.
Aineq = [1,2;3,4;5,6]; bineq = [10;20;30];
예: 제어 변수의 합이 1 이하가 되도록 지정하려면 제약 조건 Aineq = ones(1,N)
및 bineq = 1
을 지정합니다.
데이터형: double
lb
— 하한
[]
(디폴트 값) | 실수형 벡터 또는 배열
하한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. lb
는 lb
≤ x
≤ ub
에서 요소별 하한을 나타냅니다.
내부적으로 createOptimProblem
는 배열 lb
를 벡터 lb(:)
으로 변환합니다.
예: lb = [0;-Inf;4]
는 x(1) ≥ 0
, x(3) ≥ 4
를 의미합니다.
데이터형: double
nonlcon
— 비선형 제약 조건
함수 핸들 | 함수 이름
비선형 제약 조건으로, 함수 핸들 또는 함수 이름으로 지정됩니다. nonlcon
은 배열 x
를 받고 두 개의 배열 c(x)
와 ceq(x)
를 반환하는 함수입니다.
c(x)
는x
의 비선형 부등식 제약 조건으로 구성된 배열입니다. 이 솔버는 모든c
요소에 대해c(x) <= 0
을 충족하려고 시도합니다.ceq(x)
는x
의 비선형 등식 제약 조건으로 구성된 배열입니다. 이 솔버는 모든ceq
요소에 대해ceq(x) = 0
을 충족하려고 시도합니다.
예를 들어, nonlcon
은 다음과 같은 MATLAB® 함수입니다.
function [c,ceq] = nonlcon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
자세한 내용은 비선형 제약 조건 항목을 참조하십시오.
데이터형: char
| string
| function_handle
objective
— 목적 함수
함수 핸들 | 함수 이름
목적 함수로, 함수 핸들 또는 함수 이름으로 지정됩니다.
lsqnonlin
,lsqcurvefit
을 제외한 모든 솔버의 경우 목적 함수가 배열x
를 받고 스칼라를 반환해야 합니다.SpecifyObjectiveGradient
옵션이true
인 경우 목적 함수는 목적의 기울기를 나타내는 벡터인 두 번째 출력값을 반환해야 합니다. 자세한 내용은fun
항목을 참조하십시오.lsqnonlin
의 경우 목적 함수는 벡터x
를 받고 스칼라를 반환해야 합니다.SpecifyObjectiveGradient
옵션이true
인 경우 목적 함수는 목적의 야코비 행렬을 나타내는 행렬인 두 번째 출력값을 반환해야 합니다. 자세한 내용은fun
항목을 참조하십시오.lsqcurvefit
의 경우 목적 함수는 2개의 입력값, 즉x
및xdata
를 받고 벡터를 반환해야 합니다.SpecifyObjectiveGradient
옵션이true
인 경우 목적 함수는 목적의 야코비 행렬을 나타내는 행렬인 두 번째 출력값을 반환해야 합니다. 자세한 내용은fun
항목을 참조하십시오.
예: @sin
예: "sin"
데이터형: char
| string
| function_handle
options
— 최적화 옵션
optimoptions
의 출력값
최적화 옵션으로, optimoptions
의 출력값으로 지정됩니다.
예: optimoptions("fmincon","SpecifyObjectiveGradient",true)
ub
— 상한
[]
(디폴트 값) | 실수형 벡터 또는 배열
상한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. ub
는 lb
≤ x
≤ ub
에서 요소별 상한을 나타냅니다.
내부적으로 createOptimProblem
는 배열 ub
를 벡터 ub(:)
으로 변환합니다.
예: ub = [Inf;4;10]
는 x(2) ≤ 4
, x(3) ≤ 10
을 의미합니다.
데이터형: double
x0
— 초기점
실수형 벡터 | 실수형 배열
초기점으로, 실수형 벡터나 실수형 배열로 지정됩니다. 솔버는 x0
의 요소 개수와 x0
의 크기를 사용하여 fun
이 받는 변수의 개수와 크기를 확인합니다.
예: x0 = [1,2,3,4]
데이터형: double
xdata
— 모델의 입력 데이터
실수형 벡터 | 실수형 배열
모델의 입력 데이터로, 실수형 벡터나 실수형 배열로 지정됩니다. 모델은 다음과 같습니다.
ydata = fun(x,xdata)
,
여기서 xdata
와 ydata
는 고정된 배열이고, x
는 lsqcurvefit
이 최소 제곱합을 찾기 위해 변경하는 파라미터로 구성된 배열입니다.
예: xdata = [1,2,3,4]
데이터형: double
ydata
— 모델의 응답 변수 데이터
실수형 벡터 | 실수형 배열
모델의 응답 데이터로, 실수형 벡터나 실수형 배열로 지정됩니다. 모델은 다음과 같습니다.
ydata = fun(x,xdata)
,
여기서 xdata
와 ydata
는 고정된 배열이고, x
는 lsqcurvefit
이 최소 제곱합을 찾기 위해 변경하는 파라미터로 구성된 배열입니다.
ydata
배열은 배열 fun(x0,xdata)
와 크기와 형태가 같아야 합니다.
예: ydata = [1,2,3,4]
데이터형: double
출력 인수
버전 내역
R2010a에 개발됨
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)