next up previous contents index
Nächste Seite: 8.4.1.2 Beispiel: CD-ROM-Geschwindigkeit Aufwärts: 8.4.1 Modifikation der Wissensbasen Vorherige Seite: 8.4.1 Modifikation der Wissensbasen   Inhalt   Index

8.4.1.1 Beispiel: Taktfrequenzen

Neben der oben angesprochenen Modifikation des zu übergebenen Constraint-Ausdrucks werden speziell für die Wissensbasis PC_Advanced.lisp einige weitere Änderungen notwendig, damit die Constraints für die Beispielkonfigurierung die ihnen zugedachte Funktionalität erfüllen können. So wird bei dem Konzept mit Namen Processor die FSB_Rate von einem Intervallwert auf diskrete Werte umgestellt:

(def-do
    :name Processor
    :oberkonzept PC_Component
    :parameter ((Clock {450 466 500 533 550 600 650 700 733 750 800 850})
                (Type {'Sockel_7 'Slot_A 'Slot_1})
                (FSB_Rate {66 100 133})
                (L2_Cache {128 512})
                (Icon "cpu" (non-config true))
                (Price [160 578])))

Für den Parameter (FSB_Rate {66 100 133}) lässt sich auf diesem Weg ein FD-Solver verwenden, was dem Funktions-Constraint-Beispiel und dem Constraint-Netz aus Abschnitt 3.6.3 f. entspricht. Dieselbe Modifikation wird für das Konzept Mainboard notwendig:

(def-do
    :name Mainboard
    :oberkonzept PC_Component
    :parameter ((Type {'Sockel_7 'Slot_A 'Slot_1})
                (AGP_Slot {0 1})
                (PCI_Slot [3 6])
                (ISA_Slot [0 2])
                (FSB_Rate {66 100 133})
                (Icon "mainboard" (non-config true))
                (Price 350)))

Das ebenfalls benötigte Konzept Memory verfügt in seiner Ursprungsfassung bereits über diskrete Werte für den Parameter FSB_Rate:

(def-do
    :name Memory
    :oberkonzept PC_Component
    :parameter ((Capacity {16 32 64 128 256}(default 128))
                (FSB_Rate {66 100 133}(default 133))
                (Icon "simm" (non-config true))
                (Price [64 560])))

Die jeweiligen Unterkonzepte der genannten Konzepte benötigen keine Anpassung, da hier bereits jeweils ein diskreter Wert vorliegt. Die eigentliche Constraint-Relation mit dem zugehörigen konzeptuellen Constraint stellt sich demnach wie folgt dar:

(def-constraint-relation
    :name           func_FSB_Rate
    :constraint-typ :funktion
    :externe-pins   (MB_FSB_Rate P_FSB_Rate S_FSB_Rate)
    :beschraenkungs-funktion "MB_FSB_Rate = P_FSB_Rate;
                              MB_FSB_Rate <= S_FSB_Rate;
                              P_FSB_Rate <= S_FSB_Rate;
                              # medium_consistency")

(def-konzeptuelles-constraint
    :name                    FSB_Rate
    :variablen-pattern-paare ((?m  :name Mainboard)
                              (?p  :name Processor)
                              (?s :name Memory))
    :constraint-aufrufe      ((func_FSB_Rate (?m FSB_Rate)
                                             (?p FSB_Rate)
                                             (?s FSB_Rate))))

Während das konzeptuelle Constraint unverändert ist, wird die Constraint-Relation von einem Tupel-Constraint hin zu einem Funktions-Constraint modifiziert. In dem Constraint-Ausdruck sind drei primitive Constraints enthalten, welche die in Abschnitt 3.6.3 f. beschriebene Abhängigkeit repräsentieren. Der Constraint-Ausdruck, bestehend aus einer Konjunktion mehrerer primitiver Constraint-Ausdrücke, kann vom YACS Constraint-Parser in einem Schritt gelesen werden. Abgetrennt durch ,,#`` als Trennzeichen, wird an die Wrapper-Klasse des YACS-Frameworks der Name der zur Constraint-Verarbeitung zu nutzenden Lösungsstrategie übergeben.


next up previous contents index
Nächste Seite: 8.4.1.2 Beispiel: CD-ROM-Geschwindigkeit Aufwärts: 8.4.1 Modifikation der Wissensbasen Vorherige Seite: 8.4.1 Modifikation der Wissensbasen   Inhalt   Index