Die Entscheidungstabelle

Oftmals geht es in Programmen darum, Aktionen auszuführen, die von der Erfüllung oder Nichterfüllung mehrer Bedingungen abhängig sind. Als theoretische Grundlage zur Lösung solcher Problemstellungen ist die Entscheidungstabelle anzusehen. In den meisten Programmiersprachen wird zur Umsetzung von Entscheidungstabellen ein komplexes Geflecht von IF-Abfragen verwendet. Cobol hingegen bietet die Möglichkeit, solche Tabelle mit Hilfe der EVALUATE-Anweisung umzusetzen. Diese Tabellen haben den folgenden Aufbau:

Name der Tabelle Regel-Nr. *
Bedingungen Bedingungsanzeiger
Aktionen Aktionsanzeiger

* Bei n Bedingungen ergeben sich 2n verschiedene Kombinationsmöglichkeiten oder Regeln.

Das Ganze soll an dem folgenden Beispiel verdeutlicht werden:

Das Problem:
In einem großen Unternehmen soll Personal eingestellt werden. Es werden Abteilungsleiter für verschiedene Unternehmensbereiche gesucht. Außerdem ist ein Posten in übergeordneter Stellung zu vergeben. Nachdem etliche tausend Bewerbungen eingegangen sind, wurden die Bewerber, die nicht in die gefragte fachliche Richtung orientiert waren, bereits ausgemustert und die Daten der übrigen Bewerber in den Rechner eingegeben. Als Bewertungkriterien werden dabei praktische Erfahrung, Hochschulstudium und akademische Laufbahn angegeben. Nun soll eine weitere automatische Vorauswahl getroffen werden, die sich an den folgenden Regeln orientieren soll:
1. Hat ein Bewerber eine akademische Laufbahn (Prof.) hinter sich, so soll er für die übergeordnete Stelle vorgeschlagen werden und einen Gesprächstermin erhalten.
2. Hat der Bewerber keine akademische Laufbahn jedoch ein Hochschulstudium absolviert erhält er einen Gesprächstermin.
3. Hat ein Bewerber nur praktische Erfahrung, so erhält er eine Absage.
4. Hat der Bewerber ein Hochschulstudium absolviert und zusätzlich praktische Erfahrungen gesammelt, so wird er ebenfalls für die übergeordnete Stelle vorgeschlagen und erhält einen Gesprächstermin.

Die Analyse:
Aus dem oben gesagten ergibt sich, daß das Programm folgende Aktionen einleiten kann:
1. Absage drucken.
2. Gesprächseinladung drucken.
3. Kandidat in Vorschlagsliste für übergeordnete Stelle eintragen.

Wie bereits beschrieben treten folgende Bedingungen auf:
1. Kandidat hat praktische Erfahrung.
2. Kandidat hat Hochschulstudium absolviert.
3. Kandidat kann akademische Laufbahn vorweisen.

Die Entscheidungstabelle dazu:
Wenn man diese Aktionen und Bedingungen auf das oben gezeigte Schema der Entscheidungstabelle überträgt, dann sieht das so aus:

Personal.tab   - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 -
praktische Erfahrung   J J J J N N N N
Hochschulstudium   J J N N J J N N
akadem. Laufbahn   J N J N J N J N
 
Gesprächseinladung drucken   X X X   X X X  
Absage drucken         X       X
In Kandidatenliste aufnehmen   X X X   X   X  


Erklärung bis hier hin:
Zunächst wurden im Bedingungsanzeiger alle Möglichkeiten (23 Bedingungen= 8 Regeln) mit J für ja und N für nein dargestellt. Man geht dabei ganz stur nach dem dargestellten Halbierungs-Schema vor. Damit ist die Entscheidungstabelle formal vollständig.
Nachdem also der Bedingungsanzeiger ausgefüllt war, wurden für alle Regeln die, den entsprechenden Bedingungen zugehörigen Aktionen, mit einem X gekennzeichnet.

Die Optimierungen:
Die Tabelle kann gerade bei vielen Bedingungen sehr groß werden. Daher gibt es Optimierungs- bzw. Verkürzungsmöglichkeiten:

Logische Optimierung:
Schaut man sich die Tabelle so an und richtet dabei sein Augenmerk auf die Regeln 3 und 7, so stellt man fest, daß die Bedingungskombinationen dieser beiden Regeln unlogisch sind - wie soll jemand eine akademische Laufbahn vorweisen können, wenn er kein Hochschulstudium absolviert hat?
Die Regeln 3 und 7 können aus genanntem Grund gestrichen werden. Folge daraus ist, daß jetzt nur noch 6 Regeln übrig bleiben:

Personal.tab   - 1 - - 2 - - 3 - - 4 - - 5 - - 6 -
praktische Erfahrung   J J J N N N
Hochschulstudium   J J N J J N
akadem. Laufbahn   J N N J N N
 
Gesprächseinladung drucken   X X   X X  
Absage drucken       X     X
In Kandidatenliste aufnehmen   X X   X    

In dieser Tabelle sind alle praktisch möglichen Problemkombinationen aufgeführt. Damit handelt es sich um eine inhaltlich vollständige Entscheidungstabelle.

Konsolidierung:
Eine Entscheidungstabelle kann weiter optimiert werden, indem sie konsolidiert wird. Dabei geht man nach dem folgenden Schema vor:
1. Zunächst wird festgestellt, ob es Regeln gibt, deren Aktionsanzeigen identisch sind.
2. Sind solche Regeln festzstellen, werden sie paarweise miteinander verglichen.
3. Unterscheidet sich das Paar lediglich durch eine Zeile im Bedingungsanzeiger, so wird eine der Regeln gestrichen. An die Stelle, wo der Bedingungsanzeiger unterschiedlich war, tritt ein sog. Irrelevanzanzeiger (" - ").

Geht man nach diesem Schema vor, so stellt man im ersten Schritt fest, daß die Regeln 1, 2 und 4 dieselben Aktionen auslösen (Einladung und Eintrag in die Vorschlagsliste). Dasselbe gilt für die Regeln 3 und 6, in denen eine Absage gedruckt wird.
Im zweiten Schritt nehmen wir uns zunächst das Paar 1 und 2 vor, und stellen fest, daß diese Beiden sich lediglich in der Bedingung "akademische Laufbahn" ja oder nein unterscheiden. Daher entfällt Regel Nr. 2 und in die unterste Zeile im Bedingungsanzeiger der Regel Nr. 1 erscheint der Irrelevanzanzeiger. Schaut man sich dann das Paar 3 und 6 an, kann Regel 6 entfallen und in die erste Zeile des Bedingungsanzeigers der Regel Nr. 3 wird wieder der Irrelevanzanzeiger gesetzt.
Die Tabelle ist somit auf 4 Regeln geschrumpft:

Personal.tab   - 1 - - 2 - - 3 - - 4 -
praktische Erfahrung   J - N N
Hochschulstudium   J N J J
akadem. Laufbahn   - N J N
 
Gesprächseinladung drucken   X   X X
Absage drucken     X    
In Kandidatenliste aufnehmen   X   X  

Die 'Else-Regel':
Um die Anzahl der zu beachtenden Regeln noch weiter zu dezimieren, kann man die Else-Regel verwenden. Diese Regel fasst alle die Regeln zusammen, die die gleiche Aktion nach sich ziehen. Logischerweise ist pro Entscheidungstabelle nur eine Else-Regel zugelassen und diese Regel darf keine Bedingungsanzeiger aufweisen (wie denn auch?). Die Else-Regel fasst also all die Regeln zusammen, die man auch unter dem Titel "Alle Anderen" zusammenfassen könnte.
Im unserem Beispiel könnte man die Regeln 1 und 3 zu einer Else-Regel zusammenfassen. Das sähe dann so aus:

Personal.tab   - 1 - - 2 - - Else -
praktische Erfahrung   - N  
Hochschulstudium   N J  
akadem. Laufbahn   N N  
 
Gesprächseinladung drucken     X X
Absage drucken   X    
In Kandidatenliste aufnehmen       X

Die Entscheidungstabelle ist so von acht auf drei Regeln zusammengeschrumpft, die jetzt abgefragt werden können.


Die erweiterte Entscheidungstabelle:
In dem Beispiel oben kam im Bedingungsanzeiger nur J für Ja und N für Nein und im Aktionsazeiger X oder kein X in Betracht. Man kann Entscheidungstabellen aber auch so nutzen, daß im Bedingungs- und Aktionsanzeiger ein beliebiger Text erscheint. In solch einem Fall spricht man dann von einer erweiterten Entscheidungstabelle.
Zur besseren Erklärung hier ein neues Beispiel:

Die Situation:
Der Ferenghi (das sind die kleinen häßlichen mit den großen Ohren) Quark sitzt über der Preisplanung für die Drinks in seiner Bar, dem 'Quarks' (... wer jetzt denkt, daß ich übergeschnappt sei, oder er habe die neueste Rechtschreibreform verschlafen, der sei auf die Serie 'Deep Space Nine' verwiesen...). Gemäß den Erwerbsregeln versucht er dabei soviel Geld wie nur irgend möglich aus seinen Gästen zu holen. Da er aber auch ein schlauer Taktiker ist, weiß er, daß es besser ist, die Offiziere der Station wohlwollend zu stimmen. Da der große Nagus (Ober-Ferenghi) immer wieder auf DS9 auftaucht, gilt es auch ihn in der Planung zu bedenken (... das Aas zahlt für nichts!). Aus Werbezwecken bekommen normale Gäste und Offiziere, die noch keine Stammgäste sind ein Thelorsianisches Tempelwasser (TTW) als Begrüßungsgetränk auf Kosten des Hauses.

Im Einzelnen stellt er folgende Preisregeln auf:
- Der Nagus zahlt nichts (... wenn auch zähneknirschend)
- Darbospieler (Darbo ist so eine Art Roulette) zahlen einen 50%igen Aufschlag, da sie abgelenkt sind.
- Offiziere der Station zahlen immer 100% (Weder Nachlass noch Aufschlag).
- Thekensitzer zahlen einen Aufschlag von +15%, da sie sonst keinen weiteren Umsatz bringen (Darbo oder Holosuite o.ä.).
- Stammgäste erhalten einen Nachlass von -3,5% (Reklame...)

Aktionen die aus diesen Regeln folgen, sind zum Einen der resultierende Preis und zum Anderen je nach dem der freie Drink.

Nachdem er die Preisregeln aufgestellt hat, überläßt Quark es wie immer seinen Bruder Rome eine Lösung zu entwerfen und zieht diesem die Zeit, die er zur Entwicklung benötigt, vom Lohn ab.
Rome entwickelt zunächst den folgenden Bedingungsteil für eine erweiterte Entscheidungstabelle:

Drinks.tab   - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9 -
Personen:   No No No No Of Of Of Of Na
Orte:   Da Da Th Th Da Da Th Th -
Stammgast?   J N J N J N J N -

Legende:
Personen: No = Normaler Gast ; Of = Offizier ; Na = Nagus
Orte: Da = Darbotisch ; Th = Theke

Danach setzt er gemäß den vom Quark aufgestellten Preisregeln die entsprechenden Prozentsätze ein und kann so die Prozentsätze der verschiedenen Gäste bestimmen:

Drinks.tab   - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9 -
Personen:   - - - - 0 % 0 % 0 % 0 % -100%
Orte:   +50% +50% +15% +15% - - - - -
Stammgast?   -3,5% - -3,5% - - - - - -
Preis = 100% + Preisaufschläge minus Nachlässe.
Preis:   148,25% 150,00% 113,25% 115,00% 100,00% 100,00% 100,00% 100,00% 00,00%
Freidrink:     TTW   TTW   TTW   TTW  

Wie man sieht, entsprechen sich die Regeln 5 und 7 sowie 6 und 8 sowohl im Bedingungs- als auch im Aktionsteil. Daher können die Regeln 7 und 8 entfallen. Also sieht die Tabelle dann folgendermaßen aus:

Drinks.tab   - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 -
Personen:   - - - - 0 % 0 % -100%
Orte:   +50% +50% +15% +15% - - -
Stammgast?   -3,5% - -3,5% - -3,5% - -
Preis = 100% + Preisaufschläge minus Nachlässe.
Preis:   148,25% 150,00% 113,25% 115,00% 100,00% 100,00% 00,00%
Freidrink:     TTW   TTW   TTW  

Setzt man nun wieder die alten Bedingungskennzeichen ein, so ergibt sich das folgende Bild:

Drinks.tab   - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 -
Personen:   No No No No Of Of Na
Orte:   Da Da Th Th - - -
Stammgast?   J N J N J N -
Preis = 100% + Preisaufschläge minus Nachlässe.
Preis:   148,25% 150,00% 113,25% 115,00% 100,00% 100,00% 00,00%
Freidrink:     TTW   TTW   TTW  


Legende:
Personen: No = Normaler Gast ; Of = Offizier ; Na = Nagus
Orte: Da = Darbotisch ; Th = Theke
Aktion: TTW = Thelursianisches Tempelwasser


Wie man sieht, macht das Ergebnis den 285 Erwerbsregeln der Ferenghis alle Ehre!

...