Home Open Source Articles Videos AI Newsletter Contact

Contents


 Preface
 Acknowledgements

1 Introduction
 1.1 Expert Systems
 1.2 Expert System Features
    Goal-Driven Reasoning
    Uncertainty
    Data Driven Reasoning
    Data Representation
    User Interface
    Explanations
    1.3 Sample Applications
 1.4 Prolog
 1.5 Assumptions

2 Using Prolog's Inference Engine   
 2.1 The Bird Identification System
    Rule formats
    Rules about birds
    Rules for hierarchical relationships
    Rules for other relationships
 2.2 User Interface
    Attribute Value pairs
    Asking the user
    Remembering the answer
    Multi-valued answers
    Menus for the user
    Other enhancements
 2.3 A Simple Shell
    Command loop
    A tool for non-programmers
 2.4 Summary
 Exercises

3 Backward Chaining with Uncertainty
 3.1 Certainty Factors
    An Example
    Rule Uncertainty
    User Uncertainty
    Combining Certainties
    Properties of Certainty Factors
 3.2 MYCINs Certainty Factors
    Determining Premise CF
    Combining Premise CF and Conclusion CF
    Premise Threshold CF
    Combining CFs
 3.3 Rule Format
 3.4 The Inference Engine
    Working Storage
    Find a Value for an Attribute
    Attribute Value Already Known
    Ask User for Attribute Value
    Deduce Attribute Value from Rules
 3.5 Making the Shell
    Starting the Inference
 3.6 English-like Rules
 Exercises

4 Explanation
    Value of Explanations to the User
    Value of Explanations to the Developer
    Types of Explanation
 4.1 Explanation in Clam
 Tracing
    How Explanations
    Why Questions
 4.2 Native Prolog Systems
 Exercises

5 Forward Chaining
 5.1 Production Systems
 5.2 Using Oops
 5.3 Implementation
 5.4 Explanations for Oops
 5.5 Enhancements
 5.6 Rule Selection
    Generating the conflict set
    Time stamps
 5.7 LEX
    Changes in the Rules
    Implementing LEX
 5.8 MEA
 Exercises

6 Frames
 6.1 The Code
 6.2 Data Structure
 6.3 The Manipulation Predicates
 6.4 Using Frames
 6.5 Summary
 Exercises
7 Integration
 7.1 Foops (Frames and Oops)
    Instances
    Rules for frinsts
    Adding Prolog to Foops
 7.2 Room Configuration
    Furniture frames
    Frame Demons
    Initial Data
    Input Data
    The Rules
    Output Data
 7.3 A Sample Run
 7.4 Summary
 Exercises

8 Performance
 8.1 Backward Chaining Indexes
 8.2 Rete Match Algorithm
    Network Nodes
    Network Propagation
    Example of Network Propagation
    Performance Improvements
 8.3 The Rete Graph Data Structures
 8.4 Propagating Tokens
 8.5 The Rule Compiler
 8.6 Integration with Foops
 8.7 Design Tradeoffs
 Exercises

9 User Interface
 9.1 Object Oriented Window Interface
 9.2 Developer's Interface to Windows
 9.3 High-Level Window Implementation
    Message Passing
    Inheritance
 9.4 Low-Level Window Implementation
 Exercises

10 Two Hybrids
 10.1 CVGEN
 10.2 The Knowledge Base
    Rule for parameters
    Rules for derived information
    Questions for the user
    Default rules
    Rules for edits
    Static information
 10.3 Inference Engine
 10.4 Explanations
 10.5 Environment
 10.6 AIJMP
 10.7 Summary
 Exercises

11 Prototyping
 11.1 The Problem
 11.2 The Sales Advisor Knowledge Base
    Qualifying
    Objectives - Benefits - Features
    Situation Analysis
    Competitive Analysis
    Miscellaneous Advice
    User Queries
 11.3 The Inference Engine
 11.4 User Interface
 11.5 Summary
 Exercises

12 Rubik's Cube
 12.1 The Problem
 12.2 The Cube
 12.3 Rotation
 12.4 High Level Rules
 12.5 Improving the State
 12.6 The Search
 12.7 More Heuristics
 12.8 User Interface
 12.9 On the Limits of Machines
 Exercises

Appendix - Full Source Code
 Native
 Clam
 Oops
 Foops
 Rete-Foops
 Windows
 Rubik
 Taxes (Bonus Code)