ادامه مبحث طراحی سیستم های خبره
5) قواعد و سيستم خبره[1]
در اين بخش نشان ميدهيم كه چگونه سيستمهاي خبره بر مبناي IF-THEN كار ميكنند و يك سيستمهاي بر مبناي قاعده را در prolog ارائه ميدهيم.
سيستمهاي بر مبناي قاعده ميتوانند هم از نوع goal driven با استفاده از تسلسل پس رونده [2] براي امتحان اينكه بعضي از فرضيههاي درست هستند يا نه، باشند و يا از نوع data driven با استفاده از تسلسل پيشرونده [3] باشند تا نتيجهاي جديد از اطلاعات موجود بگيرند. سيستمهاي خبره ميتوانند از هر دو نوع استراتژي استفاده كنند اما احتمالاً رايجترين استراتژي، goal driven باشد.
يك دليل براي اين ادعا اين است كه معمولاً سيستم خبرهاطلاعات مورد نياز خود را بوسيلهي پرسيدن سوالها از كاربر جمعآوري ميكند. با استفاده از استراتژي goal driven: ما ميتوانيم تنها سوالهايي را كه در ارتباط با راهحلهاي فرض شدهي ما باشند، بپرسيم. بهرحال، در يك سيستم خبره بر مبناي قاعدهي goal driven معمولاً يك دسته از راهحلهاي احتمالي براي مسئله وجود دارد. مثل احتمال ناخوشيهايي كه يك بيمار ميتواند داشته باشد. سيستم خبره همهي اين راهحلهاي فرض شده را مدنظر ميگيرد (مثل (has cold(fred)) و سعي ميكند كه درستي يا نادرستي اين فرضيه را تعيين كند. بعضي از اوقات شايد ممكن نباشد كه بتوان با اطلاعات كنوني كه كاربر داده است به نتيجهي قطعي رسيد. بنابراين سيستم سوال از كاربر ميپرسد (مثل "have you got a headache "). با استفاده از اطلاعات اضافه شده بوسيلهي پاسخها به اين سوالات سيستم ميتواند به اين نتيجه برسد كه كدام راهحل ممكن براي اين مسئله، راهحل درست است.
1-6) يك مثال ساده A Simple Example
با اين مثال ساده بهتر ميتوان به روند كاري پي برد. در نظر داشته باشيد، قواعد زير را داريم:
1. IF engine_getting_petrol
AND engine_turns_over
THEN problem_with_spark_plugs
2. IF NOT engine_turns_over
AND NOT lights_come_on
THEN problem_with_battery
3. IF NOT engine_turns_over
AND lights_come_on
THEN problem_with_starter
4. IF petrol_in_fuel_tank
THEN engine_getting_petrol
مسئلهي ما فهميدن اين نكته است كه با استفاده از بعضي علائم قابل مشاهده عيب خود روي خود را بيابيم.
كه مشكل ممكن براي اين ماشين وجود دارد:
problem_with_spark_plugs,
problem_with_battery, problem_with_starter.
در ادامه وانمود خواهيم كرد كه هيچ اطلاعات و حقايق اوليهاي در مورد علائم قابل مشاهده نداريم.
در سادهترين سيستم goal driven، ما سعي خواهيم كرد تا هر مسئلهي فرض شده دربارهي ماشين را به نوبت بررسي كنيم. در ابتدا سيستم سعي خواهد كرد اثبات كند كه:
problem – with – spark – plugs
قاعده اول بصورت بالقوه مفيد است. بنابراين سيستم هدف جديد خود را براي اثبات ”engine-gatting - petrol” و “engin-turns-over” قرار ميدهد. در تلاش براي اثبات اولين قاعده، قاعدهي 4 با هدف جديدي براي اثبات ميتواند مورد استفاده قرار گيرد:
problem – in – fule – tank
هيچ قاعدهاي براي به اثبات رساندن اين موضوع وجود ندارد (و سيستم واقعاً جواب سوال را نميداند)، بنابراين سيستم از كاربر سوال ميكند:
Is it true that there’s petrol in fuel tank?
بيائيد فرض كنيم جواي “YES” است. اين جواب ثبت ميشود تا از كاربر دوباره اين سوال پرسيده نشود. تا اينجا سيستم به اثبات رسانده است كه در موتور بنزين وجود دارد. حال ميخواهد بفهمد كه آيا ماشين” “turn-over شده است. از آنجائيكه هنوز سيستم نميداند كه آيا اين مورد است و همچنين هيچ قاعدهاي براي نتيجهگيري در اين مورد ندارد، از كاربر سوال خواهد شد:
Is it true that the engine turns over?
بيائيد در نظر بگيريم جواب به اين سوال “NO” است. ديگر هيچ قاعدهاي براي اثبات ادعاي “problem-with-spark-plugs” وجود ندارد. بنابراين به اين نتيجه ميرسد كه اين راهحل مسئلهي ما نيست و فرضيهي بعدي را در نظر ميگيرد:
problem – with - battery
اين مسئله كه” “dose not turn over، براي ماشين درست است (كاربر قبلاً به اين سوال پاسخ داده است) پس بنابراين تنها بايد اين مسئله كه چراغها روشن نميشوند به اثبات برسد. از كاربر سوال ميشود:
Is it true that lights come on?
در نظر بگيريد جواب “NO” باشد. تاكنون به اثبات رسيده است كه مشكل باتري است.
بعضي از سيستمها ممكن است همين جا باشند. اما هميشه ممكن است بيشتر از يك راهحل براي مسئله وجود داشته باشد يا عدم اطمينان در مورد اينكه كدام راهحل بهترين است. بنابراين معمولاً همهي فرضيات مدنظر گرفته ميشوند.
بنابراين سيستم سعي ميكند فرضيهي بعدي را به اثبات برساند:
“problem – with – starter”
اما با دادن اطلاعات موجود (نور چراغ روشن است) اين موضوع رد ميشود. بنابراين سيستم به اين نتيجه ميرسد كه مشكل از باطري است. فعل و انفعالات سيستم بسيار سادهي ما ميتواند اينچنين باشد:
System: Is it true that there's petrol in the fuel tank?
User: Yes.
System: Is it true that the engine turns over?
User: No.
System Is it true that the lights come on?
User: No.
System: I conclude that there is a problem with battery.
در نظر بگيريد در حالت كلي حل مسئله با استفاده از تكنيك backward chaining شامل جستجو در تمامي راههاي ممكن براي اثبات فرضيه است. سادهترين راه براي اجراي اين مسئله مشابه آنچه است كه در prolog وجود دارد با عنوان backtracking .