int top = 30; int bottom = 250; public static void main(string args[]) { rb = new RuleBase(); rb.forwardchain(); public void init() { setlayout(null);

Similar documents
JButton b = new JButton(" "); JTextArea ta = new JTextArea(); JScrollPane sp1 = new JScrollPane(li); JScrollPane sp2 = new JScrollPane(ta); int width

目 次 Java GUI 3 1 概要 クラス構成 ソースコード例 課題...7 i

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

1 Java Java GUI , 2 2 jlabel1 jlabel2 jlabel3 jtextfield1 jtextfield2 jtextfield3 jbutton1 jtextfield1 jtextfield2 jtextfield3

新・明解Java入門

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

K227 Java 2

GUIプログラムⅤ

Java演習(4) -- 変数と型 --

6 p.1 6 Java GUI GUI paintcomponent GUI mouseclicked, keypressed, actionperformed mouseclicked paintcomponent thread, 1 GUI 6.0.2, mutlithread C

public class Kadai _02 { public static void main(string[] args) { MyFrame frame = new MyFrame("Kadai _02"); (2) フレームのクラス名は MyFrame とし 以下

Microsoft PowerPoint ppt

Java講座

文字列操作と正規表現

Microsoft Word - NonGenList.doc

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

public class MyFrame { private JPanel panel1; private JPanel panel2; private JPanel panel3; private JPanel panel4; private JLabel label1; private JTex

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

5 p Point int Java p Point Point p; p = new Point(); Point instance, p Point int 2 Point Point p = new Point(); p.x = 1; p.y = 2;

I. (i) Java? (A). 2Apples (B). Vitamin-C (C). Peach21 (D). Pine_Apple (ii) Java? (A). Java (B). Java (C). Java (D). JavaScript Java JavaScript Java (i

8 if switch for while do while 2

オブジェクト指向プログラミング・同演習 5月21日演習課題

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

ALG ppt

untitled

2

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Microsoft Word - NonGenTree.doc

GUIプログラムⅣ

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

JavaプログラミングⅠ


(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

人工知能入門

JavaプログラミングⅠ

PowerPoint Presentation

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Animals サンプル Step3 張り付けた動物の上をクリックすると それぞれの鳴き声で鳴く その鳴く間 一定時間 ( ここでは 1 秒間 ) 画像が別のものに変わる <アニメーションの基礎 : タイマーについて> アニメーションは アプリケーションが指定する間 一定間隔でどんどん画像をおきかえ

< F2D B838A835882CC8CF68EAE2E6A7464>

I HTML HashMap (i) (ii) :.java import java.net.*; import java.io.*; import java.util.hashmap; public class SimpleStopWatch { public static voi

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

問題1 以下に示すプログラムは、次の処理をするプログラムである

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

問題1 以下に示すプログラムは、次の処理をするプログラムである

< F2D F B834E2E6A7464>

応用プログラミング 2004/11/23 データの入出力 データの入出力データをキーボードからコンピュータに入力することや CRT に表示すること, さらにハードディスク (HDD) や MO などに保存されているファイルからデータをコンピュータに読み込むことや ( 逆に ) データをこれらの装置に

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

55 7 Java C Java TCP/IP TCP/IP TCP TCP_RO.java import java.net.*; import java.io.*; public class TCP_RO { public static void main(string[] a

< F2D834F838C A815B A CC>

Microsoft PowerPoint - prog13.ppt

アルゴリズムとデータ構造1

Prog1_15th

次の演習課題(1),(2)のプログラムを完成させよ

Java 2 - Lesson01

JavaプログラミングⅠ

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

I 4 p.2 4 GUI java.awt.event.* import /* 1 */ import mouseclicked MouseListener implement /* 2 */ init addmouselistener(this) this /* 3 */ this mousec

JavaプログラミングⅠ

InputStreamReader は, 入力ストリーム ( 端末 ) からのバイト入力を文字に変換する クラス BufferedReader は, 文字入力ストリームからの入力をバッファリングし, メソッド readline による行単位での入力処理を可能とする 設問プログラム中のに入れる正しい答

グラフの探索 JAVA での実装

リファレンス,配列 例外処理


GEC-Java

PowerPoint Presentation

データ構造とアルゴリズム論

GUIプログラムⅡ

2

基本情報STEP UP演習Java対策

Thread

Microsoft PowerPoint - prog13.ppt

JAVA とテンプレート

Java言語 第1回

プログラミングA

3 p.1 3 Java Java Java try catch C Java if for while C 3.1 boolean Java if C if ( ) 1 if ( ) 1 else , 2 { } boolean true false 2 boolean Gr

< F2D82B682E182F182AF82F12E6A7464>

......() JButton

Java学習教材

ソフトウェア基礎演習 課題

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

< F2D825282CC947B909482CC A815B83682E6A>

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

I. (i) Foo public (A). javac Foo.java java Foo.class (C). javac Foo java Foo (ii)? (B). javac Foo.java java Foo (D). javac Foo java Foo.class (A). Jav

2 static final int DO NOTHING ON CLOSE static final int HIDE ON CLOSE static final int DISPOSE ON CLOSE static final int EXIT ON CLOSE void setvisible

226

Microsoft PowerPoint - prog12.ppt

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

Object MenuComponent MenuBar MenuItem Menu CheckboxMenuItem

ohp07.dvi

< F2D B825082CC96E291E82E6A7464>

ガイダンス

< F2D82518CC282CC D2E6A7464>

r02.dvi

ohp02.dvi

Transcription:

import java.util.; import java.awt.flowlayout; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.io.; import javax.swing.japplet; import javax.swing.jbutton; import javax.swing.jlabel; import javax.swing.jlist; import javax.swing.joptionpane; import javax.swing.jpanel; import javax.swing.jscrollpane; import javax.swing.jtextarea; / RuleBaseSystem / public class RuleBaseSystem extends JApplet implements ActionListener { static RuleBase rb; JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); String[] s = { "my-car is inexpensive", "my-car is expensive", "my-car is small", "my-car is big", "my-car needs a lot of gas", "my-car is a hybrid car", "my-car has Toyota's logo", "my-car has Honda's logo", "my-car is a popular car", "my-car has a VTEC engine", "my-car has a big engine", "my-car has several seats", "my-car has only 2 seats", "my-car is a wagon", "my-car is a sports car", "my-car has several color models", "my-car is red", "my-car is stylish", "my-car is a good face", "my-car has an aluminium body" ; JLabel la = new JLabel(" ルールベースシステム "); JList li = new JList(s); JButton b = new JButton(" "); JTextArea ta = new JTextArea(); JScrollPane sp1 = new JScrollPane(li); JScrollPane sp2 = new JScrollPane(ta); int width = 600;

int top = 30; int bottom = 250; public static void main(string args[]) { rb = new RuleBase(); rb.forwardchain(); public void init() { setlayout(null); setsize(width, top + bottom); p1.setlayout(new FlowLayout()); p1.add(la); p1.setbounds(0, 0, width, top); p2.setlayout(new GridLayout(1, 3)); p2.add(sp1); b.addactionlistener(this); p2.add(b); p2.add(sp2); p2.setbounds(0, top, width, bottom); add(p1); add(p2); @Override public void actionperformed(actionevent arg0) { if (li.getselectedindex() == -1) JOptionPane.showMessageDialog(null, " 何も選択されていません "); else { rb = new RuleBase(li.getSelectedValues()); printresult((rb.forwardchain())); public void printresult(string result) { StringTokenizer st = new StringTokenizer(result, ",[]"); String s = ""; while (st.hasmoretokens()) s += st.nexttoken() + "\n"; ta.settext(s);

/ ワーキングメモリを表すクラス. / class WorkingMemory { ArrayList<String> assertions; WorkingMemory() { assertions = new ArrayList<String>(); / マッチするアサーションに対するバインディング情報を返す ( 再帰的 ) @param 前件を示す ArrayList @return バインディング情報が入っている ArrayList / public ArrayList<HashMap<String, String>> matchingassertions( ArrayList<String> theantecedents) { // 複数の変数の束縛を保存する ArrayList<HashMap<String, String>> bindings = new ArrayList<HashMap<String, String>>(); return matchable(theantecedents, 0, bindings); private ArrayList<HashMap<String, String>> matchable( ArrayList<String> theantecedents, int n, ArrayList<HashMap<String, String>> bindings) { // 全ての前件に対してチェックが終わったら if (n == theantecedents.size()) { return bindings; // 1 回目 else if (n == 0) { boolean success = false;

for (int i = 0; i < assertions.size(); i++) { // 変数の束縛を保存するハッシュマップ HashMap<String, String> binding = new HashMap<String, String>(); if ((new Matcher()).matching(theAntecedents.get(n), assertions.get(i), binding)) { bindings.add(binding); success = true; if (success) { return matchable(theantecedents, n + 1, bindings); else { return null; else {//add your source code by using ArrayList and HashMap boolean success = false; ArrayList<HashMap<String, String>> newbindings = new ArrayList<HashMap<String, String>>(); for (int i = 0; i < bindings.size(); i++) { for (int j = 0; j < assertions.size(); j++) { if ((new Matcher()).matching(theAntecedents.get(n), assertions.get(j), bindings.get(i))) { newbindings.add(bindings.get(i)); success = true; if (success) { return matchable(theantecedents, n + 1, newbindings); else { return null;

/ アサーションをワーキングメモリに加える. @param アサーションを表す String / public void addassertion(string theassertion) { System.out.println("ADD:" + theassertion); assertions.add(theassertion); / 指定されたアサーションがすでに含まれているかどうかを調べる. @param アサーションを表す String @return 含まれていれば true, 含まれていなければ false / public boolean contains(string theassertion) { return assertions.contains(theassertion); / ワーキングメモリの情報をストリングとして返す. @return ワーキングメモリの情報を表す String / public String tostring() { return assertions.tostring(); / ルールベースを表すクラス. / class RuleBase { String filename;

FileReader f; StreamTokenizer st; WorkingMemory wm; ArrayList<Rule> rules; RuleBase() { // ファイルのパス filename = "src/reasoning/carshop.data"; // ワーキングメモリーの生成 wm = new WorkingMemory(); wm.addassertion("my-car is inexpensive"); wm.addassertion("my-car has a VTEC engine"); wm.addassertion("my-car is stylish"); wm.addassertion("my-car has several color models"); wm.addassertion("my-car has several seats"); wm.addassertion("my-car is a wagon"); rules = new ArrayList<Rule>(); loadrules(filename); / コンストラクタ @param assertion リストで選ばれた状態の一覧 / public RuleBase(Object[] assertion) { // ファイルのパス filename = "reasoning/carshop.data"; // ワーキングメモリーの生成 wm = new WorkingMemory(); for (int i = 0; i < assertion.length; i++) // String 型に直して追加 wm.addassertion(string.valueof(assertion[i])); rules = new ArrayList<Rule>(); // ルールの読み込み loadrules(filename); /

前向き推論を行うためのメソッド / public String forwardchain() { boolean newassertioncreated; // 新しいアサーションが生成されなくなるまで続ける. do { newassertioncreated = false; //add your source code by using ArrayList and HaspMap for (int i = 0; i < rules.size(); i++) { Rule arule = rules.get(i); System.out.println("apply rule:" + arule.getname()); ArrayList<String> antecedents = arule.getantecedents(); String consequent = arule.getconsequent(); ArrayList<HashMap<String, String>> bindings = wm.matchingassertions(antecedents); if (bindings!= null) { for (int j = 0; j < bindings.size(); j++) { // 後件をインスタンシエーション String newassertion = instantiate((string) consequent, bindings.get(j)); // ワーキングメモリーになければ成功 if (!wm.contains(newassertion)) { System.out.println("Success: " + newassertion); wm.addassertion(newassertion); newassertioncreated = true; System.out.println("Working Memory" + wm); while (newassertioncreated); System.out.println("No rule produces a new assertion"); return wm.tostring(); private String instantiate(string thepattern, HashMap thebindings) { String result = new String(); StringTokenizer st = new StringTokenizer(thePattern); for (int i = 0; i < st.counttokens();) {

String tmp = st.nexttoken(); if (var(tmp)) { result = result + " " + (String) thebindings.get(tmp); else { result = result + " " + tmp; return result.trim(); private boolean var(string str1) { // 先頭が? なら変数 return str1.startswith("?"); / ルールを読み込むメソッド @param thefilename ファイルの名前 / private void loadrules(string thefilename) { String line; try { int token; f = new FileReader(theFileName); st = new StreamTokenizer(f); // ファイルを読み終わるまで続ける while ((token = st.nexttoken())!= StreamTokenizer.TT_EOF) { // 読み込んだものによって処理を変える switch (token) { // 文字 case StreamTokenizer.TT_WORD: // 各変数の初期化 String name = null; ArrayList<String> antecedents = null; String consequent = null; // 読み込んだ部分が "rule" のとき if ("rule".equals(st.sval)) { // 次に進める

st.nexttoken(); // ルールの名前を name に保存 name = st.sval; // 次に進める st.nexttoken(); // 読み込んだ部分が "if" のとき if ("if".equals(st.sval)) { antecedents = new ArrayList<String>(); st.nexttoken(); // 前件は複数ある場合があるので "then" と一致する まで保存する while (!"then".equals(st.sval)) { antecedents.add(st.sval); st.nexttoken(); // 同じように後件の保存 if ("then".equals(st.sval)) { st.nexttoken(); consequent = st.sval; // ルールの生成 rules.add(new Rule(name, antecedents, consequent)); break; // 文字以外 ( 数字とか改行とか ) default: System.out.println(" エラー?" + token); break; catch (Exception e) { System.out.println(e); // ルールの表示 for (int i = 0; i < rules.size(); i++) { System.out.println(rules.get(i).toString());

/ ルールを表すクラス. / class Rule { // 名前 String name; // 前件 ArrayList<String> antecedents; // 後件 String consequent; // コンストラクタ Rule(String thename, ArrayList<String> theantecedents, String theconsequent) { this.name = thename; this.antecedents = theantecedents; this.consequent = theconsequent; / ルールの名前を返す. @return 名前を表す String / public String getname() { return name; / ルールを String 形式で返す @return ルールを整形した String / public String tostring() { return name + " " + antecedents.tostring() + "->" + consequent; / ルールの前件を返す. @return 前件を表す ArrayList

/ public ArrayList<String> getantecedents() { return antecedents; / ルールの後件を返す. @return 後件を表す String / public String getconsequent() { return consequent; class Matcher { StringTokenizer st1; StringTokenizer st2; HashMap<String, String> vars; Matcher() { vars = new HashMap<String, String>(); public boolean matching(string string1, String string2, HashMap<String, String> bindings) { this.vars = bindings; return matching(string1, string2); public boolean matching(string string1, String string2) { // 同じなら成功 if (string1.equals(string2)) return true; // 各々トークンに分ける st1 = new StringTokenizer(string1); st2 = new StringTokenizer(string2); // 数が異なったら失敗

if (st1.counttokens()!= st2.counttokens()) return false; // 定数同士 for (int i = 0; i < st1.counttokens();) { if (!tokenmatching(st1.nexttoken(), st2.nexttoken())) { // トークンが一つでもマッチングに失敗したら失敗 return false; // 最後まで O.K. なら成功 return true; boolean tokenmatching(string token1, String token2) { if (token1.equals(token2)) return true; if (var(token1) &&!var(token2)) return varmatching(token1, token2); if (!var(token1) && var(token2)) return varmatching(token2, token1); return false; boolean varmatching(string vartoken, String token) { if (vars.containskey(vartoken)) { if (token.equals(vars.get(vartoken))) { return true; else { return false; else { vars.put(vartoken, token); return true; boolean var(string str1) { // 先頭が? なら変数

return str1.startswith("?");