Main Content

Improve surrogateopt Solution or Process

surrogateopt Stalls

When you have both linear constraints and integer constraints, surrogateopt can fail to find any feasible points or enough distinct feasible points to create a surrogate. In these cases, the solver exits with exit flag –2 (no feasible point found) or 3 (too few feasible points). For details on exit flag –2, see No Feasible Point Found.

Exit flag 3 can occur in two different ways:

  • There were too few feasible points to construct an initial surrogate.

  • There were too few feasible points to construct a surrogate after a surrogate reset.

You can see which case applies by using the surrogateoptplot plot function.

options = optimoptions('surrogateopt','PlotFcn','surrogateoptplot');
[sol,fval,exitflag] = surrogateopt(arguments,options);

After each surrogate reset, surrogateopt requires more feasible points to construct the next surrogate. When there are integer constraints, surrogateopt can exhaust the set of feasible points, or can fail to find new feasible points even when some remain

If surrogateopt has performed at least one reset, then it has successfully searched for a solution. In this case, you might have the solution to the problem.

If surrogateopt was unable to create an initial surrogate, or if surrogateopt reset and you want to try to find another solution, perform the following steps.

  1. Relax some constraints.

    • Change some linear constraints to nonlinear, which causes the solver to not insist on strict feasibility. This can give surrogateopt more feasible points to use in constructing surrogates.

    • Relax some linear inequality constraints by choosing larger values for the b vector. You can relax all b values at once by adding a scalar:

      b = b + 5;
  2. Similarly, if your bound constraints are causing the problem to have too few feasible points, and if it makes sense for your problem, relax the bounds. Take larger upper bounds or smaller lower bounds or both. You can relax all bounds at once by adding or subtracting a scalar.

    ub = ub + 3;
    lb = lb - 1;

No Feasible Point Found

When surrogateopt cannot find a point that is feasible with respect to bounds, integer constraints, and linear constraints, it returns exit flag –2. In this case, the problem is truly infeasible.

However, the solver can also return exit flag –2 when it cannot locate a point that is feasible with respect to nonlinear inequality constraints. This can sometimes occur even when feasible points exist. To proceed, follow the steps in Converged to an Infeasible Point.

Solution Might Not Be Optimal

Usually, surrogateopt stops when it runs out of function evaluations. This means that surrogateopt does not stop because it reaches an optimal solution. However, when a surrogate reset occurs, the current solution is usually near a local optimum.

How can you evaluate the quality of a solution? Generally, this is difficult to do. Here are some steps for investigating a solution to help determine its local quality. However, there is no procedure that guarantees that a point is a global solution. See Can You Certify That a Solution Is Global?.

  • If the problem has no integer constraints, look at nearby points. To do so, call patternsearch on the returned solution. Set the InitialMeshSize option to the size of the search step you want to use. To keep patternsearch from taking too much time, set the MaxIterations option to 1 and the UseCompletePoll option to true:

    options = optimoptions('patternsearch',...
        'InitialMeshSize',1e-3,...
        'MaxIterations',1,'UseCompletePoll',true);

    If your problem has nonlinear constraints, first convert the constraints to the form that patternsearch accepts using Convert Nonlinear Constraints Between surrogateopt Form and Other Solver Forms.

  • If the problem has no integer constraints, try running fmincon starting from the solution. Again, if your problem has nonlinear constraints, first convert the constraints to the form that fmincon accepts using Convert Nonlinear Constraints Between surrogateopt Form and Other Solver Forms. If the problem uses a simulation or ODE solver, you might need to set larger finite difference options for fmincon. See Optimizing a Simulation or Ordinary Differential Equation.

  • If the problem has integer constraints, then there is little to do except to try to run surrogateopt for more function evaluations. Do so most efficiently by using a checkpoint file. See Work with Checkpoint Files. If you did not use a checkpoint file, you can also give a set of initial points using the InitialPoints option.

See Also

Related Topics