GreaterEqual.java
- /* Copyright 2015 Laurent COCAULT
- * Licensed to Laurent COCAULT under one or more contributor license agreements.
- * See the NOTICE file distributed with this work for additional information
- * regarding copyright ownership. Laurent COCAULT licenses this file to You
- * 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.csp.constraint.model.integer;
- /**
- * Constraint specifying that one specific integer variable is greater than or
- * equal to another variable augmented by a constant delta.
- */
- public class GreaterEqual extends BinaryIntConstraint {
- /**
- * Constructor of the constraint "LEFT >= RIGHT + DELTA".
- * @param left
- * Left part of the comparison
- * @param right
- * Right part of the comparison
- * @param delta
- * Delta added to the right part
- */
- public GreaterEqual(final IntVar left, final IntVar right,
- final IntValue delta) {
- super(left.getName() + ">=" + right.getName() + "+" + delta, left,
- right, delta);
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public void propagate() {
- // Propagate on the left part
- final IntValue newMin = IntValue.sum(getRight().getMinValue(),
- getDelta());
- final boolean leftChanged = getLeft().reduceWithMinValue(newMin);
- // Propagate on the right part
- final IntValue newMax = IntValue.diff(getLeft().getMaxValue(),
- getDelta());
- final boolean rightChanged = getRight().reduceWithMaxValue(newMax);
- // Update the list of changed variables
- if (leftChanged) {
- addRecentChangedVariable(getLeft());
- }
- if (rightChanged) {
- addRecentChangedVariable(getRight());
- }
- }
- /**
- * Get the left argument of the constraint.
- * @return First argument
- */
- protected IntVar getLeft() {
- return (IntVar) getFirstVariable();
- }
- /**
- * Get the right argument of the constraint.
- * @return Second argument
- */
- protected IntVar getRight() {
- return (IntVar) getSecondVariable();
- }
- }