Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2010 JBoss Inc
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package org.drools.planner.core.localsearch.decider.acceptor.tabu;
 
 import java.util.List;
 import java.util.Map;
 
Abstract superclass for all Tabu Acceptors.

 
 public abstract class AbstractTabuAcceptor extends AbstractAcceptor {
 
     protected int completeTabuSize = -1;
     protected int partialTabuSize = 0;
     protected boolean aspirationEnabled = true;
 
     protected boolean assertTabuHashCodeCorrectness = false;
 
     protected Map<ObjectIntegertabuToStepIndexMap;
     protected List<ObjecttabuSequenceList;
 
     public int getCompleteTabuSize() {
         return ;
     }
 
     public void setCompleteTabuSize(int completeTabuSize) {
         this. = completeTabuSize;
     }
 
     public void setPartialTabuSize(int partialTabuSize) {
         this. = partialTabuSize;
     }
 
     public void setAspirationEnabled(boolean aspirationEnabled) {
         this. = aspirationEnabled;
     }
 
     public void setAssertTabuHashCodeCorrectness(boolean assertTabuHashCodeCorrectness) {
         this. = assertTabuHashCodeCorrectness;
     }
 
     // ************************************************************************
     // Worker methods
     // ************************************************************************
 
     @Override
     public void phaseStarted(LocalSearchSolverPhaseScope localSearchSolverPhaseScope) {
         validateConfiguration();
          = new LinkedList<Object>();
     }
 
     private void validateConfiguration() {
         if ( < 0) {
             throw new IllegalArgumentException("The completeTabuSize (" + 
                     + ") cannot be negative.");
         }
         if ( < 0) {
             throw new IllegalArgumentException("The partialTabuSize (" + 
                     + ") cannot be negative.");
         }
         if ( +  == 0) {
             throw new IllegalArgumentException("The sum of completeTabuSize and partialTabuSize should be at least 1.");
         }
     }
 
     public double calculateAcceptChance(MoveScope moveScope) {
         Collection<? extends ObjectcheckingTabus = findTabu(moveScope);
         int maximumTabuStepIndex = -1;
         for (Object checkingTabu : checkingTabus) {
             Integer tabuStepIndexInteger = .get(checkingTabu);
             if (tabuStepIndexInteger != null) {
                 maximumTabuStepIndex = Math.max(tabuStepIndexIntegermaximumTabuStepIndex);
             }
            if () {
                for (Object tabu : ) {
                    if (tabu.equals(checkingTabu)) {
                        if (tabu.hashCode() != checkingTabu.hashCode()) {
                            throw new IllegalStateException("HashCode violation: tabu (" + tabu + ") and checkingTabu ("
                                    + checkingTabu + ") are equal but have a different hashCode.");
                        }
                        if (tabuStepIndexInteger == null) {
                            throw new IllegalStateException("HashCode violation: the hashCode of tabu (" + tabu
                                    + ") probably changed since it was inserted in the tabu Map or Set.");
                        }
                    }
                }
            }
        }
        if (maximumTabuStepIndex < 0) {
            // The move isn't tabu at all
            return 1.0;
        }
        if () {
            // Doesn't use the deciderScoreComparator because shifting penalties don't apply
            if (moveScope.getScore().compareTo(
                    moveScope.getLocalSearchStepScope().getLocalSearchSolverPhaseScope().getBestScore()) > 0) {
                .trace("        Proposed move ({}) is tabu, but aspiration undoes its tabu."moveScope.getMove());
                return 1.0;
            }
        }
        int tabuStepCount = moveScope.getLocalSearchStepScope().getStepIndex() - maximumTabuStepIndex - 1;
        if (tabuStepCount < ) {
            .trace("        Proposed move ({}) is complete tabu."moveScope.getMove());
            return 0.0;
        }
        double acceptChance = calculatePartialTabuAcceptChance(tabuStepCount - );
        .trace("        Proposed move ({}) is partially tabu with accept chance ({}).",
                moveScope.getMove(), acceptChance);
        return acceptChance;
    }
    protected double calculatePartialTabuAcceptChance(int partialTabuTime) {
        // The + 1's are because acceptChance should not be 0.0 or 1.0
        // when (partialTabuTime == 0) or (partialTabuTime + 1 == partialTabuSize)
        return ((double) (partialTabuTime + 1)) / ((double) ( + 1));
    }
    @Override
    public void stepTaken(LocalSearchStepScope localSearchStepScope) {
        Collection<? extends Objecttabus = findNewTabu(localSearchStepScope);
        for (Object tabu : tabus) {
            // required to push tabu to the end of the line
            if (.containsKey(tabu)) {
                .remove(tabu);
                .remove(tabu);
            }
            int maximumTabuListSize =  + // is at least 1
            while (.size() >= maximumTabuListSize) { // TODO FIXME JBRULES-3007
                Iterator<Objectit = .iterator();
                Object removeTabu = it.next();
                it.remove();
                .remove(removeTabu);
            }
            .put(tabulocalSearchStepScope.getStepIndex());
            .add(tabu);
        }
    }
    protected abstract Collection<? extends ObjectfindTabu(MoveScope moveScope);
    protected abstract Collection<? extends ObjectfindNewTabu(LocalSearchStepScope localSearchStepScope);
New to GrepCode? Check out our FAQ X