9 ms·
CLIPS: A Tool for Building Expert Systems
- xvilka 7y agoProbably better to use modern Prolog instead?
- pvinis 7y agoWhat is a modern prolog? I'd like to try out something like it.
- xvilka 7y agoCheck Power of Prolog[1] book, and Awesome Prolog[2] list for more information. [1] https://www.metalevel.at/prolog https://www.metalevel.at/prolog [2] https://github.com/klaussinani/awesome-prolog https://github.com/klaussinani/awesome-prolog
- jimktrains2 7y agoSometimes it's much easier to state rules in a forward chaining system. Why is it inherently better to use a bakeards chaining system under all circumstances?
- muydeemer 7y agoBackward chaining is goal-driven, it's aimed at answering specific questions where you can prune your search space effectively. This is opposed to data-driven forward chaining where you basically keep looking at what things can be derived without having specific queries in mind. I wouldn't say one is better than the other, it depends on circumstances and use cases. In dynamic systems where there is a lot of data changes/data is fed in dynamically, backward chaining gives you a completeness guarantee whereas FC is eventually consistent (specific answer you are looking for might be not triggered yet). On the other hand, FC is useful when we want to use triggering behaviours - once a specific information is added to the system, a trigger can be executed/specific action can be taken.
- spinningslate 7y ago> Probably better to use modern Prolog instead? Caveat first off: it's 7+ years since I looked at this, so take "modern" in that context. I used SWI Prolog specifically [1]. At that point, CLIPS and Prolog occupied similar spaces - but not the same. Prolog is backward chaining. So it's really good at answering questions that can be derived from a base set of facts. For example. Let's say: There's a road from City A to City B, and a road from City B to City C. It's then very easy in Prolog to say "there's a route from "Start" to "Finish" if either: 1. there's a road from Start to Finish, or 2. There's a road from Start to City X, and a route from X to Finish. The beauty of prolog is that you don't need to explicitly code iteration over all the available roads; that's what the backward chaining algorithm does for you. In arriving at the answer, it'll exhaustively test all permutations. Importantly though, it won't add to the list of facts you started with (unless you specifically tell it to). Once the question is answered, the intermediate results are discarded. In that sense, Prolog - at least in purest form - is somewhat stateless. Assert some facts, then ask questions about inferences that can be drawn from them. CLIPS is different. It's a forward chaining engine, from a class of related products known as Production Systems. It's designed to be used where new facts are being asserted; when that happens, it figures out the consequences as they ripple through. As new facts are asserted - and their consequences computed - the underlying state evolves. So intermediate results are retained (in fact, that's key to operation). CLIPS (and Production Systems in general) were used, for example, in medical diagnosis applications. As new symptoms were asserted, the rules rippled through, suggesting the most likely diagnosis. The key to making this efficient is the forward chaining algorithm, known as Rete [2] (pronounced "Rait"). Again: these are examples, and the reality is likely much more nuanced now. But at least in their purest original form, CLIPS and Prolog are more complementary than overlapping. [1] http://www.swi-prolog.org/ http://www.swi-prolog.org/ [2] https://en.wikipedia.org/wiki/Rete_algorithm https://en.wikipedia.org/wiki/Rete_algorithm EDIT: minor grammar changes + clarified naming in Prolog example.
- gglitch 7y agoI only spent a few minutes with it, but highly recommend the user's guide. I thought it was clearly and well-written, and also pretty funny. > A fact such as (duck) or (quack) is said to consist of a single field [...] As a simple analogy, you can think of a field as a picture frame. The frame can hold a picture, perhaps a picture of your pet duck (For those of you who are curious what a picture of a “quack” looks like, it could be (1) a photo of an oscilloscope trace of a duck saying “quack”, where the signal input comes from a microphone, or (2) for those of you who are more scientifically inclined, a Fast Fourier Transform of the “quack” signal, or (3) a TV-huckster selling a miracle cure for wrinkles, losing weight, etc.).
- afandian 7y agoAh CLIPS! There are a few moments in my life as a young programmer that I remember as mind-expanding. CLIPS was one of those moments (along with arrays, files and recursion). It's forward-chaining (not backward, as Prolog is) so you can see the database of facts build up step by step. A nice bridging point between procedural and declarative programming. And a foot in the door for parens-based syntax (it looks a bit like LISP) without the s-expression model.
- Quequau 7y agoFor some reason I was under the impression that Expert Systems were in some way a sort of evolutionary dead end and weren't used any more. Is this not the case?
- jimktrains2 7y agoRule based systems can be extremely useful for certain types of problems. I'm working on incorporating a rule based system into our business code to allow easier changes to that logic by the people it affects. As for expert systems in terms of ai, I do think that's gone by the wayside, but probably not entirely gone (ditto for decision trees).
- maxdemarzi 7y agoYou can mix rule based systems and decision trees (well, decision streams) quite nicely in a Graph. Watch the 15 min video on https://maxdemarzi.com/2018/10/08/dynamic-rule-based-decision-trees-in-neo4j-part-3/ https://maxdemarzi.com/2018/10/08/dynamic-rule-based-decisio... for more details.
- felixyz 7y agoWould you mind sharing which rule-based system you're working with? IMO Answer Set Programming is very useful for things like this. The language is small and maps straightforwardly onto intuitive ways of thinking about rules. It's closer to Prolog than things like CLIPS but really neither forward- nor backwards-chaining. It's hiding all operational specifics from you, which makes it very scalable as a representation. I think it's something many teams would do well to reach for when they take a first stab at implementing business logic in a rule-based format.
- jimktrains2 7y agoFor the moment it's just a tiny language and interpreter I've been building, taking inspiration from other rule-based systems. We wanted something that'd run in our application and we're running PHP (:-/) so I didn't have too many options. (I'd really love to open source it once it's complete, but we'll see.) I'll have to look into Answer Set Programming more as I havn't seen it before. Thanks!
- mark_l_watson 7y agoClips was inspired by Charles Forgy’s OPS5 that was implemented in Common Lisp and introduced the Rete algorithm that is also used in Clips. I didn’t do much with Clips but OPS5 was a large part of my working life for years (supported commercial versions on Macintosh and Xerox Lisp Machines, extended the Rete algorithm to support multiple worlds for an internal project).
- eismcc 7y agoI maintain an OPS5 repo here: http://OPS5.org http://OPS5.org
- lispm 7y agoClips was directly designed based on ART (Automated Reasoning Tool), an expensive early Expert System Shell written in Lisp. Unfortunately ART seems to be lost...
- rjsw 7y agoMaybe ART got lost when Ferranti was broken up.
- lispm 7y agoAFAIK they were only a distributor in the UK... Inference Corp was then Brightware, which then was bought by Firepond, then ???
- fogus 7y agoI think that the story is that CLIPS was inspired by ART's rule syntax, but developed independently and without access to its source.
- lispm 7y agoI thought the developer had access to the ART software system, software written in ART and ART documentation - since that was what NASA was using already to develop rule-based expert systems? Given that ART was written in Common Lisp and exposed a full Common Lisp inside, it would also be trivial to get large amounts of information about its implementation (data structures, functions, arglists, documentation, traces, macro expansions, disassemblies, ...). I'm pretty sure ART itself had extensive debugging&tracing tools for the rules engine. Not having source to some Common Lisp software, says very little, when the full Common Lisp environment is available for introspection. I wouldn't expect that ART was shipped in source to its customers. But I would expect that both ART and the underlying Lisp had excellent introspection capabilities. http://clipsrules.sourceforge.net/WhatIsCLIPS.html http://clipsrules.sourceforge.net/WhatIsCLIPS.html > The prototype version of CLIPS was developed in the spring of 1985 in a little over two months. Particular attention was given to making the tool compatible with expert systems under development at that time by the Artificial Intelligence Section. Thus, the syntax of CLIPS was made to very closely resemble the syntax of a subset of the ART expert system tool developed by Inference Corporation. Since ART was what they were using. > Although originally modelled from ART, CLIPS was developed entirely without assistance from Inference or access to the ART source code. Sure, it wouldn't say anything else in their position.
- ishi 7y agoBack in 2003 I worked for a startup that used CLIPS. While it's quite powerful and expressive, as the number of rules grows it becomes very difficult to reason about and debug them. The application logic becomes spaghetti-like and very brittle. So it's an interesting paradigm to learn about, but not very useful for real-world applications IMO.
- JabavuAdams 7y agoSounds like game logic. There was a board-game prototype a friend was working on, and I suggested using a rules-based approach for coding the game logic. More recently, I was tempted to make a tool for the designers on Storm Casters to specify game and meta-game logic like this, but had to abandon that due to higher priorities.
- evacchi 7y agoThis calls for a shameless plug to Drools. Disclaimer: I'm in the core development team :) https://docs.jboss.org/drools/release/7.20.0.Final/drools-docs/html_single/index.html https://docs.jboss.org/drools/release/7.20.0.Final/drools-do...
- flyhighplato 7y agoLove Drools. The consultancy I worked for made so many happy customers by just simplifying a lot of complex optimization use cases with Drools. Hard to do better than Drools for rule-based anything if you’re on the JVM.
- nickpeterson 7y agoAs someone who is only recently getting into rules system development, outside of the manual, are there any other great references you would recommend for understanding rules systems like modern Drools?
- spinningslate 7y agoYou might find the CLIPS docs useful [0]. iirc, DROOLS was at least in part inspired by CLIPS. Plus the CLIPS docs are very well written as noted elsewhere. The book "Expert Systems: Principles and Programming" [1] is also good though now out of print. [0] http://www.clipsrules.net/Documentation.html http://www.clipsrules.net/Documentation.html [1] http://www.amazon.com/exec/obidos/tg/detail/-/0534384471/ref=lpr_g_1/002-8157855-8752009?v=glance&s=bo http://www.amazon.com/exec/obidos/tg/detail/-/0534384471/ref...
- dfraser992 7y agoPyke [1], a Python based rules engine, supports both forward and backwards chaining. The docs are good. We used it in an AI class I was a TA for; the previous years used Prolog and everyone (most everyone) consistently hated Prolog.... For students used to the video games that are IDEs these days, SWI Prolog and its UI is awful. Pyke and PyKnow were well received, however. As it is Python based, it is a lot easier to deal with than Prolog. [1] http://pyke.sourceforge.net/index.html http://pyke.sourceforge.net/index.html
- flyhighplato 7y agoI’ve been using this in our Python project via clipspy (https://github.com/noxdafox/clipspy https://github.com/noxdafox/clipspy) and it’s been pretty nice. Clips is really REPL-centric and provides a lot of good debugging tools. It’s powerful and fast. The maintainer (Gary Riley) also does a great job answering questions on SO. Pretty happy with it.
- JabavuAdams 7y agoOooh, thanks for this!
- stergios 7y agoGary was also one of the first and primary authors of CLIPS. If I recall correctly, a summer intern in the AI section under the Mission Planning Directorate, whose name I have forgotten, developed a prototype or a proof-of-concept of CLIPS. At the time, 1984-ish, the AI group at JSC had many expensive Symbolics and Lisp Machine computers running ART. The intern's project showed that a pattern matching rules based engine could be developed in a conventional programing language for distribution to traditional cost effective hardware.
- sedachv 7y ago> a conventional programing language for distribution to traditional cost effective hardware. In 1984, C was considered a new programming language. The VAX first came out in 1977, and the Sun 1 in 1982. Traditional hardware in 1984 would be an IBM mainframe.
- graycat 7y agoThey gave a lot of IAAI talks! WOW! I gave only one, from our joint work with GM. It looks like they were able to make expert systems useful. Our work on KnowledgeTool might be equally useful! After all, it appears that their work was stuck with C, and our work on KnowledgeTool was based on, was a pre-processor to -- sorry to mention this -- PL/I. But, gee, they based on C, so mentioning PL/I should not be so bad! Our use of KnowledgeTool was to monitor server farms and networks. There in particular we were trying to do problem detection. So, in expert systems, When I see A and B and 5 or more cases of C without a D, then it looks really bad -- raise an alarm. and, thus, have staff investigate. And this statement of a symptom, test, for something wrong, was supposed to come from operator experience. So, broadly the idea of KnowledgeTool for that work was not to find better ways to monitor but just to encode what operators had already learned, mostly just from experience. Hmm .... In such monitoring, we have two ways to be wrong, (1) a false alarm where we say that the system is sick when it is well and (2) a missed detection where we say that a system is well when it is sick. So, we want the false alarm rate, to be called the probability of Type I error, and the missed detection rate, to be called the probability of Type II error. Quite broadly there is a trade-off between these two rates: If we accept a higher false alarm rate, then we stand to get a lower missed detection rate. Not all means of detection are equivalent: Some poor detectors have really high rates for both false alarms and missed detections, and some good detectors have really low rates on both of the errors. A problem with expert systems was that we had no idea what rates we were getting or if our detectors were poor or good. Commonly at least in principle we can adjust the rate of false alarms. That is good because (1) a false alarm sends the bridge staff on wild goose chasing and (2) false alarm rate too high is a standard complaint. Looking at the problem in a little more detail, we easily had wide, deep rapidly flowing oceans of data. So, we could easily have data on 1000 variables with the data for each variable arriving at 100 times a second. So, write some expert system rules? No thanks! So, I dreamed up a solution, basically, right, as guess from Type I/II, a statistical hypothesis test but one that is both distribution free and multi-dimensional, maybe the first such. False alarm rate can be set in advance of collecting data, and is in a useful sense for each selected false alarm rate has the detection rate the highest possible (for that false alarm rate). I did this work to improve on expert systems for monitoring. Yes, I published the work, in Information Sciences. Ah, beating expert systems! What's in the paper is some applied math based on some advanced pure math prerequisites, especially an idea from ergodic theory. What's in the paper really SHOULD be deployed. I suspect that more could be done. Well, the OP starts with > Developed at NASA’s Johnson Space Center from 1985 to 1996, the C Language Integrated Production System (CLIPS) is a rule-based programming language useful for creating expert systems and other programs where a heuristic solution is easier to implement and maintain than an algorithmic solution. Gee, I thought that my "algorithmeic", really original mathematical statistics, was easier than doing as well with heuristics.
- Nergg 7y agoWe use it in our main application. We have more than 2000 rules and with JNI, we have been able to add web services.
- unicas 7y agoAn emscripten version (runs in browser, just one file): https://github.com/nilqed/jsXSI https://github.com/nilqed/jsXSI
- unicas 7y agoAn emscripten version (runs in browser, just one file ;) https://github.com/nilqed/jsXSI https://github.com/nilqed/jsXSI
- kendallgclark 7y agoIf you need this sort of thing only embedded within a fast, scalable graph database, check out Stardog (http://stardog.com/ http://stardog.com/).
- chrstphrhrt 7y agoI use PyKnow which is based on CLIPS!! Is the resurgence of expert systems finally a thing after statistics-all-the-things fatigue?!
- JabavuAdams 7y agoThe new hotness is combining both so that your NN doesn't think an upside down school bus in a field is a rectangular flower, or a lamb in a child's arms is actually a cat.
- chrstphrhrt 7y agoHaha so true. When trying to communicate this historical cycle to people I have been referring to this deck lately: https://www.darpa.mil/attachments/AIFull.pdf https://www.darpa.mil/attachments/AIFull.pdf Can't wait till marketing folks run with "3rd wave AI".
- dfraser992 7y agoEver try Pyke? It handles backwards chaining. http://pyke.sourceforge.net/index.html http://pyke.sourceforge.net/index.html
- logronoide 7y agoCLIPS! It’s still alive 21 years after my first experience with it!!! Amazing!
- JabavuAdams 7y agoSo, I didn't really like Prolog when I had to study it for a class, but I'm generally fond of rule-based systems. Would love to try them as a way to specify game-logic. Hmmm. I think I just figured out what I'm going to do for my next game jam.
- noxdafox 7y agoCLIPS is a very neat tool with a very broad range of applications. It is used in medicine as a diagnosis tool: https://pdfs.semanticscholar.org/64c0/672703724bd32e04b94c10254f478213bf86.pdf https://pdfs.semanticscholar.org/64c0/672703724bd32e04b94c10... http://www.jatit.org/volumes/research-papers/Vol4No10/5Vol4No10.pdf http://www.jatit.org/volumes/research-papers/Vol4No10/5Vol4N... In software security for malware detection and categorization: https://ieeexplore.ieee.org/abstract/document/4724664 https://ieeexplore.ieee.org/abstract/document/4724664 In gaming for driving AI: https://www.youtube.com/watch?v=-S1CkfzEHSU&t=489s https://www.youtube.com/watch?v=-S1CkfzEHSU&t=489s And plenty of other fields. It's a very good solution for complex problems where a large amount of knowledge or expertise is required in order to reach a solution. Its documentation and REPL are excellent for those who want to approach fundamentals of AI by solving concrete problems. It also comes with several language bindings allowing to integrate it with other AI/ML platforms such as tensorflow, numpy etc.. In the past I helped few students which were trying to bring together machine learning models and expert systems to benefit from both worlds.
- ablekh 7y agoSurprised to see lack of any comments on experts systems domain from the semantic technologies perspective. Is it because both domains are disconnected (concepts-wise, tools-wise or otherwise) or because people from the experts systems domain don't see any value in semantic technologies? Or something else? A larger related question is what is the optimal strategy for integrating semantic technologies with / into AI systems (except for real-time AI, e.g., autonomous driving, where semantic approach is most likely not feasible performance-wise).
- p_l 7y agoExpert systems are AI. (and some of us are salty about statistics creeping overreach on terminology). It seems to me that HN might not be too frequented hy people who work with symbolic AI, but expert systems and semantic tools are very, very deeply connected. In fact, semantic technologies are derived from work on expert systems, and using JESS with RDF store was part of my coursework at university.