Main Content

evaluate

문제의 최적화 표현식이나 목적 함수 및 제약 조건의 평가

설명

evaluate를 사용하여 한 점에서 최적화 표현식의 숫자형 값을 구하거나, 하나의 점 집합에서 최적화 문제의 목적 함수 표현식과 제약 조건 표현식의 값을 구합니다.

전체 워크플로는 문제 기반 최적화 워크플로 또는 방정식 풀이를 위한 문제 기반 워크플로 항목을 참조하십시오.

예제

val = evaluate(expr,pt)는 값 pt에서 최적화 표현식 expr의 값을 반환합니다.

예제

val = evaluate(prob,pts)pts의 점에서 prob의 목적 함수와 제약 조건 함수의 값을 반환합니다.

예제

모두 축소

두 변수의 최적화 표현식을 만듭니다.

x = optimvar("x",3,2);
y = optimvar("y",1,2);
expr = sum(x,1) - 2*y;

점에서 표현식을 평가합니다.

xmat = [3,-1;
    0,1;
    2,6];
sol.x = xmat;
sol.y = [4,-3];
val = evaluate(expr,sol)
val = 1×2

    -3    12

선형 계획법 문제 풀기

x = optimvar('x');
y = optimvar('y');
prob = optimproblem;
prob.Objective = -x -y/3;
prob.Constraints.cons1 = x + y <= 2;
prob.Constraints.cons2 = x + y/4 <= 1;
prob.Constraints.cons3 = x - y <= 2;
prob.Constraints.cons4 = x/4 + y >= -1;
prob.Constraints.cons5 = x + y >= 1;
prob.Constraints.cons6 = -x + y <= 2;

sol = solve(prob)
Solving problem using linprog.

Optimal solution found.
sol = struct with fields:
    x: 0.6667
    y: 1.3333

해에서 목적 함수의 값을 구합니다.

val = evaluate(prob.Objective,sol)
val = -1.1111

여러 선형 제약 조건과 비선형 제약 조건을 사용하여 최적화 문제를 만듭니다.

x = optimvar("x");
y = optimvar("y");
obj = (10*(y - x^2))^2 + (1 - x)^2;
cons1 = x^2 + y^2 <= 1;
cons2 = x + y >= 0;
cons3 = y <= sin(x);
cons4 = 2*x + 3*y <= 2.5;
prob = optimproblem(Objective=obj);
prob.Constraints.cons1 = cons1;
prob.Constraints.cons2 = cons2;
prob.Constraints.cons3 = cons3;
prob.Constraints.cons4 = cons4;

100개의 테스트 지점을 무작위로 만듭니다.

rng default % For reproducibility
xvals = randn(1,100);
yvals = randn(1,100);

점을 문제에 대한 OptimizationValues 객체로 변환합니다.

pts = optimvalues(prob,x=xvals,y=yvals);

pts에서 목적 함수와 제약 조건 함수의 값을 구합니다.

val = evaluate(prob,pts);

목적 함수 값은 val.Objective에 저장되며, 제약 조건 함수 값은 val.cons4를 통해 val.cons1에 저장됩니다. 목적 함수 값에 1을 더한 로그를 플로팅합니다.

figure
plot3(xvals,yvals,log(1 + val.Objective),"bo")

제약 조건 cons1cons4의 값을 플로팅합니다. 제약 조건은 양수가 아닌 값으로 계산될 때 충족된다는 사실을 기억하십시오. 양수가 아닌 값은 원으로 플로팅하고 양수 값은 x 표시로 플로팅합니다.

neg1 = val.cons1 <= 0;
pos1 = val.cons1 > 0;
neg4 = val.cons4 <= 0;
pos4 = val.cons4 > 0;
figure
plot3(xvals(neg1),yvals(neg1),val.cons1(neg1),"bo")
hold on
plot3(xvals(pos1),yvals(pos1),val.cons1(pos1),"rx")
plot3(xvals(neg4),yvals(neg4),val.cons4(neg4),"ko")
plot3(xvals(pos4),yvals(pos4),val.cons4(pos4),"gx")
hold off

마지막 Figure에서 알 수 있듯이 evaluate를 사용하여 점의 값과 실현가능성을 모두 계산할 수 있습니다. 반대로 issatisfied는 실현가능성만 계산합니다.

입력 인수

모두 축소

최적화 표현식으로, OptimizationExpression 객체로 지정됩니다.

예: expr = 5*x+3. 여기서 xOptimizationVariable입니다.

표현식의 변수 값으로, 구조체로 지정됩니다. 구조체 pt는 다음과 같은 요구 사항을 갖습니다.

  • expr의 모든 변수는 pt의 필드 이름과 일치해야 합니다.

  • 일치하는 필드 이름의 값은 숫자형이어야 합니다.

  • pt의 필드의 크기는 expr의 대응하는 변수의 크기와 일치해야 합니다.

예를 들어, ptsolve에서 반환했으므로 최적화 문제에 대한 해가 될 수 있습니다.

예: pt.x = 3, pt.y = -5

데이터형: struct

최적화 문제로, OptimizationProblem 객체로 지정됩니다. optimproblem을 사용하여 prob를 만듭니다. evaluate 함수는 pts의 점에서 prob의 속성에 있는 목적 함수와 제약 조건의 값을 계산합니다.

예: prob = optimproblem(Objective=obj,Constraints=constr)

prob에 대해 계산할 점으로, 구조체 또는 OptimizationValues 객체로 지정됩니다.

  • pts의 필드 이름은 prob의 목적 함수 표현식과 제약 조건 표현식의 대응하는 변수 이름과 일치해야 합니다.

  • pts의 값은 prob의 대응하는 변수와 크기가 동일한 숫자형 배열이어야 합니다.

pts에 대해 구조체를 사용하는 경우 pts는 하나의 점만 포함할 수 있습니다. 즉, 여러 점을 동시에 계산하려면 ptsOptimizationValues 객체여야 합니다.

예: pts = optimvalues(prob,x=xval,y=yval)

출력 인수

모두 축소

평가 결과로, double형 또는 OptimizationValues 객체로 반환됩니다. val이 double형인 경우 pt에서의 표현식의 숫자형 값을 포함합니다. valOptimizationValues 객체인 경우, pts의 점에서 계산된 prob의 목적 함수와 제약 조건 함수의 값을 포함합니다.

경고

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

세부 정보

모두 축소

제약 조건 표현식 값

pt에서 제약 조건 표현식이 다음과 같을 때:

  • 제약 조건이 L <= R인 경우 제약 조건 값은 evaluate(L,pt)evaluate(R,pt)입니다.

  • 제약 조건이 L >= R인 경우 제약 조건 값은 evaluate(R,pt)evaluate(L,pt)입니다.

  • 제약 조건이 L == R인 경우 제약 조건 값은 abs(evaluate(L,pt) – evaluate(R,pt))입니다.

일반적으로 제약 조건 값이 허용오차보다 작거나 같은 경우 그 점에서 제약 조건이 충족(또는 실현 가능)되는 것으로 간주됩니다.

버전 내역

R2017b에 개발됨

모두 확장