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 .
لینک قدیمی پروژه کارشناسی من خوب نبود گذاشتم rapidshare
پسورد برای یاز کردنش هم اینه:
"Expert-Sys.Blogfa"
امیدوارم مفید واقع بشه
بيت با هدف عمومي، به همان عنوان پوسته ی سيستمهاي خبره اشاره ميكند. همانگونه كه در شكل ميبينيم پوسته موتور رابط براي كاربر، يك سيستم توضيحي و گاهي اوقات يك ويرايشگر بانك اطلاعات را فراهم خواهد كرد.
با دادن يك نوع جديد مسئله براي حل بطور معمول ما ميتوانيم يك پوسته که مجموعهاي کامل از پشتيباني براي مسئله را در بردارد فراهم آوريم بنابراين همه كاري كه ما بايد ب كنيم فراهم آوردن يك دانش خبره ميباشد.
مقادير زيادي از پوستههاي تجاري وجود دارد كه هر كدامشان براي دستههايي با تفاوت جزئي از مسايل مناسب هستند. سيستمهاي خبرهاي كه در صنعت كاربر دارند هم يستمهاي خبره براي طراحي پوستهاند و هم سيستمهاي خبرهاي كه توسط پوستههاي آماده نوشته ميشوند ميباشند .
استفاده از پوسته براي نوشتن سيستم در حالت كلي، در مقايسه با ايجاد يك سيستم خبره از ابتدا، بطور قابل ملاحظهاي هزينه و زمان براي ايجاد يك سيستم جزئ را كاهش خواهد داد.
1-3 ) انتخاب مسئله
نوشتن يك سيستم خبره بطور كلي زمان و هزينه زيادي را صرف خواهد كرد. براي جلوگيري از هزينه اشكالات بوجود آمده، مردم يك مجموعه از راهنمائيها براي تعيين كردن اينكه آيا يك مسئله براي استفاده از سيستم خبره مناسب است يا نه، فراهم كردهاند:
1) احتياج به راهحل بايد ارزش هزينه صرف شده براي اين امر را داشته باشد. بايد يك برآورد واقعي از هزينهها و سود در بردارندهي آن وجود داشته باشد.
2) يك انسان خبره در همهي شرايطي كه به او نياز است در دسترس نيست.
v اگر دانش يك انسان خبره بطور گستردهاي در دسترس است غير محتمل بنظر ميرسد كه ايجاد يك سيستم خبره ارزشمند باشد.
بهرحال از مكانهايي نظير اكتشاف و نفت ممكن است دانش خبرهاي كه مي تواند بسيار ارزان و بوسيله يك سيستم خبره در هر زماني كه مورد نياز است بسيار راحتتر باشد تا سراغ يك انسان خبره رفتن
3) مسئله ممكن است با تكنيكهاي نظير تكنيك استدلال سمبوليك [1] حل شود و ديگر نيازي به مهارتهاي فيزيكي با ذهني نباشد.
4) مسئله يك ساختار مناسب دارد و به دانش آنچناني نياز ندارد.
5) مسئله نميتواند به راحتي با روشهاي محاسباتي سنتی حل شود.
v اگر يك الگوريتم خوب براي راهحل مسئله وجود دارد، شما نميخواهيد از سيستم خبره استفاده كنيد.
6- مسئله در يك وسعت و اندازهي مناسب است.
v بطور معمول شما در مسايلي كه نياز به خبرههاي با تخصص بالا دارند،به سیستمهای خبره احتياج داريد، اما همين ممكن است زمان اندكي براي حل شدن بدست يك انسان خبره نياز داشته باشد.
بايد اينكه تنها يك رنج كوچك از مسايل براي تكنولوژي سيستمهاي خبره مناسب هستند، كاملاً روشن شود. بهرحال با دادن يك مسئلهي مناسب ، سيستمهاي خبره ميتواند منافع زيادي را بدنبال داشته باشند. سيستمها پيشرفت داده شدهاند، براي مثال براي كمك به آناليز نمونههاي جمعآوري شده در اكتشاف نفت و براي كمك براي تنظيم كردن سيستم كامپيوتر و ميبينيم كه هر دوي اين سيستمها بصورت گستردهاي استفاده ميشوند و مقادير زيادي از پول را ذخيره ميكنند.
1-4) مهندسي دانش [1]
با گرفتن اين تصميم كه مسئلهي شما براي يك سيستم خبره مناسب است شما نياز داريد تا دانش و اطلاعات را از يك خبره دربارهي اين مسئله گردآوري نمائيد و آنرا در قابل يك سيستم خبره با كمك پوستهاي عرضه داريد. اين، كار يك مهندس دانش است البته با داشتن يك همكاري نزديك با كاربر و خبره.
براي فراهم آوردن دانش از يك مهندسي دانش، زبان هوش مصنوعي يا AI[2] و معرف خبره است. و بايد قادر باشد تا يك پوستهي سيستم خبرهي مناسب پيدا كند و بتواند به جمعآوري دانش از خبره و پيادهسازي دانش در يك بانك اطلاعاتي درست و مناسب بپردازد. مهندس دانش حتي ميتواند دانش اوليهاي راجع به آن حوزه نداشته باشد. خبره، مهندس دانش بايد در ابتدا مقداري با حوزهي مسئلهي خود آشنايي پيدا كند.
بعد از آن گفتگو با خبره آغاز ميشود. بطور معمول يك خبره يك سري از مسايل را ميداند و روشهاي حل آنها را نيز توضيح ميدهد. مهندس دانش قواعد را از اين مسايل و راهحلها خارج كرده و آنها را با خبره در ميان ميگذارد.
درست مشابه اكثر نرمافزارها، سيستمي كه كاربر با آن راحت نباشد، چيز بيهودهاي خواهد بود.
بنابراين طريقهي طراحي بايد در يك ارتباط متقابل نزديك با كاربران باشد، همانطور كه در مقدمه شرح داده شد. سيكل اوليهي تهيهي نرمافزار بايد پيشرفت سريع ساختار اوليه و آزمايش مداوم و امتحان كردن بوسيلهي كاربر و خبره باشد، براي اينكه ببينند آيا سيستم رضايتبخش است يا نه.
به منظور پيشرفت ساختار اوليه، مهندس خبره بايد يك تصميم ابتدايي براي ارائهي اطلاعات مناسب و روش تبادل اطلاعات بگيرد (براي مثال قواعد، قواعد + چارچوب: سلسل پسرونده با پيشرونده …). براي امتحان اين تصميمهاي طراحي اوليه، نمونه اوليه ممكن است تنها يك بخش كوچك از كل مسئله را حل كند. اگر به نظر برسد كه روش مورد استفاده براي اين قسمت كوچك خوب كار كند، بنابراين ارائهي بقيهي دانش در فرم مشابه ارزش تحقيق و سعي و تلاش را خواهد داشت.
پيشرفت سيستم خبره در حدود 5 الي 10 سال پيش بصورت بسيار حرفهاي بود. پوستههاي سيستم خبره بطور گستردهاي در حال استفادهاند اما هنوز براي حل مسايل بسيار سادهاي استفاده ميشوند.