L13-15. Term project(期末課題) A recipe recommendation system (レシピお勧めシステム) (満点:30点) RecipeRecommendation.java recipes.data materialsWm.data.

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

人工知能応用 term project. 提出について Submit a term-project report including the following items 1.Term project の説明 2.Where you put effort 3.Source program 4.Result.
プログラミング第5回 1 while ループ 文字列の操作
Essay writing rules for Japanese!!. * First ・ There are two directions you can write. ・よこがき / 横書き (same as we write English) ・たてがき / 縦書き (from right to.
VE 01 え form What is え form? え? You can do that many things with え form?
第11回Javaゼミ 11.1 ファイルとディレクト リ 11.2 文字ストリーム 11.3 バッファ付き文字スト リーム 2006/06/28 神津 健太.
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
~手続き指向からオブジェクト指向へ(Ⅰ)~
Ex7. Search for Vacuum Problem
と.
Ex8. Search for Vacuum Problem(2)
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング基礎I(再) 山元進.
JAVA.
Verb Plain Negativeform
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
独習Java ・ 12.1  インターネットアドレス ・ 12.2  サーバーソケットとソケット  12月 19日    小笠原 一恵.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
A 02 I like sushi! I like origami!
第20章 Flyweight ~同じものを共有して無駄をなくす~
Bridge Pattern
大岩 元 慶応大学環境情報学部 二分木 データ構造とプログラミング(10) 大岩 元 慶応大学環境情報学部
オブジェクト指向入門.
アルゴリズムとデータ構造 2011年6月20日
最短経路.
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
Unity, C# 移動するモデルの位置を 指定した位置へ自動修正
~手続き指向からオブジェクト指向へ[Ⅱ]~
第11回 アプリケーションの構成 ~CUI自動販売機の完成!~.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
アルゴリズムとデータ構造 2012年6月28日
アルゴリズムとデータ構造 2011年6月27日
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗号技術 ~JAVAプログラム③~ (7週目)
第3回 2007年4月27日 応用Java (Java/XML).
L11. An Example of Backward Chaining Program in Java
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
第11週:super/subクラス、継承性、メソッド再定義
アルゴリズムとプログラミング (Algorithms and Programming)
暗号技術 ~JAVAプログラム①~ (5週目)
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
「Webデータベースの構築技術」正誤表 ページ 項目 誤記 訂正 18 表1.4 アクセス 権限の削除 ・・・テーブル名 TO ユーザ名
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
逐次プログラムの正当性(2) 帰納的アサーション法(フロイド法)
クイズやゲーム形式で紹介した実例です。いずれも過去のインターン作です。
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
Ex7. Search for Vacuum Problem
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
オブジェクト・プログラミング 第8回.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
アルゴリズムとデータ構造 2013年7月1日
あいさつ.
アルゴリズムとデータ構造 2012年6月21日
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
7-3 サービスの連携 1.サービスとは 画面を持たずに処理を行う【AndroidManifest.xmlへの追加】 …
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

L13-15. Term project(期末課題) A recipe recommendation system (レシピお勧めシステム) (満点:30点) RecipeRecommendation.java recipes.data materialsWm.data

期末課題(1) レシピお勧めシステム  facts in wm (materialsWM.data) 冷蔵庫にある素材  facts in wm (materialsWM.data) レシピはruleであるhttp://www.ajinomoto.co.jp/recipe/  例: オムライス (ご飯、玉ねぎ、ハム、卵、トマトケチャップ、グリンピース)、 オムライスカレーソース添え (オムライス、カレールートマト、パセリ))     rules in a rule base (recipes.data)

期末課題(2) レシピお勧めシステム 個人の好き嫌いによっておすすめする メニューの情報や個人の健康状態によって おすすめする  おすすめする (optional) Backward chaining(後向き推論)で、冷蔵庫にある素材から好きな料理が作れるかどうかを証明する。もしつくれない場合は足りない材料を出力する。

期末課題 (30p) CheckPointⅠ(15p) CheckPointⅡ(10p) CheckPointⅢ(5p) レシピは10個以上(調味料は含まない) メニューを2個以上生成 CheckPointⅡ(10p) 好き嫌いによっておすすめメニューをランキング表示する CheckPointⅢ(5p) カロリーや塩分、個人情報(健康状態)からおすすめメニューをランキング表示する

Check Point Ⅰ ~メニューを2個以上完成させる~ Ruleだけでなく、WorkingMemoryファイルも別に作り読み込む 今回はloadRules(“recipe.data”)だけではなく、loadWm(“materialsWm.data”)といったものが必要となってくる キーワード FileReader

Check Point Ⅱ ~好き嫌いによっておすすめをランキング表示~ 好きなもの、嫌いなもののリストを自由につくり、それに応じて出来上がったメニューをランキング形式で並び替える キーワード Hashtable Vector

Check Point Ⅲ ~カロリーや塩分、個人情報(健康状態)からおすすめをランキング表示~ 新しいrecipeクラスで、getCalorie(), setCalorie(), getSalt(), setSalt(), などメニューの情報を追加・参照 別のpersonalクラスで個人情報(高血圧、ダイエット中など)の追加・参照(クラスでなくても可) recipeクラスのカロリーや塩分の情報と、個人情報(健康状態)の二つから最終的におすすめのランキングを表示 例えばダイエット中である人の場合、カロリーの少ない順におすすめメニューを表示するなど

Hashtable Ex4 RuleBaseSystem Ex11-12 Appendix -付録- (参照用) Hashtable  Ex4 RuleBaseSystem Ex11-12

An example: Sort Hashtable import java.util.Hashtable;  import java.util.Vector;  import java.util.Collections;  import java.util.Enumeration;    public class SortHashtable {      public static void main(String[] args) {      // Create and populate hashtable      Hashtable ht = new Hashtable();      ht.put("ABC", "abc");      ht.put("XYZ", "xyz");      ht.put("MNO", "mno");          // Sort hashtable.      Vector v = new Vector(ht.keySet());      Collections.sort(v);           // Display (sorted) hashtable.      for (Enumeration e = v.elements(); e.hasMoreElements();) {        String key = (String)e.nextElement();        String val = (String)ht.get(key);        System.out.println("Key: " + key + " Val: " + val);      }    }  } import java.util.*; Key Value ABC abc XYZ xyz MNO mno static voidsort(List list)      Sorts the specified list into ascending order, according to the natural ordering of its elements Output: Key: ABC Val: abc Key: MNO Val: mno Key: XYZ Val: xyz

Rule-base System Examples rule "CarRule1" if "?x is inexpensive" then "?x is made in Japan" antecedents class WorkingMemory { Vector assertions; WorkingMemory(){ assertions = new Vector(); } ……. name rule "CarRule4" if "?x is big" "?x needs a lot of gas" then "?x is a foreign car" consequent class RuleBase { String fileName; WorkingMemory wm; Vector rules; RuleBase(){ fileName = “ex10/CarShop.data"; wm = new WorkingMemory(); wm.addAssertion("my-car is inexpensive"); wm.addAssertion("my-car is a wagon"); rules = new Vector(); loadRules(fileName); } class Rule { String name; Vector antecedents; String consequent; Rule(String theName,Vector theAntecedents, String theConsequent){ this.name = theName; this.antecedents = theAntecedents; this.consequent = theConsequent; } public void addAssertion(String theAssertion){ System.out.println("ADD:"+theAssertion); assertions.addElement(theAssertion); }

loadRules method 193: private void loadRules(String theFileName){ 194: String line; 195: try{ 196: int token; 197: f = new FileReader(theFileName); 198: st = new StreamTokenizer(f); 199: while((token = st.nextToken())!= StreamTokenizer.TT_EOF){ 200: switch(token){ 201: case StreamTokenizer.TT_WORD: 202: String name = null; 203: Vector antecedents = null; 204: String consequent = null; 205: if("rule".equals(st.sval)){ 206: if(st.nextToken() == '"'){ 207: name = st.sval; 208: st.nextToken(); 209: if("if".equals(st.sval)){ 210: antecedents = new Vector(); 211: st.nextToken(); 212: while(!"then".equals(st.sval)){ 213: antecedents.addElement(st.sval); 214: st.nextToken(); 215: } 216: if("then".equals(st.sval)){ 217: st.nextToken(); 218: consequent = st.sval; 219: } 220: } 221: } 222: } 223: rules.addElement( 224: new Rule(name,antecedents,consequent)); 225: break; 226: default: 227: System.out.println(token); 228: break; 229: } 230: } 231: } catch(Exception e){ 232: System.out.println(e); 233: } 234: for(int i = 0 ; i < rules.size() ; i++){ 235:System.out.println(((Rule)rules.elementAt(i)).toString()); 236: } 237: } 238:}

Term Project A recipe recommendation system Materials in a refrigerator  facts in wm (materialsWM.data) Recipes as rules http://www.ajinomoto.co.jp/recipe/ e.g. * Omelet rice (Rice, Onion, Ham, Egg, Tomato, Green peas) * Curry sauce omelet rice (Omelet Rice, Curry root, Tomato, Parsely)     rules in a rule base (recipe.data) Personal preference (like, dislike food) Personal health condition (calories, salt amount) (Optional) Use backward chaining method to prove the recipe you like if it is ok to cook (whether you have materials or not).