LINGO exploits the convex nature of linear models to find globally optimal solutions. However, we aren’t as fortunate with nonlinear models. With nonlinear programming (NLP) models, LINGO’s default NLP solver uses a local search procedure. This can lead to LINGO stopping at locally optimal points, perhaps missing a global point lying elsewhere. Refer to On Mathematical Modeling for more information on how and why this can happen.

A strategy that has proven successful in overcoming this problem is to restart the NLP solver several times from different initial points. It is not uncommon for a different starting point to lead to a different local solution point. The idea is that, if we restart from enough unique points, saving the best local solution as we go, then we have a much better chance of finding the true global solution.

The MULTIS parameter allows you to set the number of times you would like the NLP solver to re-solve your model, starting each time from an intelligently generated, new starting point. We refer to this feature as multistart. The default value for MULTIS, 0, entails restarting 5 times on small NLPs and disabling multistart on larger models. Setting MULTIS to 1 disables multistart on all NLPs. Setting MULTIS to any value greater than 1 will cause the NLP solver to restart that number of times on all NLPs. We have found that setting MULTIS around 5 tends to be adequate for most models. Highly nonlinear models may require a larger setting.

Keep in mind, however, that multistart will dramatically increase runtimes. Thus, one should avoid using it unnecessarily on convex models that will converge to a global point in a single pass without any additional prodding.

The following example illustrates the usefulness of multistart. Consider the simple, yet highly nonlinear, model:

MODEL:

  MIN = X * @COS( 3.1416 * X);

  @BND( 0, X, 6);

END

The graph of the objective function is as follows:

wavy

The objective function has three local, minimal points over the feasible range. These points are summarized in the following table:

Point

X

Objective

1

1.09

-1.05

2

3.03

-3.02

3

5.02

-5.01

Clearly, the third local point is also the globally best point, and we would like the NLP solver to converge to this point. Below, we attempt this by loading the model, turning off the multistart option, and then solving:

: take wavy.lng

: look all

MODEL:

  1]   MIN = X * @COS( 3.1416 * X);

  2]   @BND( 0, X, 6);

END

: set multis 1 !set solver attempts to 1 only (i.e., disable ms)

 Parameter        Old Value     New Value

  MULTIS             0             1

: go

  Local optimal solution found at step:             11

  Objective value:                           -1.046719

          Variable           Value        Reduced Cost

                 X        1.090405           0.1181082E-07

               Row    Slack or Surplus      Dual Price

                 1       -1.046719           -1.000000

Unfortunately, as you can see, we converged to the least preferable of the local minimums. Below, we will do the same as in the previous run. However, this time, we will set the number of multistarts to five:

: take wavy.lng

: look all

MODEL:

  1]   MIN = X * @COS( 3.1416 * X);

  2]   @BND( 0, X, 6);

END

: set multis 5

 Parameter        Old Value     New Value

  MULTIS             0             5

: go

  Local optimal solution found at step:             39

  Objective value:                           -5.010083

          Variable           Value        Reduced Cost

                 X        5.020143          -0.7076917E-08

               Row    Slack or Surplus      Dual Price

                 1       -5.010083           -1.000000

The extra four restarts allowed LINGO to find the global optimal point.