# 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.

#### 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.

### 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.

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

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.

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