Main Content

evaluate

Evaluate optimization expression or objectives and constraints in problem

Description

Use evaluate to find the numeric value of an optimization expression at a point, or to find the values of objective and constraint expressions in an optimization problem, equation problem, or optimization constraint at a set of points.

val = evaluate(expr,pt) returns the value of the optimization expression expr at the value pt.

example

val = evaluate(cons,pt) returns the value of the constraint expression cons at the value pt.

example

val = evaluate(prob,pts) returns the values of the objective and constraint functions in prob at the points in pts.

example

Examples

collapse all

Create an optimization expression of two variables.

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

Evaluate the expression at a point.

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

    -3    12

Create two optimization variables x and y and a 3-by-2 constraint expression in those variables.

x = optimvar("x");
y = optimvar("y");
cons = optimconstr(3,2);
cons(1,1) = x^2 + y^2/4 <= 2;
cons(1,2) = x^4 - y^4 <= -x^2 - y^2;
cons(2,1) = x^2*3 + y^2 <= 2;
cons(2,2) = x + y <= 3;
cons(3,1) = x*y + x^2 + y^2 <= 5;
cons(3,2) = x^3 + y^3 <= 8;

Evaluate the constraint expressions at the point x=1, y=-1. The value of an expression L <= R is L - R.

x0.x = 1;
x0.y = -1;
val = evaluate(cons,x0)
val = 3×2

   -0.7500    2.0000
    2.0000   -3.0000
   -4.0000   -8.0000

Solve a linear programming problem.

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

Find the value of the objective function at the solution.

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

Create an optimization problem with several linear and nonlinear constraints.

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;

Create 100 test points randomly.

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

Convert the points to an OptimizationValues object for the problem.

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

Evaluate the objective and constraint functions at the points pts.

val = evaluate(prob,pts);

The objective function values are stored in val.Objective, and the constraint function values are stored in val.cons1 through val.cons4. Plot the log of 1 plus the objective function values.

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

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

Plot the values of the constraints cons1 and cons4. Recall that constraints are satisfied when they evaluate to a nonpositive number. Plot the nonpositive values with circles and the positive values with x marks.

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 contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers

As the last figure shows, evaluate enables you to calculate both the value and the feasibility of points. In contrast, issatisfied calculates only the feasibility.

Create a set of equations in two optimization variables.

x = optimvar("x");
y = optimvar("y");
prob = eqnproblem;
prob.Equations.eq1 = x^2 + y^2/4 == 2;
prob.Equations.eq2 = x^2/4 + 2*y^2 == 2;

Solve the system of equation starting from x=1,y=1/2.

x0.x = 1;
x0.y = 1/2;
sol = solve(prob,x0)
Solving problem using fsolve.

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.
sol = struct with fields:
    x: 1.3440
    y: 0.8799

Evaluate the equations at the points x0 and sol.

vars = optimvalues(prob,x=[x0.x sol.x],y=[x0.y sol.y]);
vals = evaluate(prob,vars)
vals = 
  1x2 OptimizationValues vector with properties:

   Variables properties:
      x: [1 1.3440]
      y: [0.5000 0.8799]

   Equation properties:
    eq1: [0.9375 8.4322e-10]
    eq2: [1.2500 6.7431e-09]

The first point, x0, has nonzero values for both equations eq1 and eq2. The second point, sol, has nearly zero values of these equations, as expected for a solution.

Find the degree of equation satisfaction using issatisfied.

[satisfied details] = issatisfied(prob,vars)
satisfied = 1x2 logical array

   0   1

details = 
  1x2 OptimizationValues vector with properties:

   Variables properties:
      x: [1 1.3440]
      y: [0.5000 0.8799]

   Equation properties:
    eq1: [0 1]
    eq2: [0 1]

The first point, x0, is not a solution, and satisfied is 0 for that point. The second point, sol, is a solution, and satisfied is 1 for that point. The equation properties show that neither equation is satisfied at the first point, and both are satisfied at the second point.

Input Arguments

collapse all

Optimization expression, specified as an OptimizationExpression object.

Example: expr = 5*x+3, where x is an OptimizationVariable

Values of the variables in an expression, specified as a structure. The structure pt has the following requirements:

  • All variables in expr must match field names in pt.

  • The values of the matching field names must be numeric.

  • The sizes of the fields in pt must match the sizes of the corresponding variables in expr.

For example, pt can be the solution to an optimization problem, as returned by solve.

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

Data Types: struct

Constraint, specified as an OptimizationConstraint object, an OptimizationEquality object, or an OptimizationInequality object. evaluate applies to these constraint objects only for a point specified as a structure, not as an OptimizationValues object.

Example: cons = expr1 <= expr2, where expr1 and expr2 are optimization expressions

Object for evaluation, specified as an OptimizationProblem object or an EquationProblem object. The evaluate function evaluates the objectives and constraints in the properties of prob at the points in pts.

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

Points to evaluate for prob, specified as a structure or an OptimizationValues object.

  • The field names in pts must match the corresponding variable names in the objective and constraint expressions in prob.

  • The values in pts must be numeric arrays of the same size as the corresponding variables in prob.

Note

Currently, pts can be an OptimizationValues object only when prob is an EquationProblem object or an OptimizationProblem object.

If you use a structure for pts, then pts can contain only one point. In other words, if you want to evaluate multiple points simultaneously, pts must be an OptimizationValues object.

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

Output Arguments

collapse all

Evaluation result, returned as a double or an OptimizationValues object.

  • When the first input argument is an expression or constraint, val is returned as a double array of the same size as the expression or constraint, and contains its numeric values at pt.

  • When the first input argument is an OptimizationProblem object or EquationProblem object, val is an OptimizationValues object. val contains the values of the objective and constraints or equations in prob evaluated at the points in pts. If pts contains N points, then val has size 1-by-N. For example, if prob contains a constraint con of size 2-by-3, and pts is an OptimizationValues object with N = 5 points, then val has size 1-by-5, and val.Constraints.con has size 2-by-3-by-5.

Warning

The problem-based approach does not support complex values in the following: an objective function, nonlinear equalities, and nonlinear inequalities. If a function calculation has a complex value, even as an intermediate value, the final result might be incorrect.

More About

collapse all

Constraint Expression Values

For a constraint expression at a point pt:

  • If the constraint is L <= R, the constraint value is evaluate(L,pt)evaluate(R,pt).

  • If the constraint is L >= R, the constraint value is evaluate(R,pt)evaluate(L,pt).

  • If the constraint is L == R, the constraint value is abs(evaluate(L,pt) – evaluate(R,pt)).

Generally, a constraint is considered to be satisfied (or feasible) at a point if the constraint value is less than or equal to a tolerance.

Version History

Introduced in R2017b

expand all