Simple-to-setup Expert System?
Mark Hood writes: "I've been asked to provide a simple trouble-shooting guide for new engineers to follow when presented with an unfamiliar fault or bug report. Mainly this can be done with static web pages and a series of 'yes/no' questions... (Is it plugged in? Is it switched on? etc) but a nice facility would be to allow engineers to update it with what they did to fix faults / gather information. The question is: does anything simple like this already exist? Web searches turn up loads of 'Expert System Shells' or 'Programming Systems', but I was hoping for something that wouldn't require months of dedicated time (this is not my job, I'm just helping out :). Anyone done this at their workplace? Any hints? Or should I knuckle down and write a few CGI scripts for adding data to a web page?"
I'd almost make a real simple, searchable solution. Install PHPWiki (or insert your favorite WikiWikiWeb implementation), and have some pages like:
--------
* [After blah happens, Does this happen when this happens?]
* [After blah happens, does this not happen?]
Insert description of what may be going on if it's neither of the links to the next pages.
---------
and have wiki links to other pages asking questions as similar links.
It's simple, braindead, no custom coding, and laughingly easy for any engineer to update. It's not the most elegant solution, but in a pinch, it'll work. In my current and previous workplaces, the IT departments (at least the UNIX folks) have used wiki's for documenting just bout everything.
I've heard good things about CLIPS, for expert-system authoring. It's another one of those NASA projects. Another approach might be to read a usenet group on expert systems and see what ppl are talking about; while not the best approach, it's a decent indicator of popularity.
http://www.ghg.net/clips/CLIPS.html
my sig's at the bottom of the page.
I dont know of anything that does what you want off-the-shelf for little or no money. However, one step up from the 20-questions game approach is to get your system to optimise the decision tree.
t -papers/2.htm) which can construct an optimal decision tree for classifying supplied data.
p ert/part1/faq.html , and machine learning faqs: http://www.andypryke.com/university/ai_ml.html
What you are trying to do here is supply incomplete information about a problem, in order to classify it, so you can suggest a fix. There is an algorithm (the ID3 algorithm, see eg http://www.cise.ufl.edu/~ddd/cap6635/Fall-97/Shor
In order for ID3 to work you need to supply it with examples where the data was classified correctly. This translates to faults where the problem was identified and resolved; you can learn from previous examples simply by treating every resolved problem as part of your training set (and rebuild your decision tree).
You will also need to decide what data you are going to use for classification. This is simply done: when you fail to resolve a problem, ask the engineer what question should have been asked to identify the problem; something which takes a finite number of responses. Treat every question as having N 'known' responses (things that engineers have answered) and 1 'other' answer (this allows you to classify problems when data is incomplete, or known but not used in existing classified problems).
This approach would probably work. I've thought about using it before when I ran a helpdesk. But, it is fairly restrictive (questions have to be completely independent, for example, so that ID3 can reorder the decision tree), and the questions engineers supply might not help to learn much (eg: if the problem turned out to be the 'flange widget being loose' then the engineer might suggest 'is the flange widget loose' as a question; instead of the better question - 'Q: is there a loose widget? A: Yes, the flange widget.')
When I thought about writing this I thought it would also be useful to allow the engineer to add text suggesting how to determine the answer to the question ('examine all 6 washers under the grommit hinge') and an explanation of why the question is being asked, to teach the engineers ('loose or worn washers can rattle about. The gromit hinge washers have been prone to this in the past')
Anyway, hope this helped a little showing you how you could create a trainable system. As other posters have commented, CLIPS and the like require the rules to be written in the first place. ID3 is actually simple enough that you could code this yourself without much trouble, and downloadable implementations exist on the net. There are incremental variants (search for ID5) which avoid rebuilding the whole decision tree when a new solved problem is added.
For more sophisticated systems that actually try to do this right, take a look at the expert systems faq: http://www-2.cs.cmu.edu/Groups/AI/html/faqs/ai/ex
The only simple to setup expert system I know of is the Magic 8 Ball.
I know of support systems that utilize expert system shells implemented either with iLog or some other java Expert system shell. They typically require about 3-5 months with 3 knowledge engineers to build the knowledgebase. Writing efficient rules is an art, which many people do not realize. I've know and heard of people writing rules as if it was procedural programming and took a dozen pages or more.
My advice is don't go down that route unless it is an authorized project and has the funds allocated for it. Working with expert system shells takes a lot of skill and experience to do effectively. How the rules are written can greatly impact the performance of the engine and application. CLIPs and JESS both implement the RETE algo, which is a forward chaining algo. For support purposes RETE is fine, since you're dealing with simple question and answers. You may want to check out iLog, since they have done that type of thing in the past.
In general, I think you are going to find that even if you pick a general rule based package such as CLIPS or iLog Rules or go with some that has CBR capabilities such as A*E the project is going to be a lot more difficult than you think.
Diagnositic expert systems are not simple, and having a good tool is only the begining. If you want a usuable effective system plan to have 2-3 experts work at least a year to develop it.
Disclaimer: I develop expert system for a living, and have extensive experience developing diagnostic systems. Most clients I've worked with have no idea how difficult a problem this is. You really have restrict your problem domain or the task is impossible.
The Economics of Website Security
This is a free tool, from Amzi, for putting together an expert system that's assessible through CGI. http://www.amzi.com/download/webls.htm According to Amzi this is not a supported tool, but I've found it to be sufficient for simple problems. For a full fledge solution go for their KnowledgeWright.