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

com.exigen.ie.constrainer.GoalGenerate Maven / Gradle / Ivy

package com.exigen.ie.constrainer;

///////////////////////////////////////////////////////////////////////////////
/*
 * Copyright Exigen Group 1998, 1999, 2000
 * 320 Amboy Ave., Metuchen, NJ, 08840, USA, www.exigengroup.com
 *
 * The copyright to the computer program(s) herein
 * is the property of Exigen Group, USA. All rights reserved.
 * The program(s) may be used and/or copied only with
 * the written permission of Exigen Group
 * or in accordance with the terms and conditions
 * stipulated in the agreement/contract under which
 * the program(s) have been supplied.
 */
///////////////////////////////////////////////////////////////////////////////

import com.exigen.ie.tools.FastVector;

/**
 * An implementation of a {@link Goal} that generates a solution
 * for the problem with the unknown integer variables.
 * 

* This goal: *

    *
  • Selects the variable using {@link IntVarSelector}. *
  • Tries to instantiate it using {@link GoalInstantiate}. * GoalInstantiate make use of IntValueSelector taken from a constructor of GoalGenerate * to work with the domain of a variable. *
* @see IntVarSelector * @see IntValueSelector * @see GoalInstantiate */ public class GoalGenerate extends GoalImpl { private IntExpArray _intvars; private IntVarSelector _var_selector; private boolean _dichotomize; private IntValueSelector _value_selector; private boolean _recursiveInstantiate = true; /** * Returns true if the instantiation goals are recursive. */ public boolean recursiveInstantiate() { return _recursiveInstantiate; } /** * Sets the recursive flag for the instantiation goals. */ public void recursiveInstantiate(boolean recursive) { _recursiveInstantiate = recursive; initGoals(); } /** * The search goals that instantiate each variable. */ private FastVector _goals; /** * Constructor with a given array of variables. * GoalGenerate will be constructed with IntVarSelectorFirstUnbound * as a default variable selector and IntValueSelectorMin as a * default value selector and it won't use dichotomize. */ public GoalGenerate(IntExpArray intvars) { this(intvars, null, null, false); } /** * GoalGenerate will be constructed with IntVarSelectorFirstUnbound * as a default variable selector and IntValueSelectorMin as a * default value selector. */ public GoalGenerate(IntExpArray intvars, boolean dichotomize) { this(intvars, null, null, dichotomize); } /** * Constructor with a given array of variables, variable selector, and value selector. * GoalGenerate constructed that way won't use dichotomize procedure. */ public GoalGenerate(IntExpArray intvars, IntVarSelector var_selector, IntValueSelector value_selector) { this(intvars, var_selector, value_selector, false); } /** * Constructor with a given array of variables, variable selector, and "dichotomize" parameter. */ public GoalGenerate(IntExpArray intvars, IntVarSelector var_selector, boolean dichotomize) { this(intvars, var_selector, null, dichotomize); } /** * Constructor with full (and redundant) set of parameters. */ GoalGenerate(IntExpArray intvars, IntVarSelector var_selector, IntValueSelector value_selector, boolean dichotomize) { super(intvars.constrainer(), "Generate"); _intvars = intvars; _dichotomize = dichotomize; _var_selector = ( var_selector != null ? var_selector : new IntVarSelectorFirstUnbound(intvars) ); _value_selector = ( dichotomize ? null : value_selector != null ? value_selector : new IntValueSelectorMin() ); initGoals(); } /** * Returns the array of the variables for this goal. */ public IntExpArray vars() { return _intvars; } /** * Initializes an array of instantiation goals for the variables. */ void initGoals() { int size = _intvars.size(); _goals = new FastVector(size); for(int i=0; i < size; i++) { IntVar var = (IntVar)_intvars.elementAt(i); Goal goal; if (_dichotomize) { goal = new GoalDichotomize(var,_recursiveInstantiate); } else { goal = new GoalInstantiate(var,_value_selector,_recursiveInstantiate); } _goals.addElement(goal); } } /** * Returns a String representation of this goal. * @return a String representation of this goal. */ public String toString() { return "Generate("+_intvars.size()+")"; } /** * Instantiates all variables in the order defined by the IntVarSelector. */ public Goal execute() throws Failure { //Debug.on();Debug.print("Generate"+_intvars);Debug.off(); int index = _var_selector.select(); if (index == -1) return null; // all vars are instantiated // IntVar var = (IntVar)_intvars.elementAt(index); // Debug.on();Debug.print("Var Selected:"+var);Debug.off(); Goal search_goal = (Goal)_goals.elementAt(index); return new GoalAnd(search_goal,this); } } // ~GoalGenerate




© 2015 - 2024 Weber Informatics LLC | Privacy Policy