L11. An Example of Backward Chaining Program in Java

Slides:



Advertisements
Similar presentations
マルチスレッド処理 (II) Multithreading
Advertisements

アルゴリズムとデータ構造 2012年6月27日
プログラミング基礎I(再) 山元進.
アルゴリズムとデータ構造 2013年6月18日
アルゴリズムとデータ構造1 2005年7月8日
五段動詞の歌 ごだんどうしのうた.
Chapter 11 Queues 行列.
Ex7. Search for Vacuum Problem
アルゴリズムとデータ構造 2010年7月5日
Ex8. Search for Vacuum Problem(2)
とても使いやすい Boost の serialization
とても使いやすい Boost の serialization
プログラミング基礎I(再) 山元進.
プログラムの正当性(2) 正当性証明の基本原理
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとデータ構造 2012年6月14日
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
日本人の英語文章の中で「ENJOY」はどういうふうに使われているのか
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
第20章 Flyweight ~同じものを共有して無駄をなくす~
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
大岩 元 慶応大学環境情報学部 二分木 データ構造とプログラミング(10) 大岩 元 慶応大学環境情報学部
アルゴリズムとデータ構造 2011年6月14日
アルゴリズムとデータ構造 2011年6月20日
“You Should Go To Kyoto”
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
プログラミング言語入門 手続き型言語としてのJava
JAVA入門後期⑩ 情報処理試験例題解説.
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
アルゴリズムとデータ構造1 2006年7月4日
1 T 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H
アルゴリズムとプログラミング (Algorithms and Programming)
L Term project(期末課題) A recipe recommendation system (レシピお勧めシステム) (満点:30点) RecipeRecommendation.java recipes.data materialsWm.data.
Collection, Generics, Iterator
Term paper, Report (1st, first)
My Favorite Movie I will introduce my favorite movie.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
Where is Wumpus Propositional logic (cont…) Reasoning where is wumpus
逐次プログラムの正当性(2) 帰納的アサーション法(フロイド法)
アルゴリズムとデータ構造1 2005年7月5日
もっと詳しくArrayクラスについて調べるには → キーワード検索
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
Ex7. Search for Vacuum Problem
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラムの正当性(2) 正当性証明の基本原理
2019/4/22 Warm-up ※Warm-up 1~3には、小学校外国語活動「アルファベットを探そう」(H26年度、神埼小学校におけるSTの授業実践)で、5年生が撮影した写真を使用しています(授業者より使用許諾済)。
アルゴリズムとデータ構造 2011年6月23日
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
論理的に推論 L4. Reasoning Logically Knowledge Representation (知識表現)
アルゴリズムとデータ構造1 2009年7月2日
Cluster EG Face To Face meeting
アルゴリズムとデータ構造 2012年6月25日
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2012年6月21日
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

L11. An Example of Backward Chaining Program in Java An Rule Base System in Java RuleBaseSystem.java CarShop.data

Reasoning with Rules Knowledge represented as if-then rules Backward chain To prove a conclusion  from the known facts and knowledge (rules)

Major Elements A rule base A fact base Inference engine The set of if-then rules A fact base Known facts Inference engine Containing the reasoning logic used to process the rules and data

Backward Chaining IF 食欲が無い THEN 食事をしていない 熱がある 食欲が無い ワーキングメモリの中 (事前知識) (患者から得られた事実情報) IF 食事をしていない THEN 栄養が足りない IF 熱がある 栄養が足りない THEN 風邪を引く 風邪を引いている

A Rule-base System Architecture class RuleBaseSystem{} Rule Base Class FileManager Fact base class RuleBase{} In a file class Rule{} Interaction with Inference Engine Matching class Unifier{} Fire a Rule Select a Rule Acting

Backward Chaining 初期状態でワーキングメモリに以下の「事実」が入っているとします my-car is inexpensive my-car has a VTEC engine my-car is stylish my-car has several color models my-car has several seats my-car is a wagon

rule    "CarRule1" if      "?x is inexpensive" then    "?x is made in Japan" Rule   "CarRule2" if      "?x is small" rule     "CarRule3" If      "?x is expensive" then     "?x is a foreign car" rule     "CarRule4" if      "?x is big"        "?x needs a lot of gas" then    "?x is a foreign car" Rule    "CarRule5" If      "?x is made in Japan"        "?x has Toyota's logo" then     "?x is a Toyota" rule     "CarRule6" if       "?x is made in Japan"        "?x is a popular car" Then    "?x is a Toyota" rule    "CarRule7" if      "?x is made in Japan"      "?x has Honda's logo" then    "?x is a Honda" rule    "CarRule8"       "?x has a VTEC engine" rule    "CarRule9" if      "?x is a Toyota"       "?x has several seats"       "?x is a wagon" then   "?x is a Carolla Wagon" rule    "CarRule10"       "?x is a hybrid car" then   "?x is a Prius" rule    "CarRule11" if      "?x is a Honda"       "?x is stylish"       "?x has several color models" then   "?x is an Accord Wagon" rule "CarRule12" if "?x is a Honda"      "?x has an aluminium body" "?x has only 2 seats" then "?x is a NSX" rule "CarRule13" if "?x is a foreign car" "?x is a sports car" "?x is stylish"      "?x has several color models" "?x has a big engine" then  "?x is a Lamborghini Countach" rule "CarRule14" if "?x is a foreign car" "?x is red" then "?x is a Ferrari F50" rule "CarRule15" "?x is a good face" then "?x is a Jaguar XJ8"

Backward Chaining (アコードワゴンである?xは何ですか?) ここでは ?x is an Accord Wagon? という仮説を証明したいと思います。 (これを仮説というかは微妙ですが・・・)

Backward Chaining

Rule-base System Examples (2) public class RuleBaseSystem { static RuleBase rb; static File Manager fm; public static void main(String args[]){ fm = new FileManager(); Vector rules = fm.loadRules("ex11/CarShop.data"); Vector wm = fm.loadWm("ex11/CarShopWm.data"); rb = new RuleBase(rules,wm); StringTokenizer st = new StringTokenizer(args[0],","); Vector queries = new Vector(); for (int i = 0 ; i < st.countTokens();) { queries.addElement(st.nextToken()); } rb.backwardChain(queries); public void backwardChain(Vector hypothesis){ System.out.println("Hypothesis:"+hypothesis); Vector orgQueries = (Vector)hypothesis.clone(); Hashtable binding = new Hashtable(); if (matchingPatterns(hypothesis,binding)){ System.out.println("Yes"); System.out.println(binding); for (int i = 0 ; i < orgQueries.size() ; i++){ String aQuery = (String)orgQueries.elementAt(i); String anAnswer = instantiate(aQuery,binding); System.out.println("Query: "+aQuery); System.out.println("Answer:"+anAnswer); } } else { System.out.println("No");

Backward Chainingのプログラム Rule Baseクラス - matchingPatterns() public class RuleBase implements Serializable { ・・・ private boolean matchingPatterns(Vector thePatterns, Hashtable theBinding) { String firstPattern; if (thePatterns.size() == 1) { firstPattern = (String) thePatterns.elementAt(0); if (matchingPatternOne(firstPattern, theBinding, 0) != -1) { return true; } else { return false; } } else{ … 仮説の数が一つならば、その仮説とワーキングメモリ中の「事実」及びルールベース中のルールの後件部とのマッチングを行う。 仮説の数が二つ以上の場合の処理は自分で見て理解してみて下さい。

Backward Chainingのプログラム Rule Baseクラス - matchingPatternsOne() public class RuleBase implements Serializable { ・・・ private int matchingPatternOne(String thePattern, Hashtable theBinding, int cPoint) { if (cPoint < wm.size()) { // WME(Working Memory Elements) と Unify してみる. for (int i = cPoint; i < wm.size(); i++) { if ((new Unifier()).unify(thePattern, (String) wm.elementAt(i), theBinding)) { … return i + 1; } if (cPoint < wm.size() + rules.size()) { // Ruleと Unify してみる. for (int i = cPoint; i < rules.size(); i++) { Rule aRule = rename((Rule) rules.elementAt(i)); // 元のバインディングを取っておく. Hashtable orgBinding = new Hashtable(); if ((new Unifier()).unify(thePattern, (String) aRule.getConsequent(), theBinding)) { // さらにbackwardChaining Vector newPatterns = (Vector) aRule.getAntecedents(); if (matchingPatterns(newPatterns, theBinding)) { return wm.size() + i + 1; } else { // 失敗したら元に戻す. theBinding.clear(); for (Enumeration e = orgBinding.keys(); e.hasMoreElements();) { String key = (String) e.nextElement(); String value = (String) orgBinding.get(key); theBinding.put(key, value); ワーキングメモリ中の事実とマッチングする。もし成功すればマッチした事実の次の順番を表す数字を返す。 ワーキングメモリ中の事実とマッチしなければ、今度はルールベース中のルールの後件部とマッチングを行う。 もし成功すれば、マッチしたルールの前件部を新たな仮説としてbackwardChainingを行う。 成功すればマッチしたルールの次の順番を表す番号を返し、不成功の場合は変数束縛情報表をマッチングの前の状態に戻す(バックトラック)

Hypothesis:[?x is an Accord Wagon] Success RULE Rule:CarRule11 [?x10 is a Honda, ?x10 is stylish, ?x10 has several color models, ?x10 has several seats, ?x10 is a wagon]->?x10 is an Accord Wagon <=> ?x is an Accord Wagon Rule:CarRule7 [?x17 is made in Japan, ?x17 has Honda's logo]->?x17 is a Honda <=> ?x10 is a Honda Rule:CarRule1 [?x18 is inexpensive]->?x18 is made in Japan <=> ?x17 is made in Japan Success WM his-car is inexpensive <=> ?x18 is inexpensive Success:?x17 is made in Japan Rule:CarRule8 [?x37 is made in Japan, ?x37 has a VTEC engine]->?x37 is a Honda <=> ?x10 is a Honda Rule:CarRule1 [?x38 is inexpensive]->?x38 is made in Japan <=> ?x37 is made in Japan his-car is inexpensive <=> ?x38 is inexpensive Success:?x37 is made in Japan his-car has a VTEC engine <=> ?x37 has a VTEC engine Success:?x10 is a Honda his-car is stylish <=> ?x10 is stylish Success:?x10 is stylish his-car has several color models <=> ?x10 has several color models Success:?x10 has several color models his-car has several seats <=> ?x10 has several seats Success:?x10 has several seats his-car is a wagon <=> ?x10 is a wagon Yes {?x38=his-car, ?x37=his-car, ?x=his-car, ?x10=his-car} Query: ?x is an Accord Wagon Answer:his-car is an Accord Wagon

Exercises: 1. Input RuleBaseSystem Exercises: 1. Input RuleBaseSystem.java, understand it, run the program, and check the output. 2. (optional) Make some modifications to RuleBaseSystem.java ( data file names: fasterRun.data, rules fasterRunWm.data, the initial known facts) so that the program can run for the following case.

Backward chaining example 1. Pig(y) Slug(z)  Faster(y,z) 2. Slimy(z)  Creep(z)  Slug(z) 3. Pig(Pat) 4. Slimy(Steve) 5. Creep(Steve) 徐行 粘液性の Goal: to prove Faster(Pat, Steve) 1. {y/Pat, z/Steve} Pig(Pat) Slug(z) 3. {} 2. {z/Steve} Slimy(Steve) Creep(Steve) 4. {} 5. {}

Output: Hypothesis:[Pat is Faster than Steve] Success RULE Rule:f1 [?y0 is Pig, ?z0 is Slug]->?y0 is Faster than ?z0 <=> Pat is Faster than Steve Success WM Pat is Pig <=> ?y0 is Pig Success:?y0 is Pig Rule:f2 [?y2 is Slimy, ?z2 is Creep]->?z2 is Slug <=> ?z0 is Slug Steve is Slimy <=> ?y2 is Slimy Success:?y2 is Slimy Steve is Creep <=> ?z2 is Creep Yes {?y2=Steve, ?z2=Steve, ?y0=Pat, ?z0=Steve} Query: Pat is Faster than Steve Answer:Pat is Faster than Steve