optaplanner-core/src/main/java/org/optaplanner/core/impl/heuristic/selector/move/generic/PillarChangeMove.java
@Override
    public boolean isMoveDoable(ScoreDirector<Solution_> scoreDirector) {
        Object oldValue = variableDescriptor.getValue(pillar.get(0));
        if (Objects.equals(oldValue, toPlanningValue)) {
            return false;
        }
        if (!variableDescriptor.isValueRangeEntityIndependent()) {
            ValueRangeDescriptor<Solution_> valueRangeDescriptor = variableDescriptor.getValueRangeDescriptor();
            Solution_ workingSolution = scoreDirector.getWorkingSolution();
            for (Object entity : pillar) {
                ValueRange rightValueRange = valueRangeDescriptor.extractValueRange(workingSolution, entity);
                if (!rightValueRange.contains(toPlanningValue)) {
                    return false;
                }
            }
        }
        return true;
    }
@Override
    public boolean isMoveDoable(ScoreDirector<Solution_> scoreDirector) {
        Object oldValue = variableDescriptor.getValue(pillar.get(0));
        if (Objects.equals(oldValue, toPlanningValue)) {
            return false;
        }
        if (!variableDescriptor.isValueRangeEntityIndependent()) {
            ValueRangeDescriptor<Solution_> valueRangeDescriptor = variableDescriptor.getValueRangeDescriptor();
            Solution_ workingSolution = scoreDirector.getWorkingSolution();
            for (Object entity : pillar) {
                ValueRange rightValueRange = valueRangeDescriptor.extractValueRange(workingSolution, entity);
                if (!rightValueRange.contains(toPlanningValue)) {
                    return false;
                }
            }
        }
        return true;
    }
@ Override public boolean isMoveDoable ( ScoreDirector < Solution_ > scoreDirector ) { Object oldValue = variableDescriptor . getValue ( pillar . get ( 0 ) ) ; if ( Objects . equals ( oldValue , toPlanningValue ) ) { return false ; } if ( ! variableDescriptor . isValueRangeEntityIndependent ( ) ) { ValueRangeDescriptor < Solution_ > valueRangeDescriptor = variableDescriptor . getValueRangeDescriptor ( ) ; Solution_ workingSolution = scoreDirector . getWorkingSolution ( ) ; for ( Object entity : pillar ) { ValueRange rightValueRange = valueRangeDescriptor . extractValueRange ( workingSolution , entity ) ; if ( ! rightValueRange . contains ( toPlanningValue ) ) { return false ; } } } return true ; }
************************************************************************
************************************************************************