L13-15. Term project(期末課題) A recipe recommendation system (レシピお勧めシステム) (満点:30点) RecipeRecommendation.java recipes.data materialsWm.data 1 期末課題(1) レシピお勧めシステム – 冷蔵庫にある素材 facts in wm (materialsWM.data) – レシピはruleである http://www.ajinomoto.co.jp/recipe/ 例: • オムライス (ご飯、玉ねぎ、ハム、卵、トマトケチャップ、グリンピース)、 • オムライスカレーソース添え (オムライス、カレールートマト、パセリ)) rules in a rule base (recipes.data) 2 期末課題(2) レシピお勧めシステム – 個人の好き嫌いによっておすすめする – メニューの情報や個人の健康状態によって おすすめする (optional) – Backward chaining(後向き推論)で、冷蔵庫にあ る素材から好きな料理が作れるかどうかを証明 する。もしつくれない場合は足りない材料を出力 する。 3 期末課題 (30p) • CheckPointⅠ(15p) – レシピは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クラスのカロリーや塩分の情報と、個人情報(健 康状態)の二つから最終的におすすめのランキングを 表示 – 例えばダイエット中である人の場合、カロリーの少ない順に おすすめメニューを表示するなど 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; import java.util.*; 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); } 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 // 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); } } Key Output: Key: ABC Val: abc Key: MNO Val: mno Key: XYZ Val: xyz 9 Rule-base System Examples rule if then "CarRule1" "?x is inexpensive" "?x is made in Japan" antecedents class WorkingMemory { Vector assertions; name rule if then "CarRule4" "?x is big" "?x needs a lot of gas" "?x is a foreign car" WorkingMemory(){ assertions = new Vector(); } ……. class RuleBase { String fileName; class Rule { WorkingMemory wm; String name; Vector rules; Vector antecedents; RuleBase(){ String consequent; fileName = “ex10/CarShop.data"; Rule(String theName,Vector theAntecedents, wm = new WorkingMemory(); String theConsequent){ wm.addAssertion("my-car is inexpensive"); this.name = theName; wm.addAssertion("my-car is a wagon"); this.antecedents = theAntecedents; rules = new Vector(); this.consequent = theConsequent; loadRules(fileName); } } public void addAssertion(String theAssertion){ consequent System.out.println("ADD:"+theAssertion); assertions.addElement(theAssertion); } 10 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: 214: 215: antecedents.addElement(st.sval); st.nextToken(); } 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:} 11 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). 12
© Copyright 2024 ExpyDoc