yacs
Class YacsConstraintManagerImpl

java.lang.Object
  extended byyacs.YacsConstraintManagerImpl
All Implemented Interfaces:
YacsConstraintManager

public class YacsConstraintManagerImpl
extends java.lang.Object
implements YacsConstraintManager

Implementierung des YACS Constraint-Managers.

Copyright (C) 2005 Wolfgang Runte

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

Version:
YACS 0.1.1
Author:
Wolfgang Runte (woru@tzi.org)

Constructor Summary
YacsConstraintManagerImpl()
          Konstruktor -- Wird dieser Konstruktor ohne Angabe des Pfades zu der XML-Datei mit den Constraint-Lösungsstrategien aufgerufen, wird diese im aktuellen Verzeichnis unter dem Namen yacs_strategies.xml gesucht.
YacsConstraintManagerImpl(java.lang.String strategyPath)
          Konstruktor -- Der Parameter strategyPath ist der Pfad zur der XML-Datei, in der die Constraint-Lösungsstrategien spezifiziert sind.
 
Method Summary
 void addConstraint(java.lang.String constraint, java.lang.String strategyName)
          Mit dieser Methoden kann ein Constraint inkrementell dem Lösungsprozess zugeführt werden.
 void addConstraints(java.lang.String constraint, java.lang.String strategyName)
          Mit dieser Methoden können mehrere Constraints gleichzeitig bzw. ein Teilproblem inkrementell dem Lösungsprozess zugeführt werden.
 void evaluate()
          Startet den Constraint-Lösungsvorgang.
 ConstraintNet getConstraintNet(java.lang.String strategyName)
          Liefert das entsprechende Constraint-Netz zu dem übergebenen Strategienamen, null wenn kein Constraint-Netz mit dieser Strategie existiert.
 java.util.List getConstraintNets()
          Liefert eine "unmodifizierbare" Liste mit verfügbaren Constraint-Netzen (enthält Instanzen der Klasse yacs.net.ConstraintNet).
 Solutions getSolutions(java.lang.String strategyName)
          Liefert die ggf. bereits gefundenen Lösungen für das der übergebenen Strategie zugehörige Teilproblem.
 java.util.List getStrategyNames()
          Liefert eine "unmodifizierbare" Liste mit den Namen (Strings) der existierenden Constraint-Lösungsstrategien und entsprechend der verfügbaren Constraint-Netze.
 Domain getVariableDomain(java.lang.String variableName)
          Liefert die entsprechende Domäne zur übergebenen Variable.
 java.util.List getVariables()
          Liefert eine Liste mit den Namen aller Variablen sämtlicher vorhandenen Constraint-Netze (enthält Instanzen der Klasse String).
 java.util.List getVariables(java.lang.String strategyName)
          Liefert eine Liste mit den Variablen (Instanzen der Klasse yacs.parser.Variable), die sich in dem der übergebenen Strategie zugehörigen Constraint-Netz befinden.
 boolean hasFalseDomain(java.lang.String strategyName)
          Liefert true, wenn die Domäne einer Variablen des der übergebenen Strategie zugehörigen Teilproblems leer ist.
 boolean hasSolutions(java.lang.String strategyName)
          Liefert true, wenn für das der übergebenen Strategie zugehörige Teilproblem bereits Lösungen gefunden wurden, false wenn nicht.
 boolean hasValuationDomain(java.lang.String strategyName)
          Liefert true, wenn für das der übergebenen Strategie zugehörige Teilproblem eine "valuation domain" vorliegt, d.h. in den Domänen aller Variablen des Teilproblems ist jeweils genau ein Wert enthalten.
 boolean isInconsistent(java.lang.String strategyName)
          Gibt zurück, ob ein Constraint-Solver für das der übergebenen Strategie zugehörige Teilproblem eine Inkonsistenz gemeldet hat oder nicht (wird zurückgesetzt durch die benutzerinitiierte Modifikation der Wertebereiche der Constraint-Variablen und durch Hinzufügen einer Lösung zum Teilproblem).
 void setVariableDomain(java.lang.String variableName, Domain variableDomain)
          Setzt den Wertebereich für eine Variable.
 void tabularasa()
          Setzt sämtliche Constraint-Netze wieder in den Ausgangszustand zurück, d.h.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

YacsConstraintManagerImpl

public YacsConstraintManagerImpl()
Konstruktor -- Wird dieser Konstruktor ohne Angabe des Pfades zu der XML-Datei mit den Constraint-Lösungsstrategien aufgerufen, wird diese im aktuellen Verzeichnis unter dem Namen yacs_strategies.xml gesucht.


YacsConstraintManagerImpl

public YacsConstraintManagerImpl(java.lang.String strategyPath)
Konstruktor -- Der Parameter strategyPath ist der Pfad zur der XML-Datei, in der die Constraint-Lösungsstrategien spezifiziert sind.

Parameters:
strategyPath - String
Method Detail

getStrategyNames

public java.util.List getStrategyNames()
Liefert eine "unmodifizierbare" Liste mit den Namen (Strings) der existierenden Constraint-Lösungsstrategien und entsprechend der verfügbaren Constraint-Netze.

Specified by:
getStrategyNames in interface YacsConstraintManager
Returns:
List

getConstraintNets

public java.util.List getConstraintNets()
Liefert eine "unmodifizierbare" Liste mit verfügbaren Constraint-Netzen (enthält Instanzen der Klasse yacs.net.ConstraintNet).

Specified by:
getConstraintNets in interface YacsConstraintManager
Returns:
List

getConstraintNet

public ConstraintNet getConstraintNet(java.lang.String strategyName)
                               throws StrategyNotFoundException
Liefert das entsprechende Constraint-Netz zu dem übergebenen Strategienamen, null wenn kein Constraint-Netz mit dieser Strategie existiert.

Specified by:
getConstraintNet in interface YacsConstraintManager
Parameters:
strategyName - String
Returns:
ConstraintNet
Throws:
StrategyNotFoundException

addConstraint

public void addConstraint(java.lang.String constraint,
                          java.lang.String strategyName)
                   throws ConstraintParserException,
                          StrategyNotFoundException
Mit dieser Methoden kann ein Constraint inkrementell dem Lösungsprozess zugeführt werden. Neben dem eigentlichen Constraint-Ausdruck als String wird der Name der Strategie benötigt, mit der das Constraint verarbeitet werden soll.

Specified by:
addConstraint in interface YacsConstraintManager
Parameters:
constraint - String
strategyName - String
Throws:
ConstraintParserException
StrategyNotFoundException

addConstraints

public void addConstraints(java.lang.String constraint,
                           java.lang.String strategyName)
                    throws ConstraintParserException,
                           StrategyNotFoundException
Mit dieser Methoden können mehrere Constraints gleichzeitig bzw. ein Teilproblem inkrementell dem Lösungsprozess zugeführt werden. Neben dem eigentlichen Constraint-Ausdruck als String (die Constraint-Ausdrücke müssen darin jeweils durch ein Semikolon voneinander getrennt sein) wird der Name der Strategie benötigt, mit der die Constraints verarbeitet werden sollen.

Specified by:
addConstraints in interface YacsConstraintManager
Parameters:
constraint - String
strategyName - String
Throws:
ConstraintParserException
StrategyNotFoundException

setVariableDomain

public void setVariableDomain(java.lang.String variableName,
                              Domain variableDomain)
                       throws VariableNotFoundException
Setzt den Wertebereich für eine Variable.

Specified by:
setVariableDomain in interface YacsConstraintManager
Parameters:
variableName - String
variableDomain - Domain
Throws:
VariableNotFoundException

getVariableDomain

public Domain getVariableDomain(java.lang.String variableName)
                         throws VariableNotFoundException
Liefert die entsprechende Domäne zur übergebenen Variable.

Specified by:
getVariableDomain in interface YacsConstraintManager
Parameters:
variableName - String
Returns:
Domain
Throws:
VariableNotFoundException

getVariables

public java.util.List getVariables()
Liefert eine Liste mit den Namen aller Variablen sämtlicher vorhandenen Constraint-Netze (enthält Instanzen der Klasse String).

Specified by:
getVariables in interface YacsConstraintManager
Returns:
List

getVariables

public java.util.List getVariables(java.lang.String strategyName)
                            throws StrategyNotFoundException
Liefert eine Liste mit den Variablen (Instanzen der Klasse yacs.parser.Variable), die sich in dem der übergebenen Strategie zugehörigen Constraint-Netz befinden.

Specified by:
getVariables in interface YacsConstraintManager
Parameters:
strategyName - String
Returns:
List
Throws:
StrategyNotFoundException

getSolutions

public Solutions getSolutions(java.lang.String strategyName)
                       throws StrategyNotFoundException
Liefert die ggf. bereits gefundenen Lösungen für das der übergebenen Strategie zugehörige Teilproblem.

Specified by:
getSolutions in interface YacsConstraintManager
Parameters:
strategyName - String
Returns:
Solutions
Throws:
StrategyNotFoundException

hasSolutions

public boolean hasSolutions(java.lang.String strategyName)
                     throws StrategyNotFoundException
Liefert true, wenn für das der übergebenen Strategie zugehörige Teilproblem bereits Lösungen gefunden wurden, false wenn nicht.

Specified by:
hasSolutions in interface YacsConstraintManager
Parameters:
strategyName - String
Returns:
boolean
Throws:
StrategyNotFoundException

hasFalseDomain

public boolean hasFalseDomain(java.lang.String strategyName)
                       throws StrategyNotFoundException
Liefert true, wenn die Domäne einer Variablen des der übergebenen Strategie zugehörigen Teilproblems leer ist. In diesem Fall ist für dieses Teilproblem keine Konsistenz bzw. Lösung herstellbar. Ansonsten wird false zurückgegeben.

Specified by:
hasFalseDomain in interface YacsConstraintManager
Parameters:
strategyName - String
Returns:
boolean
Throws:
StrategyNotFoundException

hasValuationDomain

public boolean hasValuationDomain(java.lang.String strategyName)
                           throws StrategyNotFoundException
Liefert true, wenn für das der übergebenen Strategie zugehörige Teilproblem eine "valuation domain" vorliegt, d.h. in den Domänen aller Variablen des Teilproblems ist jeweils genau ein Wert enthalten. Ansonsten wird false zurückgegeben.

Specified by:
hasValuationDomain in interface YacsConstraintManager
Parameters:
strategyName - String
Returns:
boolean
Throws:
StrategyNotFoundException

isInconsistent

public boolean isInconsistent(java.lang.String strategyName)
                       throws StrategyNotFoundException
Gibt zurück, ob ein Constraint-Solver für das der übergebenen Strategie zugehörige Teilproblem eine Inkonsistenz gemeldet hat oder nicht (wird zurückgesetzt durch die benutzerinitiierte Modifikation der Wertebereiche der Constraint-Variablen und durch Hinzufügen einer Lösung zum Teilproblem).

Specified by:
isInconsistent in interface YacsConstraintManager
Parameters:
strategyName - String
Returns:
boolean
Throws:
StrategyNotFoundException

evaluate

public void evaluate()
Startet den Constraint-Lösungsvorgang. Ruft jeweils solange die Auswertemethoden der vorhandenen Constraint-Netze auf (triggerPreprocess(), triggerConsistency und triggerSearch), bis keine Wertebereichseinschränkungen mehr auftreten.

Specified by:
evaluate in interface YacsConstraintManager

tabularasa

public void tabularasa()
Setzt sämtliche Constraint-Netze wieder in den Ausgangszustand zurück, d.h. es werden alle Informationen über die zugehörigen Teilprobleme der Strategie gelöscht (Constraints, Variablen, Domänen, etc.).

Specified by:
tabularasa in interface YacsConstraintManager