Main Content

Set Start Points for MultiStart

Four Ways to Set Start Points

There are four ways you tell MultiStart which start points to use for the local solver:

  • Pass a positive integer k. MultiStart generates k - 1 start points as if using a RandomStartPointSet object and the problem structure. MultiStart also uses the x0 start point from the problem structure, for a total of k start points.

  • Pass a RandomStartPointSet object.

  • Pass a CustomStartPointSet object.

  • Pass a cell array of RandomStartPointSet and CustomStartPointSet objects. Pass a cell array if you have some specific points you want to run, but also want MultiStart to use other random start points.


You can control whether MultiStart uses all start points, or only those points that satisfy bounds or other inequality constraints. For more information, see Filter Start Points (Optional).

Positive Integer for Start Points

The syntax for running MultiStart for k start points is

[xmin,fmin,flag,outpt,allmins] = run(ms,problem,k);

The positive integer k specifies the number of start points MultiStart uses. MultiStart generates random start points using the dimension of the problem and bounds from the problem structure. MultiStart generates k - 1 random start points, and also uses the x0 start point from the problem structure.

RandomStartPointSet Object for Start Points

Create a RandomStartPointSet object as follows:

stpoints = RandomStartPointSet;

Run MultiStart starting from a RandomStartPointSet as follows:

[xmin,fmin,flag,outpt,allmins] = run(ms,problem,stpoints);

By default a RandomStartPointSet object generates 10 start points. Control the number of start points with the NumStartPoints property. For example, to generate 40 start points:

stpoints = RandomStartPointSet('NumStartPoints',40);

You can set an ArtificialBound for a RandomStartPointSet. This ArtificialBound works in conjunction with the bounds from the problem structure:

  • If a component has no bounds, RandomStartPointSet uses a lower bound of -ArtificialBound, and an upper bound of ArtificialBound.

  • If a component has a lower bound lb but no upper bound, RandomStartPointSet uses an upper bound of lb + 2*ArtificialBound.

  • Similarly, if a component has an upper bound ub but no lower bound, RandomStartPointSet uses a lower bound of ub - 2*ArtificialBound.

For example, to generate 100 start points with an ArtificialBound of 50:

stpoints = RandomStartPointSet('NumStartPoints',100, ...

A RandomStartPointSet object generates start points with the same dimension as the x0 point in the problem structure; see list.

CustomStartPointSet Object for Start Points

To use a specific set of starting points, put the points in a CustomStartPointSet as follows:

  1. Place the starting points in a matrix. Each row of the matrix represents one starting point. MultiStart runs all the rows of the matrix, subject to filtering with the StartPointsToRun property. For more information, see MultiStart Algorithm.

  2. Create a CustomStartPointSet object from the matrix:

    tpoints = CustomStartPointSet(ptmatrix);

For example, create a set of 40 five-dimensional points, with each component of a point equal to 10 plus an exponentially distributed variable with mean 25:

pts = -25*log(rand(40,5)) + 10;
tpoints = CustomStartPointSet(pts);

Run MultiStart starting from a CustomStartPointSet as follows:

[xmin,fmin,flag,outpt,allmins] = run(ms,problem,tpoints);

To get the original matrix of points from a CustomStartPointSet object, use list:

pts = list(tpoints); % Assumes tpoints is a CustomStartPointSet

A CustomStartPointSet has two properties: StartPointsDimension and NumStartPoints. You can use these properties to query a CustomStartPointSet object. For example, the tpoints object in the example has the following properties:

ans =
ans =

Cell Array of Objects for Start Points

To use a specific set of starting points along with some randomly generated points, pass a cell array of RandomStartPointSet or CustomStartPointSet objects.

For example, to use both the 40 specific five-dimensional points of CustomStartPointSet Object for Start Points and 40 additional five-dimensional points from RandomStartPointSet:

pts = -25*log(rand(40,5)) + 10;
tpoints = CustomStartPointSet(pts);
rpts = RandomStartPointSet('NumStartPoints',40);
allpts = {tpoints,rpts};

Run MultiStart starting from the allpts cell array:

% Assume ms and problem exist
[xmin,fmin,flag,outpt,allmins] = run(ms,problem,allpts);

Related Topics