Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>You're certainly not talking about 'scifi', but a lot falls outside the standard stuff software engineers are typically exposed to. I spent the last eight years building and using rule engines to do inference over semi-structured data in the retail world. </p> <p>Doing inference over data is a well established field. There are basically four classes of problems associated with this field:</p> <ul> <li>Knowledge acquisition (getting rules out of peoples heads and into the code/rules)</li> <li>Knowledge representation 'KR' (how to represent your data &amp; rules)</li> <li>Efficient pattern matching (matching a rule form a large ruleset against large number of facts/data)</li> <li>Inference / Reasoning (drawing further conclusions from rule matches, ie rules triggering more rules) </li> </ul> <p>For knowledge acquisition look at: <a href="http://en.wikipedia.org/wiki/Ripple_down_rules" rel="nofollow noreferrer">Ripple Down Rules</a> and Decision Trees, they go a long way and are easy to understand. Alternatively, the vast field <a href="http://en.wikipedia.org/wiki/Machine_learning" rel="nofollow noreferrer">Machine Learning</a> offer a variety of approaches to derive models from data.</p> <p>For knowledge representation look at <a href="http://en.wikipedia.org/wiki/Resource_Description_Framework" rel="nofollow noreferrer">RDF</a> and <a href="http://en.wikipedia.org/wiki/Web_Ontology_Language" rel="nofollow noreferrer">Owl</a>, and to a lesser degree <a href="http://en.wikipedia.org/wiki/Conceptual_graphs" rel="nofollow noreferrer">Conceptual Graphs</a>. In terms of expressiveness, RDF &amp; CG are roughly equivalent. The basic concept behind both is a serialisation independent graph (triple) representation of data. </p> <p>For pattern matching, the classic algorithm is <a href="http://en.wikipedia.org/wiki/Rete_algorithm" rel="nofollow noreferrer">Rete</a>, by Charles Forgy. </p> <p>For inference, there are two typical strategies: <a href="http://en.wikipedia.org/wiki/Forward_chaining" rel="nofollow noreferrer">Forward chaining</a> and <a href="http://en.wikipedia.org/wiki/Backward_chaining" rel="nofollow noreferrer">backward chaining</a>. Forward chaining is done over a ruleset like this:</p> <p>The data setup:</p> <pre><code> Rule 1: If A Then B Rule 2: If B Then C Facts: A </code></pre> <p>The execution:</p> <pre><code>Do { Newfacts = Eval(RuleSet, Facts) Facts = Facts + Newfacts } while (NewFacts.Count &gt; 0) </code></pre> <p>Feed the data A to this little algorithm, and you will 'infer' (discover) fact C, from the data, thanks to the rulebase. Note that there a a lot of gotchas with inference, especially around things like <a href="http://en.wikipedia.org/wiki/Non-monotonic_logic" rel="nofollow noreferrer">non-monotonic reasoning</a> (not just adding facts, but changing or removing facts, possibly giving rise to contradictions or loops in the inference). </p> <p>A simplistic and naive way to get some kind inference going would be to use a database and use joins to match up facts (statements). This may be enough for some applications. When it comes to reasoning, it's easy to get sucked into a world of complications and not-quite-there technologies. Keep it simple. </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload