Generates multiple solutions to a mixed integer programming (MIP) model.

Namespace: ILOG.CPLEX
Assembly: ILOG.CPLEX (in ILOG.CPLEX.dll) Version: 22.1.1.0

Syntax

C#
public virtual bool Populate()
Visual Basic
Public Overridable Function Populate As Boolean

Remarks

In other words, the method populate populates the solution pool of the model currently extracted by the invoking Cplex object. Like the method solve, this method returns true if it finds a solution (not necessarily an optimal solution).

The algorithm that populates the solution pool works in two phases:

In the first phase, it solves the model to optimality (or some stopping criterion set by the user) while it sets up a branch and cut tree for the second phase.

In the second phase, it generates multiple solutions by using the information computed and stored in the first phase and by continuing to explore the tree.

The amount of preparation in the first phase and the intensity of exploration in the second phase are controlled by the solution pool intensity parameter SolnPoolIntensity.

Optimality is not a stopping criterion for the populate method. Even if the optimality gap is zero, this method will still try to find alternative solutions. The stopping criteria for populate are these:

  • Pool limit SolnPoolLim. This parameter controls how many solutions are generated before stopping. Its default value is 20.
  • Time limit TiLim, as in standard MIP optimization.
  • Deterministic time limit DetTiLim, as in standard MIP optimization.
  • Node limit NodeLim, as in standard MIP optimization.
  • In the absence of other stopping criteria, populate stops when it cannot enumerate any more solutions. In particular, if the user specifies an objective tolerance with the relative or absolute solution pool gap parameters, populate stops if it cannot enumerate any more solutions within the specified objective tolerance. There may exist additional solutions that satisfy the specified objective tolerance; depending on the solution pool intensity parameter, populate may or may not enumerate all of them; according to certain settings of the solution pool intensity parameter, populate may stop when it has enumerated a subset of additional solutions satisfying the specified objective tolerance.

Successive calls to populate create solutions that are stored in the solution pool. However, each call to populate applies only to the subset of solutions created in the current call; the call does not affect the solutions already in the pool. In other words, solutions in the pool are persistent.

The user may call this routine independently of any MIP optimization of a model. In that case, it carries out the first and second phase itself.

The user may also call populate after standard MIP optimization. In the general case, the user reads the model, calls MIP optimization, then calls populate. The activity of MIP optimization constitutes the first phase of the populate algorithm; populate then re-uses the information computed and stored by MIP optimization and thus carries out only the second phase.

The method populate does not try to generate multiple solutions for unbounded MIP models. As soon as the proof of unboundedness is obtained, populate stops.

See Also