Main Content

createOptimProblem

최적화 문제 구조체 만들기

설명

problem = createOptimProblem(solverName)solverName 솔버를 위해 빈 최적화 문제 구조체를 만듭니다.

예제

problem = createOptimProblem(solverName,Name,Value)는 하나 이상의 이름-값 인수를 사용하여 추가 옵션을 지정합니다.

예제

모두 축소

다음 사양으로 문제 구조체를 만듭니다.

  • fmincon 솔버

  • "interior-point" 알고리즘

  • 임의의 2차원 초기점 x0

  • 목적인 로젠브록 함수

  • 하한 -2

  • 상한 2

2차원 변수 x에 대한 로젠브록 함수는 f(x)=100(x2-x12)2+(1-x1)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

이 경우 fminconGlobalSearch 모두 동일한 해에 도달합니다.

입력 인수

모두 축소

최적화 솔버로, 다음 유형 중 하나로 지정됩니다.

  • 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)))

선형 등식 제약 조건으로, 실수 행렬로 지정됩니다. AeqMe×nvars 행렬입니다. 여기서 Me는 등식 개수입니다.

Aeq는 다음과 같이 Me개의 선형 등식을 인코딩합니다.

Aeq*x = beq,

여기서 xN개의 변수 x(:)으로 구성된 열 벡터이고, beqMe개의 요소를 갖는 열 벡터입니다.

예를 들어 다음을 지정하려는 경우,

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

선형 부등식 제약 조건으로, 실수 행렬로 지정됩니다. AineqM×nvars 행렬입니다. 여기서 M은 부등식 개수입니다.

Aineq는 다음과 같이 M개의 선형 부등식을 인코딩합니다.

Aineq*x <= bineq,

여기서 xnvars개의 변수 x(:)으로 구성된 열 벡터이고, bineqM개의 요소를 갖는 열 벡터입니다.

예를 들어 다음을 지정하려는 경우,

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

선형 등식 제약 조건으로, 실수 벡터로 지정됩니다. beqAeq 행렬과 관련된, 요소를 Me개 가진 벡터입니다. beq를 행 벡터로 전달하면 솔버는 내부적으로 beq를 열 벡터 beq(:)으로 변환합니다.

beq는 다음과 같이 Me개의 선형 등식을 인코딩합니다.

Aeq*x = beq,

여기서 xN개의 변수 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

선형 부등식 제약 조건으로, 실수 벡터로 지정됩니다. bineqAineq 행렬과 관련된, 요소를 M개 가진 벡터입니다. bineq를 행 벡터로 전달하면 솔버는 내부적으로 bineq를 열 벡터 bineq(:)으로 변환합니다.

bineq는 다음과 같이 M개의 선형 부등식을 인코딩합니다.

Aineq*x <= bineq,

여기서 xN개의 변수 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형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. lblb 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개의 입력값, 즉 xxdata를 받고 벡터를 반환해야 합니다. SpecifyObjectiveGradient 옵션이 true인 경우 목적 함수는 목적의 야코비 행렬을 나타내는 행렬인 두 번째 출력값을 반환해야 합니다. 자세한 내용은 fun 항목을 참조하십시오.

예: @sin

예: "sin"

데이터형: char | string | function_handle

최적화 옵션으로, optimoptions의 출력값으로 지정됩니다.

예: optimoptions("fmincon","SpecifyObjectiveGradient",true)

상한으로, double형으로 구성된 실수형 벡터 또는 배열로 지정됩니다. ublb 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),

여기서 xdataydata는 고정된 배열이고, xlsqcurvefit이 최소 제곱합을 찾기 위해 변경하는 파라미터로 구성된 배열입니다.

예: xdata = [1,2,3,4]

데이터형: double

모델의 응답 데이터로, 실수형 벡터나 실수형 배열로 지정됩니다. 모델은 다음과 같습니다.

ydata = fun(x,xdata),

여기서 xdataydata는 고정된 배열이고, xlsqcurvefit이 최소 제곱합을 찾기 위해 변경하는 파라미터로 구성된 배열입니다.

ydata 배열은 배열 fun(x0,xdata)와 크기와 형태가 같아야 합니다.

예: ydata = [1,2,3,4]

데이터형: double

출력 인수

모두 축소

최적화 문제로, 구조체로 반환됩니다. 다음 예제와 같이 problemrun의 두 번째 입력 인수로 사용합니다.

x = run(gs,problem)
x = run(ms,problem,k)

문제에서 이름이 지정된 솔버를 호출하여 문제를 풀 수도 있습니다. 예를 들어 problemfmincon에 대해 만들어진 경우 다음과 같이 입력합니다

x = fmincon(problem)

버전 내역

R2010a에 개발됨

참고 항목

| |

도움말 항목