Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

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

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

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

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

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

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

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

9 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

10 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); }

11 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:}

12 Term Project A recipe recommendation system
Materials in a refrigerator  facts in wm (materialsWM.data) Recipes as rules 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).


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

Similar presentations


Ads by Google