All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.chocosolver.solver.expression.discrete.arithmetic.IfArExpression Maven / Gradle / Ivy

There is a newer version: 4.10.17
Show newest version
/*
 * This file is part of choco-solver, http://choco-solver.org/
 *
 * Copyright (c) 2022, IMT Atlantique. All rights reserved.
 *
 * Licensed under the BSD 4-clause license.
 *
 * See LICENSE file in the project root for full license information.
 */
package org.chocosolver.solver.expression.discrete.arithmetic;

import org.chocosolver.solver.Model;
import org.chocosolver.solver.expression.discrete.relational.ReExpression;
import org.chocosolver.solver.variables.BoolVar;
import org.chocosolver.solver.variables.IntVar;

import java.util.HashSet;
import java.util.Map;

/**
 * 

Project: choco-solver. * * @author Charles Prud'homme * @since 05/06/2018. */ public class IfArExpression implements ArExpression { /** * The model in which the expression is declared */ Model model; /** * Lazy creation of the underlying variable */ IntVar me = null; /** * The expressions this expression relies on */ private final ArExpression e1; private final ArExpression e2; private final ReExpression b0; public IfArExpression(ReExpression b, ArExpression y1, ArExpression y2) { this.model = y1.getModel(); this.b0 = b; this.e1 = y1; this.e2 = y2; } @Override public Model getModel() { return model; } @Override public IntVar intVar() { if (me == null) { BoolVar v0 = b0.boolVar(); IntVar v1 = e1.intVar(); IntVar v2 = e2.intVar(); me = model.intVar(model.generateName("if_exp_"), Math.min(v1.getLB(), v2.getLB()), Math.max(v1.getUB(), v2.getUB())); BoolVar b1 = model.boolVar(model.generateName("if_exp_")); BoolVar b2 = model.boolVar(model.generateName("if_exp_")); model.reifyXeqY(me, v1, b1); model.reifyXeqY(me, v2, b2); model.arithm(b1, ">=", v0).post(); model.arithm(b2, ">=", v0.not()).post(); } return me; } @Override public void extractVar(HashSet variables) { b0.extractVar(variables); e1.extractVar(variables); e2.extractVar(variables); } @Override public int ieval(int[] values, Map map) { if(b0.beval(values, map)){ return e1.ieval(values, map); }else{ return e2.ieval(values, map); } } @Override public int getNoChild() { return 3; } @Override public ArExpression[] getExpressionChild() { return new ArExpression[]{b0, e1, e2}; } @Override public String toString() { return "IF(" + b0.toString() + "," + e1.toString() + "," + e2.toString() + ")"; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy