org.cpsolver.ifs.algorithms

## Class ParallelConstruction<V extends Variable<V,T>,T extends Value<V,T>>

- java.lang.Object
- - org.cpsolver.ifs.assignment.context.NeighbourSelectionWithContext<V,T,ParallelConstruction.ConstructionContext>
  - - org.cpsolver.ifs.algorithms.ParallelConstruction<V,T>

- Type Parameters:
    `V` - Variable
    `T` - Value
  All Implemented Interfaces:
    CanHoldContext, HasAssignmentContext<V,T,ParallelConstruction.ConstructionContext>, NeighbourSelection<V,T>, SolutionListener<V,T>

      public class ParallelConstruction<V extends Variable<V,T>,T extends Value<V,T>>
      extends NeighbourSelectionWithContext<V,T,ParallelConstruction.ConstructionContext>
      implements SolutionListener<V,T>

  A simple neighbourhood selection extension suitable for the `ParallelSolver` during the construction phase. If the best ever found solution was found by a different thread (`Assignment.getIndex()` does not match) and the current solution has a smaller number of variables assigned for at least the given number of iterations (parameter ParallelConstruction.MaxIdle, defaults to 100), start assigning unassigned variables to their best values. Otherwise, pass the selection to the provided neighbourhood selection.
  Version:
    IFS 1.3 (Iterative Forward Search)
    Copyright (C) 2014 Tomáš Müller
    muller@unitime.org
    http://muller.unitime.org
    This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
    This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License along with this library; if not see http://www.gnu.org/licenses/.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `class` | `ParallelConstruction.ConstructionContext`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected int` | `iBestAssigned`
    `protected int` | `iBestIndex`
    `protected Double` | `iBestValue`
    `protected int` | `iMaxIdle`
    `protected NeighbourSelection<V,T>` | `iParent`
    `protected static Logger` | `sLog`

    - ### Fields inherited from class org.cpsolver.ifs.assignment.context.NeighbourSelectionWithContext

      `iContextOverride`

    - ### Fields inherited from interface org.cpsolver.ifs.assignment.context.CanHoldContext

      `sMaxSize`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ParallelConstruction(DataProperties config, NeighbourSelection<V,T> parent)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `bestCleared(Solution<V,T> solution)` Called by the solution when method `Solution.clearBest()` is called.
    `void` | `bestRestored(Solution<V,T> solution)` Called by the solution when method `Solution.restoreBest()` is called.
    `void` | `bestSaved(Solution<V,T> solution)` Called by the solution when method `Solution.saveBest()` is called.
    `ParallelConstruction.ConstructionContext` | `createAssignmentContext(Assignment<V,T> assignment)` Create a new assignment context for the given assignment.
    `void` | `getInfo(Solution<V,T> solution, Map<String,String> info)` Called by the solution when it is asked to produce info table, see `Solution.getInfo()`.
    `void` | `getInfo(Solution<V,T> solution, Map<String,String> info, Collection<V> variables)` Called by the solution when it is asked to produce info table, see `Solution.getInfo()`.
    `void` | `init(Solver<V,T> solver)` Criterion initialization
    `Neighbour<V,T>` | `selectNeighbour(Solution<V,T> solution)` select a neighbour of a given solution
    `void` | `solutionUpdated(Solution<V,T> solution)` Called by the solution when it is updated, see `Solution.update(double)`.

    - ### Methods inherited from class org.cpsolver.ifs.assignment.context.NeighbourSelectionWithContext

      `getAssignmentContextReference, getContext, getContext, hasContextOverride, isSingleContextSolver, setAssignmentContextReference`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### sLog

          protected static Logger sLog

    - #### iParent

          protected NeighbourSelection<V extends Variable<V,T>,T extends Value<V,T>> iParent

    - #### iBestValue

          protected Double iBestValue

    - #### iBestIndex

          protected int iBestIndex

    - #### iBestAssigned

          protected int iBestAssigned

    - #### iMaxIdle

          protected int iMaxIdle

  - ### Constructor Detail

    - #### ParallelConstruction

          public ParallelConstruction(DataProperties config,
                                      NeighbourSelection<V,T> parent)

  - ### Method Detail

    - #### init

          public void init(Solver<V,T> solver)

      Description copied from interface: `NeighbourSelection`
      Criterion initialization
      Specified by:
        `init` in interface `NeighbourSelection<V extends Variable<V,T>,T extends Value<V,T>>`
      Overrides:
        `init` in class `NeighbourSelectionWithContext<V extends Variable<V,T>,T extends Value<V,T>,ParallelConstruction.ConstructionContext>`
      Parameters:
        `solver` - current solver

    - #### solutionUpdated

          public void solutionUpdated(Solution<V,T> solution)

      Description copied from interface: `SolutionListener`
      Called by the solution when it is updated, see `Solution.update(double)`.
      Specified by:
        `solutionUpdated` in interface `SolutionListener<V extends Variable<V,T>,T extends Value<V,T>>`
      Parameters:
        `solution` - source solution

    - #### getInfo

          public void getInfo(Solution<V,T> solution,
                              Map<String,String> info)

      Description copied from interface: `SolutionListener`
      Called by the solution when it is asked to produce info table, see `Solution.getInfo()`. A listener can also add some its info into this table.
      Specified by:
        `getInfo` in interface `SolutionListener<V extends Variable<V,T>,T extends Value<V,T>>`
      Parameters:
        `solution` - source solution
        `info` - produced info table

    - #### getInfo

          public void getInfo(Solution<V,T> solution,
                              Map<String,String> info,
                              Collection<V> variables)

      Description copied from interface: `SolutionListener`
      Called by the solution when it is asked to produce info table, see `Solution.getInfo()`. A listener can also add some its info into this table.
      Specified by:
        `getInfo` in interface `SolutionListener<V extends Variable<V,T>,T extends Value<V,T>>`
      Parameters:
        `solution` - source solution
        `info` - produced info table
        `variables` - only variables from this set are included

    - #### bestCleared

          public void bestCleared(Solution<V,T> solution)

      Description copied from interface: `SolutionListener`
      Called by the solution when method `Solution.clearBest()` is called.
      Specified by:
        `bestCleared` in interface `SolutionListener<V extends Variable<V,T>,T extends Value<V,T>>`
      Parameters:
        `solution` - source solution

    - #### bestSaved

          public void bestSaved(Solution<V,T> solution)

      Description copied from interface: `SolutionListener`
      Called by the solution when method `Solution.saveBest()` is called.
      Specified by:
        `bestSaved` in interface `SolutionListener<V extends Variable<V,T>,T extends Value<V,T>>`
      Parameters:
        `solution` - source solution

    - #### bestRestored

          public void bestRestored(Solution<V,T> solution)

      Description copied from interface: `SolutionListener`
      Called by the solution when method `Solution.restoreBest()` is called.
      Specified by:
        `bestRestored` in interface `SolutionListener<V extends Variable<V,T>,T extends Value<V,T>>`
      Parameters:
        `solution` - source solution

    - #### selectNeighbour

          public Neighbour<V,T> selectNeighbour(Solution<V,T> solution)

      Description copied from interface: `NeighbourSelection`
      select a neighbour of a given solution
      Specified by:
        `selectNeighbour` in interface `NeighbourSelection<V extends Variable<V,T>,T extends Value<V,T>>`
      Parameters:
        `solution` - given solution
      Returns:
        a neighbour assignment

    - #### createAssignmentContext

          public ParallelConstruction.ConstructionContext createAssignmentContext(Assignment<V,T> assignment)

      Description copied from interface: `HasAssignmentContext`
      Create a new assignment context for the given assignment. If there are already some variables assigned in the value, the method should make sure that the context is appropriately initialized.
      Specified by:
        `createAssignmentContext` in interface `HasAssignmentContext<V extends Variable<V,T>,T extends Value<V,T>,ParallelConstruction.ConstructionContext>`
      Parameters:
        `assignment` - an assignment for which there needs to be an assignment context
      Returns:
        a new instance of the assignment context, filled according to the given assignment