yacs
Interface YacsConstraintManager

All Known Implementing Classes:
YacsConstraintManagerImpl

public interface YacsConstraintManager

Der YACS Constraint-Manager (YCM) dient als zentrale Schnittstelle des YACS-Frameworks. Er initiiert das Auslesen der Constraint-Lösungsstrategien und verwaltet die entsprechenden Constraint-Netze. Über eine Instanz des YCM lassen sich Constraints anhand des Namens einer verfügbaren Constraint-Lösungsstrategie inkrementell zu den Constraint-Netzen hinzugefügen. Der YCM initiiert und steuert die Anwendung der Constraint-Lösungsstrategien und führt den phasenweisen Propagations- bzw. Lösungsprozess durch.

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)

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.
 

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.

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).

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.

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.

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.

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.

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.

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).

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.

Parameters:
strategyName - String
Returns:
java.util.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.

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.

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.

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.

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).

Parameters:
strategyName - String
Returns:
boolean
Throws:
StrategyNotFoundException

evaluate

public void evaluate()
Startet den Constraint-Lösungsvorgang. Ruft der Reihe nach die jeweiligen Auswertemethoden der vorhandenen Constraint-Netze auf.


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 einer Strategie (Constraints, Variablen, Domänen, etc.) gelöscht.