createOptimProblem
최적화 문제 구조체 만들기
설명
은 problem = createOptimProblem(solverName)solverName 솔버를 위해 빈 최적화 문제 구조체를 만듭니다.
는 하나 이상의 이름-값 인수를 사용하여 추가 옵션을 지정합니다.problem = createOptimProblem(solverName,Name,Value)
예제
다음 사양으로 문제 구조체를 만듭니다.
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. <stopping criteria details>
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 모두 동일한 해에 도달합니다.
입력 인수
최적화 솔버로, 다음 유형 중 하나로 지정됩니다.
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는 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는 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는 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는 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
하한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. lb는 lb ≤ x ≤ ub에서 요소별 하한을 나타냅니다.
내부적으로 createOptimProblem는 배열 lb를 벡터 lb(:)으로 변환합니다.
예: lb = [0;-Inf;4]는 x(1) ≥ 0, x(3) ≥ 4를 의미합니다.
데이터형: double
비선형 제약 조건으로, 함수 핸들 또는 함수 이름으로 지정됩니다. 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
목적 함수로, 함수 핸들 또는 함수 이름으로 지정됩니다.
lsqnonlin,lsqcurvefit을 제외한 모든 솔버의 경우 목적 함수가 배열x를 받고 스칼라를 반환해야 합니다.SpecifyObjectiveGradient옵션이true인 경우 목적 함수는 목적의 기울기를 나타내는 벡터인 두 번째 출력값을 반환해야 합니다. 자세한 내용은fun항목을 참조하십시오.lsqnonlin의 경우 목적 함수는 벡터x를 받고 스칼라를 반환해야 합니다.SpecifyObjectiveGradient옵션이true인 경우 목적 함수는 목적의 야코비 행렬을 나타내는 행렬인 두 번째 출력값을 반환해야 합니다. 자세한 내용은fun항목을 참조하십시오.lsqcurvefit의 경우 목적 함수는 2개의 입력값, 즉x및xdata를 받고 벡터를 반환해야 합니다.SpecifyObjectiveGradient옵션이true인 경우 목적 함수는 목적의 야코비 행렬을 나타내는 행렬인 두 번째 출력값을 반환해야 합니다. 자세한 내용은fun항목을 참조하십시오.
예: @sin
예: "sin"
데이터형: char | string | function_handle
최적화 옵션으로, optimoptions의 출력값으로 지정됩니다.
예: optimoptions("fmincon","SpecifyObjectiveGradient",true)
상한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. ub는 lb ≤ x ≤ ub에서 요소별 상한을 나타냅니다.
내부적으로 createOptimProblem는 배열 ub를 벡터 ub(:)으로 변환합니다.
예: ub = [Inf;4;10]는 x(2) ≤ 4, x(3) ≤ 10을 의미합니다.
데이터형: double
초기점으로, 실수형 벡터나 실수형 배열로 지정됩니다. 솔버는 x0의 요소 개수와 x0의 크기를 사용하여 fun이 받는 변수의 개수와 크기를 확인합니다.
예: x0 = [1,2,3,4]
데이터형: double
모델의 입력 데이터로, 실수형 벡터나 실수형 배열로 지정됩니다. 모델은 다음과 같습니다.
ydata = fun(x,xdata),
여기서 xdata와 ydata는 고정된 배열이고, x는 lsqcurvefit이 최소 제곱합을 찾기 위해 변경하는 파라미터로 구성된 배열입니다.
예: xdata = [1,2,3,4]
데이터형: double
모델의 응답 데이터로, 실수형 벡터나 실수형 배열로 지정됩니다. 모델은 다음과 같습니다.
ydata = fun(x,xdata),
여기서 xdata와 ydata는 고정된 배열이고, x는 lsqcurvefit이 최소 제곱합을 찾기 위해 변경하는 파라미터로 구성된 배열입니다.
ydata 배열은 배열 fun(x0,xdata)와 크기와 형태가 같아야 합니다.
예: ydata = [1,2,3,4]
데이터형: double
출력 인수
버전 내역
R2010a에 개발됨
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- 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)