Class MoveLNS

  • All Implemented Interfaces:
    Move

    public class MoveLNS
    extends Object
    implements Move
    This Move's implementation defines a Large Neighborhood Search. Created by cprudhom on 03/09/15. Project: choco.
    Since:
    03/09/2015
    Author:
    Charles Prud'homme
    • Field Detail

      • move

        protected Move move
        the strategy required to complete the generated fragment
      • neighbor

        protected INeighbor neighbor
        IntNeighbor to used
      • solutions

        protected long solutions
        Number of solutions found so far
      • counter

        protected ICounter counter
        Restart counter
      • prop

        protected org.chocosolver.solver.search.loop.move.MoveLNS.PropLNS prop
    • Constructor Detail

      • MoveLNS

        public MoveLNS​(Move move,
                       INeighbor neighbor,
                       ICounter restartCounter)
        Create a move which defines a Large Neighborhood Search.
        Parameters:
        move - how the subtree is explored
        neighbor - how the fragment are computed
        restartCounter - when a restart should occur
    • Method Detail

      • init

        public boolean init()
        Description copied from interface: Move
        Called before the search starts. Also initializes the search strategy.
        Specified by:
        init in interface Move
        Returns:
        false if something goes wrong, true otherwise
      • extend

        public boolean extend​(Solver solver)
        Return false when:
        • the underlying search has no more decision to provide,

        Return true when:

        • a new neighbor is provided,
        • or a new decision is provided by the underlying decision
        • or the fast restart criterion is met.

        Restart when:

        • a restart criterion is met
        Specified by:
        extend in interface Move
        Parameters:
        solver - SearchLoop
        Returns:
        true if the decision path is extended
      • repair

        public boolean repair​(Solver solver)
        Return false when :
        • move.repair(searchLoop) returns false and neighbor is complete.
        • posting the cut at root node fails
        Return true when:
        • move.repair(searchLoop) returns true,
        • or move.repair(searchLoop) returns false and neighbor is not complete,

        Restart when:

        • a new solution has been found
        • move.repair(searchLoop) returns false and neighbor is not complete,
        • or the fast restart criterion is met
        Specified by:
        repair in interface Move
        Parameters:
        solver - SearchLoop
        Returns:
        true if the decision path is repaired
      • loadFromSolution

        public void loadFromSolution​(Solution solution,
                                     Solver solver)
        Give an initial solution to begin with if called before executing the solving process or erase the last recorded one otherwise.
        Parameters:
        solution - a solution to record
        solver - that manages the LNS
      • setTopDecisionPosition

        public void setTopDecisionPosition​(int position)
        Description copied from interface: Move
        Indicates the position of decision made just before selecting this move. When only one "terminal" move is declared, the top decision decision is -1. When dealing with a sequence of Move, the position is the one of the last decision of the previous move. In consequence, when backtracking, the right move can be applied or stopped when needed. This has to be declared on the first call to Move.extend(Solver) and is checked on Move.repair(Solver).
        Specified by:
        setTopDecisionPosition in interface Move
        Parameters:
        position - position of the last decision taken before applying this move
      • getStrategy

        public <V extends VariableAbstractStrategy<V> getStrategy()
        Description copied from interface: Move
        Returns the search strategy in use.
        Specified by:
        getStrategy in interface Move
        Type Parameters:
        V - the type of variable managed by the strategy
        Returns:
        the current search strategy
      • setStrategy

        public <V extends Variable> void setStrategy​(AbstractStrategy<V> aStrategy)
        Description copied from interface: Move
        Defines a search strategy, that is, a service which computes and returns decisions.
        Specified by:
        setStrategy in interface Move
        Type Parameters:
        V - the type of variable managed by the strategy
        Parameters:
        aStrategy - a search strategy
      • removeStrategy

        public void removeStrategy()
        Description copied from interface: Move
        Erases the defined search strategy.
        Specified by:
        removeStrategy in interface Move
      • getChildMoves

        public List<Move> getChildMoves()
        Description copied from interface: Move
        Returns the child moves or null Some Move only accepts one single move as child.
        Specified by:
        getChildMoves in interface Move
        Returns:
        the child moves
      • setChildMoves

        public void setChildMoves​(List<Move> someMoves)
        Description copied from interface: Move
        Overrides this child moves (if possible and if any). Some Move only accepts one single move as child.
        Specified by:
        setChildMoves in interface Move
        Parameters:
        someMoves - a new child move