Main Content

Explore patternsearch Algorithms in Optimize Live Editor Task

Beginning in R2022b, patternsearch has four algorithm options:

  • "classic"

  • "nups" (Nonuniform Pattern Search)

  • "nups-gps"

  • "nups-mads"

This example shows how you can try the different patternsearch algorithms when solving a problem using the Optimize Live Editor task.

Specify Problem

Set up an optimization problem that has a quadratic plus linear objective function, bounds, and two linear constraints. Typically, quadprog is the best solver to use for this type of problem. However, this example uses patternsearch so you can try its different algorithms.

Set the number of variables for this problem to N = 10. Create a pseudorandom symmetric matrix Q of size N-by-N and a pseudorandom vector z of length N for the objective function fun(x) = x*Q*x' N*x*z.

N = 10;
rng default
x0 = rand(1,N);
x0 = x0/(2*sum(x0));
Q = 6*eye(N) + randn(N);
Q = (Q + Q');
z = rand(N,1);
fun = @(x)x*Q*x' - N*x*z;

Set linear constraints on the problem: sum(x) <= 1 and sum(i*x) <= N/3, where i is the index of the vector x.

A = [ones(1,N);1:N]; % sum(x) <= 1, sum(i*x) <= N/3
b = [1;N/3];

Confirm that Q is positive definite, so that the problem is convex.

eig(Q)
ans = 10×1

    1.5071
    4.0347
    7.3749
    9.0561
   11.6929
   11.9473
   13.0976
   15.2099
   16.1175
   18.8949

Create Problem in Optimize Live Editor Task

Open a new or existing live script. In the Code section of the Live Editor tab, click Task to open the gallery of Live Editor tasks. Under Optimization, click Optimize.

Select Approach

In the Optimize Live Editor task, select the solver-based approach.

optimizelet_choose.png

Specify Problem Type

Select these options to specify the type of problem:

  • Objective — Nonlinear

  • Constraints — Lower bounds, upper bounds, and linear inequality

  • Solver — patternsearch

Select Problem Data

Select these options for the problem data:

  • Objective function — Click the From file arrow and select Function handle. Click the select arrow and select fun.

  • Initial point — x0

  • Constraints — Lower bounds 0

  • Constraints — Upper bounds 1

  • Constraints — Linear inequality constraint arrays A and b

Specify Solver Options

Click the arrow to expand the Specify solver options section of the task. Then, click the Add button. The task specifies the classic algorithm for the algorithm settings.

Display Progress

Select two plots to display: Best value and Evaluation count.

Your Optimize Live Editor task should match the one in the figure below.

optimizelet_patternsearch_setup.png

Find Solution Using Different Algorithms

After selecting the options for your problem, run the solver by clicking Run in the Run section of the Live Editor tab. The solver runs the "classic" patternsearch algorithm and displays the two specified plots.

ps_run1.png

Change the algorithm to nups. The solver runs the new algorithm and displays the two specified plots.

ps_run2.png

The solver finishes running the "nups" algorithm in about a quarter of the number of function evaluations as the "classic" algorithm, and reaches a slightly better (lower) objective function value.

Working in the Optimize Live Editor task, you can continue to explore the other pattersearch algorithms and plot functions, or other options and solvers.

Live Task
patternsearch stopped because the mesh size was less than options.MeshTolerance.

Figure Pattern Search contains 2 axes objects. Axes object 1 with title Best Function Value: -5.41876, xlabel Iteration, ylabel Function value contains an object of type scatter. Axes object 2 with title Total Function Evaluations: 819, xlabel Iteration, ylabel Function evaluations contains an object of type scatter.

See Also

Related Topics