Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

‫‪12/4/2017‬‬ ‫‪52 S.

P‬‬ ‫قسم الذكاء الصنعي‬

‫عدد الصفحات‪4 :‬‬ ‫المهندسة‪ :‬ناديا البقاعي‬ ‫المحاضرة‪4 :‬‬ ‫عملي نظم قواعد المعرفة‬

‫‪‬‬
‫‪‬‬

‫تعرفنا في السنة الماضية على ‪ Prolog‬الذي كان يعمل بمبدا ‪( Backward Chaining‬والتي كانت تنطلق من الهدف وتبحث عن‬
‫اهداف جزئية حتى الوصول للحقائق) اما ‪ Jess‬فهو يعمل بمبدا ‪( Forward Chaining‬ينطلق من الحقائق ويطبق القواعد لتوسيع‬
‫قاعدة المعرفة حتى عدم إمكانية تطبيق اي قاعدة) اي انه يطبق كل القواعد التي تتحقق فيها الـ‪. LHS‬‬
‫ً‬
‫مثال‪ :‬لدينا البرنامج التالي ولدينا الحقائق ‪ A,B‬معرفة‪:‬‬
‫))‪(assert (A‬‬
‫))‪(assert (B‬‬ ‫‪ WM‬قبل التنفيذ‬
‫‪(defrule test‬‬ ‫‪f-0‬‬ ‫)‪(MAIN::A‬‬
‫)‪(A‬‬ ‫‪f-1‬‬ ‫)‪(MAIN::B‬‬
‫)‪(B‬‬ ‫‪For a total of 2 facts in module MAIN.‬‬
‫>=‬
‫))‪(assert (C‬‬ ‫‪ WM‬بعد التنفيذ‬
‫)‬ ‫‪f-0‬‬ ‫)‪(MAIN::A‬‬
‫)‪(facts‬‬ ‫‪f-1‬‬ ‫)‪(MAIN::B‬‬
‫‪f-2‬‬ ‫)‪(MAIN::C‬‬
‫)‪(run‬‬
‫‪For a‬‬ ‫‪total of 3 facts in module MAIN.‬‬
‫)‪(facts‬‬

‫يقوم ‪ Jess‬عند استدعاء المر )‪ (run‬بتطبيق القاعدة الولى ‪ test‬والتي تضيف إلى ‪ WM‬الحقيقة ‪.C‬‬
‫امثلة على الـ‪: Backward Chaining‬‬
‫‪ ‬المريض ل يتوقع منه ان يعطي كافة العراض للدكـتور لتوصيف المرض‪ ،‬فهنا وظيفة الدكـتور السؤال عن العراض التي يشك‬
‫بانها لمرض معين‪ ،‬وعلى المريض إعطاء العراض (الحقائق) اي انها ستوجد عند الطلب‪.‬‬
‫‪ ‬نظام لشركة تجارية يقدم بعض الحسومات مع كل سلعة مشتراة‪ .‬النظام ليس بحاجة لمعرفة اسعار كل السلع‪ ،‬إنما فقط التي‬
‫يطلبها الزبون (فمن غير المعقول جلب قاعدة بيانات السعار كاملة من اجل حسم على قطعة معينة)‪.‬‬
‫وهذا غير محقق في الـ ‪ Forward Chaining‬وإنما فقط في الـ‪. Backward Chaining‬‬

‫الصفحة | ‪1‬‬ ‫‪Binary Team‬‬


‫مثال‪ :‬لتكن لدينا مجموعة القواعد الممثلة بالبيان التالي‪:‬‬

‫ً‬
‫فمثال نريد التاكد من تحقق ‪:I‬‬
‫‪ ‬في الـ ‪ Backward Chaining‬يجب ان نتاكد من تحقق ‪( H,G‬اهداف جزئية)‪ ،‬وللتاكد من ‪ G‬يجب التحقق من ‪ D‬او ‪ F‬وهكذا‬
‫للوصول إلى الوراق‪.‬‬
‫‪ ‬في الـ ‪ Forward Chaining‬فإنها تبدا من الوراق المحققة(الحقائق) للوصول إلى الهدف‪.‬‬
‫نبدا بكـتابة القواعد السابقة في ‪ Jess‬بطريقة ‪( Forward Chaining‬الشكل العادي للقواعد في ‪: )Jess‬‬

‫‪(defrule r1‬‬ ‫حل المثال السابق ً‬


‫كامال بـ ‪ Forward Chaining‬موجود في الملحق المرفق‬
‫)‪(Goal A‬‬
‫>=‬ ‫بالمحاضرة (‪.)example1.clp‬‬
‫))‪(assert (Goal B‬‬
‫)‬
‫نجد انه عند إضافة الحقائق )‪ (Goal A)، (Goal C)،(Goal H‬وإضافة تعليمة )‪ (run‬فإن ‪ Jess‬سيبدا بتطبيق القواعد السابقة ً‬
‫ابتداء‬
‫من الحقائق البتدائية ‪ ،H,C,A‬وكل مرة يطبق فيها قاعدة يقوم بإضافة الحقيقة في ‪ RHS‬إلى ‪.WM‬‬
‫مالحظة‪ Jess :‬ل يدعم بشكل مباشر ‪ ،Backward Chaining‬إنما نحن من نقوم بإضافة قواعد تساعده على القيام بالتحويل‪.‬‬

‫الصفحة | ‪2‬‬ ‫‪Binary Team‬‬


‫التحويل إلى ‪:Backward‬‬
‫‪ ‬نقوم بإضافة التعليمة > 𝑒𝑚𝑎𝑛 𝑒𝑡𝑎𝑙𝑝𝑚𝑒𝑡 < 𝑔𝑛𝑖𝑛𝑖𝑎‪𝑑𝑜 − 𝑏𝑎𝑐𝑘𝑤𝑎𝑟𝑑 − 𝑐ℎ‬‬
‫حيث ‪ template name‬ممكن ان تكون حقائق ‪ ordered‬او ‪ unordered‬ستضاف إلى ‪ WM‬فيما بعد‪.‬‬
‫بعد إضافة هذه التعليمة سيتعرف ‪ Jess‬على القواعد التي تحتوي في طرفها اليساري )‪ (LHS‬على )‪ (patterns‬من الـ‪template‬‬
‫المحددة وسيقوم بشكل تلقائي إضافة حقائق على شكل 𝑟𝑎𝑉 > 𝑒𝑚𝑎𝑛 𝑒𝑡𝑎𝑙𝑝𝑚𝑒𝑡 <‪𝑛𝑒𝑒𝑑−‬‬
‫‪ ‬لمعالجة القواعد التي تبدا بـ‪ need‬نضيف قواعد اخرى مثل ‪:‬‬
‫‪(defrule r1-back‬‬
‫)‪(need-Goal B‬‬
‫>=‬
‫))‪(assert (Proof A‬‬
‫وهذا ما كنا نريده من ‪ Jess‬اي إذا كنت تريد ‪ B‬فبرهن وجود ‪A‬‬
‫)‬ ‫وهو مبدا ‪.Backward Chaining‬‬

‫‪(defrule proof-rule‬‬ ‫بقي لدينا إضافة القاعدة ‪ proof‬والتي تاتي على الشكل‪:‬‬ ‫‪‬‬
‫)‪(Proof ?x‬‬ ‫والتي تقول بانه إذا كنت تطلب إثبات حقيقة ما وكانت‬
‫)‪(Goal ?x‬‬
‫>=‬ ‫الحقيقة في ‪ WM‬فإنها قد تم إثباتها‪.‬‬
‫)‪(printout t ?x " is achieved" crlf‬‬
‫)‬

‫‪ ‬في هذه اللحظة يسعى ‪ Jess‬لتحقيق القاعدة المطلوب برهانها‪.‬‬


‫حل المثال السابق ً‬
‫كامال بـ ‪ Backward Chaining‬موجود في الملحق المرفق بالمحاضرة (‪.)example2.clp‬‬
‫مثال اخر على الـ‪: Backward Chaining‬‬

‫وعلى فرض لدينا الحقائق ‪ H,F‬ونريد برهان ‪I‬‬


‫حل المثال السابق موجود في الملحق المرفق بالمحاضرة(‪.)example3.clp‬‬

‫الصفحة | ‪3‬‬ ‫‪Binary Team‬‬


‫فوائد وتطبيقات الـ‪:Backward Chaining‬‬
‫‪ -1‬في حال وجود قاعدة معطيات )‪ (Data Base‬كما في مثال المتجر‬
‫فعند طلب سلعة معينة عندها يجب ان يجلب ‪ Jess‬بياناتها من ‪ DB‬وهذا يمكن تحقيقه في قاعدة ‪ need‬مثال‪:‬‬
‫‪(defrule price_needed‬‬
‫)‪(need_price ?item‬‬
‫>=‬
‫)))>‪(assert (price ?item (<value from DB‬‬
‫)‬
‫‪ -5‬انظمة التشخيص كمثال النظام الخبير الذي يقوم بتشخيص اعراض مرض معين كما تم ذكره ً‬
‫سابقا‪.‬‬

‫منع الحلقات الالنهائية ‪:Infinite Loops‬‬


‫ليكن لدينا نمط معين ‪ A‬وليكن بداخله ‪ slot‬من نوع رقمي )‪ (integer‬تمثل ‪.id‬‬
‫وليكن لدينا حقيقة واحدة هي ))‪ (A (id 0‬وليكن لدينا قاعدة باسم ‪ Loop_rule‬تقوم بإيجاد اية حقيقة من النمط ‪ A‬وتعدل عليها‪.‬‬
‫ً‬
‫مثال بزيادة ‪ id‬فعند تشغيل البرنامج لول مرة سيدخل في حلقة ل نهائية من التعديالت لنه في كل مرة يطبق فيها القاعدة‬
‫‪ Loop_rule‬تعدل على الحقيقة الوحيدة الموجودة وتعيد إضافتها إلى الـ‪( WM‬لنها تعدلت)‪.‬‬
‫لمنع هذا النوع من الحلقات نستخدم التعليمة ))‪(declare (no-loop True‬‬
‫مثال‪:‬‬
‫‪(deftemplate A‬‬
‫"‪"comment‬‬
‫))‪(slot id(type INTEGER‬‬
‫)‬
‫‪(deffacts A-facts‬‬

‫))‪(A(id 0‬‬
‫)‬
‫‪(defrule loop-rule‬‬
‫))‪(declare (no-loop TRUE‬‬
‫))? ‪?f<-(A(id‬‬
‫>=‬
‫)))‪(modify ?f (id (+ ?f.id 1‬‬
‫)‪(printout t "modified" crlf‬‬
‫)‬
‫)‪(reset‬‬
‫)‪(agenda‬‬
‫)‪(run‬‬
‫)‪(agenda‬‬
‫تمرين‪ :‬بناء نظام خبير يقوم بـ ‪:‬‬
‫‪ -a‬تمثيل شجرة العائلة‪.‬‬
‫‪ -b‬تحقيق العالقات العائلية (الب ‪ -‬الم ‪ -‬الخ ‪ -‬الخت ‪ -‬السالف ‪ -‬الجد ‪-‬الجدة)‪.‬‬
‫‪ -c‬إظهار محارم شخص معين‪.‬‬
‫طلبت المهندسة للدرس القادم كـتابة تمرين شجرة العائلة لن التقييم سيبنى عليه‪.‬‬

‫الصفحة | ‪4‬‬ ‫‪Binary Team‬‬

You might also like