The interface to constraint solvers. We are currently about reengineering the interface. The new one follows uses the following design:

Implementierung neuer Constraints

Um neue (nicht-rücknehmbare) Constraints im System zur Verfügung zu stellen sollte man folgendermassen vorgehen:

1.) Im Verzeichnis de.fhg.first.fd/constraints das Constraint als Klasse implementieren. Dazu muß ein Konstruktor implementiert werden, der als ersten Parameter eine Instanz des Interfaces Solver bekommt. Danch folgen dann die eigentlichen Parameter, dies sind meist Instanzen der Klasse Var oder Integers.  Dann muß das Constraint für alle erlaubten Solver implementiert werden, d.h. der Konstruktor hat folgende Struktur:

public NeuesConstraint(Solver s, Var v1, Var v2){
        super(s);
 if(s instanceof SICStusSolver){
 ... // Aufruf im SICStus Solver (siehe 2.)
 }
 else{
     if(s instanceof ILOGSolver){
    ... // Aufruf im ILOG Solver, siehe 3.)
     }
     else{
   throw new Error("NeuseConstraint(Solver,Var,Var) not implemented for "+ s.getClass());
     }
 }

2.)  Der Aufruf des Constraints im SICStusSolver geschieht immer durch die Methode de.fhg.first.fd.Constraint.call(functor String, Term[] args).  Es muss als Funktior die entsprechende Repräsentation des SICStus-Constraints angegeben werden. Die Argumente args sind Instanzen von de.fhg.first.fd.SICStusTerm evtl. muß hier noch gecastet werden: Aus einer Var -Instanz variable kann mann z.B. durch (SICStusTerm)variable.getTerm() einen SICStus-Term machen.  Um Prolog-Listen zu erzeugen kann man die Methode de.fhg.first.fd.SICStusTerm.array2List verwenden.

3.) Der Aufruf des Constraints im ILOG Solver geschieht durch den Aufruf einer Methode, die durch libilog.so zu Verfügung gestellt werden muß. Man geht folgendermassen vor:


 

TODO

WISH