this repo has no description
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ 2/* 3 * Main author: 4 * Christian Schulte <schulte@gecode.org> 5 * 6 * Copyright: 7 * Christian Schulte, 2008 8 * 9 * This file is part of Gecode, the generic constraint 10 * development environment: 11 * http://www.gecode.org 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining 14 * a copy of this software and associated documentation files (the 15 * "Software"), to deal in the Software without restriction, including 16 * without limitation the rights to use, copy, modify, merge, publish, 17 * distribute, sublicense, and/or sell copies of the Software, and to 18 * permit persons to whom the Software is furnished to do so, subject to 19 * the following conditions: 20 * 21 * The above copyright notice and this permission notice shall be 22 * included in all copies or substantial portions of the Software. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 28 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 29 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 30 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 31 * 32 */ 33 34#include <gecode/minimodel.hh> 35 36namespace Gecode { 37 38 void 39 IntMinimizeSpace::constrain(const Space& _best) { 40 const IntMinimizeSpace* best = 41 dynamic_cast<const IntMinimizeSpace*>(&_best); 42 if (best == nullptr) 43 throw DynamicCastFailed("IntMinimizeSpace::constrain"); 44 rel(*this, cost(), IRT_LE, best->cost().val()); 45 } 46 47 48 void 49 IntMaximizeSpace::constrain(const Space& _best) { 50 const IntMaximizeSpace* best = 51 dynamic_cast<const IntMaximizeSpace*>(&_best); 52 if (best == nullptr) 53 throw DynamicCastFailed("IntMaximizeSpace::constrain"); 54 rel(*this, cost(), IRT_GR, best->cost().val()); 55 } 56 57 58 void 59 IntLexMinimizeSpace::constrain(const Space& _best) { 60 const IntLexMinimizeSpace* best = 61 dynamic_cast<const IntLexMinimizeSpace*>(&_best); 62 if (best == nullptr) 63 throw DynamicCastFailed("IntLexMinimizeSpace::constrain"); 64 IntVarArgs cx(cost()), bx(best->cost()); 65 IntArgs bn(bx.size()); 66 for (int i=bn.size(); i--; ) 67 bn[i] = bx[i].val(); 68 rel(*this, cx, IRT_LE, bn); 69 } 70 71 void 72 IntLexMaximizeSpace::constrain(const Space& _best) { 73 const IntLexMaximizeSpace* best = 74 dynamic_cast<const IntLexMaximizeSpace*>(&_best); 75 if (best == nullptr) 76 throw DynamicCastFailed("IntLexMaximizeSpace::constrain"); 77 IntVarArgs cx(cost()), bx(best->cost()); 78 IntArgs bn(bx.size()); 79 for (int i=bn.size(); i--; ) 80 bn[i] = bx[i].val(); 81 rel(*this, cx, IRT_GR, bn); 82 } 83 84#ifdef GECODE_HAS_FLOAT_VARS 85 86 void 87 FloatMinimizeSpace::constrain(const Space& _best) { 88 const FloatMinimizeSpace* best = 89 dynamic_cast<const FloatMinimizeSpace*>(&_best); 90 if (best == nullptr) 91 throw DynamicCastFailed("FloatMinimizeSpace::constrain"); 92 rel(*this, cost(), FRT_LE, best->cost().max()-step); 93 } 94 95 96 void 97 FloatMaximizeSpace::constrain(const Space& _best) { 98 const FloatMaximizeSpace* best = 99 dynamic_cast<const FloatMaximizeSpace*>(&_best); 100 if (best == nullptr) 101 throw DynamicCastFailed("FloatMaximizeSpace::constrain"); 102 rel(*this, cost(), FRT_GR, best->cost().min()+step); 103 } 104 105#endif 106 107} 108 109// STATISTICS: minimodel-search 110