یا ابوالفضل العباس

شب شب عاشوراست

شب عشق است و وفا

می وزد باد میان حرمی می پیچد رایحه سیب بهشت بوی سیب بوی گیسوی حبیب

در خیام اصحاب سینه هایی بی تاب

همه مشغول دعایند و نماز

تا خدا در پرواز

در کنار اینان خیمه هاشمیان

حرم آل علی

خیمه ای نجمه زند شانه به زلف قاسم

زیر لب می گوید کنم تا که عمو اذن جهادم بدهد

کاش بابایم بود

آن طرف می آید

نغمه لالایی

کودک بی شیرم صبر کن تا دم صبح

باز از اشک عمو می نوشی

باز با بازی طفلان حرم می جوشی

آن طرف در خوابند

کودکان دخترکان

همگی آسوده

همه آرام ز لالائی پر تنتنه ای

دم لالائی کیست ؟

این صدای قدم عباس است

گرد در گرد حرم می چرخد

می وزد باد و صدای تپش بیرق او می آید

علمی در دستی تیغ در دست دگر

زیر لب ذکر خدا می آید

ساعتی اما بعد کودکان بیدارند

دختران بی تابند

گرچه حتی نرسید است سحر

چه شده خواب ز چشمان همه بال زده

گوئیا یک نفر از راه خبر آورده

خبری پیچیده

خیمه ها لرزیده

 اشک در چشم همه حلقه زده

عمه جان کاری کن

شیر بر گرد حرم می گردد

همه جا تاریک است

دشت دشتی پر خوار

آسمان تیره و تار

جز صدای قدمش زمزه ها خاموش است

ناگهان ناله ای آمد که منم زینب تو

زانوان عباس

پیش بانو لرزید

خواست تا روی قدمهای عقیله افتد

دستهای خواهر

شانه اش بالا رفت

گفت یادت مانده ؟

شب قدری که پدر پر می زد ؟

از شکاف در حجره تو را می دیدم

دست در دست حسین

یاد داری نفس آخر بابایم را

کربلا جان تو و جان حسین

گفت آری بانو

گفت آری به خدا یادم هست

گفت عباس شنیدم که امان نامه به دستت دادند

کودکان در خیمه ز نفس افتادند

گوئیا آوار شد عالم به سرش یکباره

عرق چهره سرخش به زمین می ریزد

رگ پیشانی او پیدا شد

به امیری که علم داده به دستم سوگند

من کجا ؟ حرف امان نامه کجا ؟

دشت فردا سرخ است

از دم شمشیرم

از سفیر تیرم

چشم خاتون می نگرد

از دم خیمه که چه غوغا سازم

رزم را یک طرفه ختم به خیرش سازم

من کجا حرف امان نامه کجا

ندهم هیچ امانی که نفس تازه کند

جان بانو عمری است

پیش خود لحظه شماری کردم

عقده ام باز کنم

بغز دیرینه خود را شکنم

از همانانی که همگی جمع شدند

همه از خانه خود آوردند

پشته های هیزم پشت درب حرم بابایم

از همان نامردی که شنید از پس در

نفس زهرا را

خاطرات تلخی است

که شما می گفتید

از همانی که در خانه تان آتش زد

دود بود و در آتش زده و مادرتان می نالید

شعله بالا می رفت

سرخ تر میشد میخ

ضربه ای را که در از جا افتاد

به رخ مادر خورد

سینه اش خونین شد

پهلویش را بشکست

محسنش رفت ز دست

گفت حیدر تو نیا جای تو نیست

محسنم کشته شده فضه بیا

از همانی که طناب

زد به دستان علی

مادرت دامن بابا بگرفت

به کسی گفت نزن

از همانی که غلاف زد به بازو آنجا

گردنش می شکنم

یاس را پرپر کرد

من کجا حرف امان نامه کجا

باز هم مثل قدیم

کوچه ای روضه مادر برپاست

مثل فردا اما

لحظه ای که حرمش غارت شد

دید گوشه ای از دشت چه غوغا شده است

نیزه داران جمعند

سر راس عباس

باز دعوا شده است

پیرمرد گاریچی

... ای رفیق نیمه راه. مگه قول نداده بودیم باهم کار رو شروع کنیم و تا آخرش باهم باشیم و باهم بازنشسته شیم؟

حالا من تورو با این پای شکسته چیکا کنم؟ چجوری میخوای دیگه با من باشی؟ ای بی معرفت!

این رسمش نبود...

پیرمرد گاری شو به زحمت کشید. یکی از چرخاش شکسته بود!


شبکه های عصبی 3

قضیه بنیادی دنباله‌ها:

یک خصوصیت قابل توجه perceptron این است که آنها می‌توانند دنباله‌ای از رده‌بندی صحیح مثالهای مثبت ومنفی باشند.

فرض کنیم: X = X+ ب X-

X+ : مجموعه‌‌ای از مثالهای مثبت

X- : مجموعه‌‌ای از مثالهای منفی

گوییم که رشته بی‌کران S x= X1 , X2 , …, Xk , یک رشته متوالی(ترتیبی) برای X است در صورتی که هر Xi یک مثال در X است و هر عنصر از X اغلب به طور نامحدود در Sx رخ می‌دهد(نمایان می‌شود).

فرض کنیم Wk ضریب وزنی در سطح k دنباله باشد. وزن اولیه می‌تواند به صورت قراردادی باشد (برای مثال W1=0 ). حال رشته استاندارد حاصله، وزنها را به صورت زیر ارتقا می‌دهد:

بسته به استرادژی مورد نظر ممکن است مقادیر C k همگی یکسان باشند یا ممکن است با k تغییر کنند.

قضیه 1)یک بردار حل وزنها برای X وجود داشته باشد, در این صورت رویه رشته استاندارد باید بعد از یک تعداد فرض کنیم یک مجموعه از رشته نمونه X و هر رشته ترتیبی برای آن داریم, اگر Ck یک ثابت مثبت مراحل مشخص یک راه‌حل پیدا کند به طوری که اگر برای بعضی k0 ها داشته باشیم:      WK0 = WK0+1 = WK0+2 =

که WK0 یک راه‌حل برای X است.

بنابراین ما می‌توانیم با استفاده از شبکه‌های عصبی هر چه بیشتر به شبیه‌سازی انسان توسط کامپیوترها نزدیک شویم به منظور واگذاری کارهای تکراری, وقت‌گیر و مسائلی که با توجه به پیشرفت بشری دیگر درخور بشر نیست.

هوش جمعی

فرض کنید شما و گروهی از دوستانتان به دنبال گنج می‌گردید. هر یک از اعضای گروه یک فلزیاب و یک بی‌سیم دارد که می‌تواند مکان و وضعیت کار خود را به همسایگان نزدیک خود اطلاع بدهد. بنابراین شما می‌دانید آیا همسایگانتان از شما به گنج نزدیکترند یا نه؟ پس اگر همسایه‌ای به گنج نزدیکتر بود شما می‌توانید به طرف او حرکت کنید. با چنین کاری شانس شما برای رسیدن به گنج بیشتر می‌شود و همچنین گنج زودتر از زمانی که شما تنها باشید، پیدا می‌شود.

این یک مثال ساده از رفتار جمعی یا Swarm behavior است که افراد برای رسیدن به یک هدف نهایی همکاری می‌کنند. این روش مؤثرتر از زمانی است که افراد جداگانه عمل کنند. Swarm را می‌توان به صورت مجموعه‌ای سازمان یافته از موجوداتی تعریف کرد که با یکدیگر همکاری می‌کنند. در کاربردهای محاسباتی Swarm intelligence از موجوداتی مانند مورچه‌ها، زنبورها، موریانه‌ها، دسته‌های ماهیان و دسته‌ی پرندگان الگو برداری می‌شود. در این نوع اجتماعات هر یک از موجودات ساختار نستباً ساده‌ای دارند ولی رفتار جمعی آنها بی‌نهایت پیچیده است. برای مثال در کولونی مورچه‌ها هر یک از مورچه‌ها یک کار ساده‌ی مخصوص را انجام می‌دهد ولی به طور جمعی عمل و رفتار مورچه‌ها، ساختن بهینه‌ی لایه، محافظت ازملکه و نوزادان، تمیز کردن لانه، یافتن بهترین منابع غذایی و بهینه‌سازی استراتژی حمله را تضمین می‌کند. رفتار کلی، یک Swarm به صورت غیر خطی از آمیزش رفتارهای تک‌تک اجتماع بدست می‌آید. یا به عبارتی یک رابطه‌ی بسیار پیچیده بین رفتار جمعی و رفتار فردی یک اجتماع وجود دارد. رفتار جمعی فقط وابسته به رفتار فردی افراد اجتماع نیست بلکه به چگونگی تعامل میان افراد نیز وابسته است. تعامل بین افراد، تجربه‌ی افراد درباره‌ی محیط را افزایش می‌دهد و موجب پیشرفت اجتماع می‌شود.

 ساختار اجتماعی Swarm بین افراد مجموعه کانالهای ارتباطی ایجاد می‌کند که طی آن افراد می‌توانند به تبادل تجربه‌های شخصی بپردازند، مدل‌سازی محاسباتی Swarmها کاربردهای موفق و بسیاری را در پی داشته است مانند:

Function optimization, Finding optimal roots, scheduling, structural optimization, Image and data analysis

 

کاربردهای زیادی از مطالعه‌ی Swarmهای مختلف وجود دارد. از این دسته می‌توان به کولونی مورچه‌ها (Ant Colony) و دسته‌ی پرندگان (Bird Flocks) اشاره نمود.

 

(Particle Swarm Optimitation(PSO:

الگوریتم PSO یک الگوریتم جستجوی اجتماعی است که از روی رفتار اجتماعی دسته‌های پرندگان مدل شده است. در ابتدا این الگوریتم به منظور کشف الگوهای حاکم بر پرواز همزمان پرندگان و تغییر ناگهانی مسیر آنها و تغییر شکل بهینه‌ی دسته به کار گرفته شد.

در PSO، particleها در فضای جستجو جاری می‌شوند. تغییر مکان particleها در فضای جستجو تحت تأثیر تجربه و دانش خودشان و همسایگانشان است. بنابراین موقعیت دیگر particleهای Swarm روی چگونگی جستجوی یک particle اثر می‌گذارد.

نتیجه‌ی مدل‌سازی این رفتار اجتماعی فرایند جستجویی است که particleها به سمت نواحی موفق میل می‌کنند. Particleها در Swarm از یکدیگر می‌آموزند و بر مبنای دانش بدست آمده به سمت بهترین همسایگان خود می‌روند.

 

Particle swarm Optimitation Algorithm:

اساس کار PSO بر این اصل استوار است که در هر لحظه هر particle مکان خود را در فضای جستجو با توجه به بهترین مکانی که تاکنون در آن قرار گرفته است و بهترین مکانی که در کل همسایگی‌اش وجود دارد، تنظیم می‌کند.

فرض کنید می‌خواهیم زوج مرتب (x,y) را طوری بدست آوریم که تابع F(x,y)=x2+y2، مینیمم شود. ابتدا نقاطی را به صورت تصادفی در فضای جستجو، روی صفحه‌ی x-y انتخاب می‌کنیم. فرض کنید این Swarm را به 3 همسایگی تقسیم کنیم که در هر همسایگی نقاط موجود با یکدیگر تعامل دارند. در هر همسایگی هر یک از نقاط به سمت بهترین نقطه در آن همسایگی و بهترین مکانی که آن نقطه تاکنون در آن قرار داشته است، حرکت می‌کند. برای حل یک مسئله چند متغیر بهینه‌سازی می‌توان از چند Swarm استفاده کرد که هر یک از Swarmها کار مخصوصی را انجام می‌دهند. این همان ایده‌ای است که Ant colony از آن ریشه می‌گیرد. از آنجا که دانش Swarm intelligence بسیار جدید است در حال حاضر کاربردهای کمی از آن شناخته شده است. ولی صاحبنظران معتقدند با این رشد روزافزون، Swarm intelligence می‌تواند نقش مهمی را در علوم مختلف از جمله مهندسی نفت ایفا کند.

شیوه های یادگیری در شبکه های عصبی

انواع یادگیری برای شبکه های عصبی

1.یادگیری با ناظر

در یادگیری با ناظر به قانون یاد گیری مجموعه ای از زوجهای داده ها به نام داده های یادگیری (Pi,Ti)={1…1} می دهند که در آن Pi ورودی به شبکه و Ti خروجی مطلوب شبکه برای ورودی Pi است. پس از اعمال ورودی Pi به شبکه عصبی در خروجی شبکه ai با Ti مقایسه شده و سپس خطای یادگیری محاسبه و از آن در جهت تنظیم پارامترهای شبکه استفاده می شود به گونه ای که اگر دفعه بعد به شبکه همان ورودی Pi اعمال شود خروجی شبکه به Ti نزدیکتر می گردد با توجه به این نکته که معلم سیستمی است که بر محیط وقوف دارد ( مثلا می داند که برای ورودی Pi خروجی مطلوب Ti است ).توجه داریم که محیط برای شبکه عصبی مجهول است . در لحظه k بردار ورودی Pi(k) با تابع توضیع احتمال معینی که برای شبکه عصبی نا معلوماست انتخاب و بطور همزمان به شبکه عصبی و معلم اعمال می شود . جواب مطلوب Ti(k) نیز توسط معلم به شبکه عصبی داده می شود . در حقیقت پاسخ مطلوب پاسخ بهینه ای است که شبکه عصبی برای ورودی مفروض باید به آن برسد . پارامترهای شبکه عصبی توسط دو سیگنال ورودی و خطا تنظیم می شود.به این صورت که پس از چند تکرار الگوریتم یادگیری که عموما توسط معادله تفاضلی بیان می شودبه پارامترهایی در فضای پارامترهای شبکه همگرا می شوند که برای آنها خطای یادگیری بسیار کوچک است و عملا شبکه عصبی شبکه عصبی معادل معلم می شود . یا به عبارتی دیگر اطلاعات مربوط به محیط (نگاشت بین TiوPi )که برای معلم روشن است به شبکه عصبی منتقل می شود و پس از این مرحله عملا می توان بجای معلم از شبکه عصبی استفاده کرد تا یادگیری تکمیل شود .

2.یادگیری تشدیدی:

یک اشکال یادگیری با ناظر این است که شبکه عصبی ممکن است بدون معلم نتواند مواضع جدیدی را که توسط مجموعه داده های جدید تجربی پوشانده نشده است یاد بگیرد . یادگیری از نوع تشدیدی این محدودیت را برطرف می کند . این نوع یادگیری بطور on-line صورت می گیرد در حالی که یادگیری با ناظر را به دو صورت on-line & off-line می توان انجام داد. در حالت off-line می توان از یک سیستم محاسب با در اختیار داشتن داده های یادگیری استفاده کرد و طراحی شبکه عصبی را به پایان رساند . پس از مرحله طراحی و یادگیری شبکه عصبی به عنوان یک سیستم استاتیکی عمل می کند . اما در یادگیری on-line شبکه عصبی همراه با خود سیستم یادگیر در حال انجام کار است و از این رو مثل یک سیستم دینامیکی عمل می کند .

یادگیری از نوع تشدیدی یک یادگیری on-line از یک نگاشت ورودی-خروجی است . این کار از طریق یک پروسه سعی و خطا به صورتی انجام می پذیرد که یک شاخص اجرایی موسوم به سیگنال تشدید ماکزیمم شود و بنابر این الگوریتم نوعی از یادگیری با ناظر است که در آن به جای فراهم نمودن جواب واقعی ، به شبکه عددی که نشانگر میزان عملکرد شبکه است ارایه می شود. این بدین معنی است که اگر شبکه عصبی پارامترهایش را به گونه ای تغییر داد که منجر به یک حالت مساعد شد آنگاه تمایل سیستم یادگیر جهت تولید آن عمل خاص تقویت یا تشدید می شود . در غیر این صورت تمایل شبکه عصبی جهت تولید آن عمل خاص تضعیف می شود . یادگیری تقویتی مثل یادگیری با ناظر نیست و این الگوریتم بیشتر برای سیستمهای کنترلی کاربرد دارد .

3. یادگیری بدون ناظر

در یادگیری بدون ناظر یا یادگیری خود سامانده پارامترهای شبکه عصبی تنها توسط پاسخ سیستم اصلاح و تنظیم می شوند . به عبارتی تنها اطلاعات دریافتی از محیط به شبکه را برداغرهای ورودی تشکیل می دهند. و در مقایسه با مورد بالا (یادگیری با ناظر) بردار جواب مطلوب به شبکه اعمال نمی شود . به عبارتی به شبکه عصبی هیچ نمونه ای از تابعی که قرار است بیاموزد داده نمی شود . در عمل می بینیم که یادگیری با ناظر در مورد شبکه هایی که از تعداد زیادی لایه های نرونی تشکیل شده باشند بسیار کند عمل می کند و در این گونه موارد تلفیق یادگیری با ناظر و بدون ناظر پیشنهاد می گردد .

زمینه‌ای در مورد perceptron

    Perceptron های ساده:

یک خانواده ساده از شبکه‌های عصبی مدل perceptron می‌باشد. در یک دسته‌بندی تک‌خروجی، تعداد n ورودی و یک خروجی دارد . با هر ورودی یک ضریب وزنی Wi و با هر خروجی یک مقدار آستانه q مرتبط است.

Perceptron به گونه زیر عمل می‌کند:

ورودی‌های Perceptron یک بردار ورودی از n مقدار حقیقی است.

Perceptron مجموع وزنها را محاسبه می‌کند a= ه Wi.Xi. این مقدار با مقدار آستانه q مقایسه می‌شود. اگر این مقدار از مقدار آستانه کوچکتر باشد خروجی 0 است و در غیر این صورت 1 است.

قدرت Perceptron

به وسیله تنظیم اعداد ورودی، وزن آنها و مقدار آستانه می‌توان یک Perceptron برای انجام نسبتا خوب محاسبات گوناگون طراحی کرد. برای مثال توابع منطقی بولین مانند AND ، OR و NOT را می‌توان به وسیله Perceptron طراحی کرد و هر مدار منطقی دیگر را به وسیله گیتهای AND و NOT یا AND و OR طراحی کرد. دسته‌های زیادی از Perceptronها ممکن است خروجی‌های دسته‌های دیگر را به عنوان ورودی خود درخواست کنند.

به عنوان مثالی ازPerceptron ها می‌توان یک تشخیص دهنده قالب متن را نام برد. حرفA درآرایه‌ای 5*5 به‌رمز درمی‌آید(encode می‌شود). این متن(حرف) به‌وسیله یک Perceptron با 25 ورودی تشخیص داده می‌شود که در آن وزنها مقادیری برابر با مقادیر عددی داخل آرایه را می‌گیرند و مقدار آســتانه برابر است با : e-25 =q که در آن  0 < e < 1 .

خروجی Perceptron 1 است اگر و فقط اگر ورودی آن از 1 و 1- هایی باشد که عینا در آرایه آمده است.

 

دنباله‌های Perceptron

یکی از خصوصیات جالب Perception این است که آنها می‌توانند به وسیله مثالهای مثبت و منفی ( صحیح و اشتباه) برای انجام توابع دسته‌بندی شده مخصوص بارها مرتب شوند.

حال به یک مثال ساده از Perceptron با دو ورودیX1 وX2 ، که تشخیص می‌دهد که کدام‌یک از دو کلاس، عناصر متعلق به خودش را دارد. ما فرض می‌کنیم که این Perceptron دو طرح از کارکترهای چاپ شده از یک متن را بررسی کند، خروجی 1 است اگر و فقط اگر کاراکتر رقم 8 باشد. فرض کنیم که X1 بیانگر تعداد حفره‌های کاراکتر است و X2 درجه راستی سمت چپ کاراکتر را نشان می‌دهد. ما با 4 ورودی .

اگر ما perceptron را در اول کار با وزنهایی برابر 0 و مقدار آستانه را برابر 10 مقداردهی کنیم یک رده‌بندی از همه مثالهای منفی انجام داده‌ایم. با قرار دادن رده‌بندی‌های نادرست از 8 ، مقادیر ورودی از مثال 8 با بعضی فاکتورها مثل d جمع می‌شوند و تولیدات جدید با وزنهای متناظر با ایجاد می‌شوند.

فرض کنیم 1=d پس وزن ورودی‌ها از 0 به 1 و 2 رشد پیدا می‌کند. حال در اینجا 5 = a به دست می‌آید که هنوز از مقدار آستانه 10 کوچکتر است. مثال هنوز به رده‌بندی صحیحی نرسیده است واین قدم دنباله باید تکرار شود. بعد از دو قدم وزنها برابر 2 و 4 می‌شوند که مقدار 10 = a را نتیجه می‌دهد که برابر مقدار آستانه است و مثال مثبت از 8 به طور صحیح دسته‌بندی شده است. از آنجا که ضرایب وزنی تغییر کرده بودند لازم است که در همه مثالها رده‌بندی‌ها بازنشان ( Reset ) شوند. این را می‌توان به سادگی دید که مثال B رده‌بندی نادرستی است زیرا با وزنهای 2 و 4 داریم 24 = a ولی این حرف مورد نظر ما نیست، چون این مرحله را پیش رفته‌ایم لازم است که d.1 از W1 و d.2 از W2 کم شود تا رده‌بندی نادرستی از B ثابت شود. به هر حال یک رده‌بندی از 8 را دوباره بیرون می‌دهد.

بعدها موقع بروز خطا ما وزنها را برای درست کردن خطاهای رده‌بندی اصلاح می‌کنیم. اگر مثالها دارای خاصیت صحیحی باشند وزنها در مجموعه‌ای از مقادیری که به درستی روی هر ورودی کار می‌کنند قرار می‌گیرند.

منم زیبا

منـم زیبــا

که زیبا بنده ام را دوست میدارم

تو بگشا گوش دل پروردگارت با تو میگوید

ترا در بیکران دنیای تنهایان

رهایت من نخواهم کرد

رها کن غیر من را آشتی کن با خدای خود

تو غیر از من چه میجویی؟

تو با هر کس به غیر از من چه میگویی؟

تو راه بندگی طی کن عزیز من، خدایی خوب میدانم

تو دعوت کن مرا با خود به اشکی، یا خدایی میهمانم کن

که من چشمان اشک آلوده ات را دوست میدارم

طلب کن خالق خود را، بجو ما را تو خواهی یافت

که عاشق میشوی بر ما و عاشق میشوم بر تو که

وصل عاشق و معشوق هم، آهسته میگویم، خدایی عالمی دارد

تویی زیباتر از خورشید زیبایم، تویی والاترین مهمان دنیایم

که دنیا بی تو چیزی چون تورا کم داشت

وقتی تو را من آفریدم بر خودم احسنت میگفتم

مگر آیا کسی هم با خدایش قهر میگردد؟

هزاران توبه ات را گرچه بشکستی؛ ببینم من تورا از درگهم راندم؟

که میترساندت از من؟ رها کن آن خدای دور؟!

آن نامهربان معبود. آن مخلوق خود را

این منم پروردگار مهربانت.خالقت. اینک صدایم کن مرا. با قطره ی اشکی

به پیش آور دو دست خالی خود را. با زبان بسته ات کاری ندارم

لیک غوغای دل بشکسته ات را من شنیدم

غریب این زمین خاکی ام. آیا عزیزم حاجتی داری؟

بگو جز من کس دیگر نمیفهمد. به نجوایی صدایم کن. بدان آغوش من باز است

قسم بر عاشقان پاک با ایمان

قسم بر اسبهای خسته در میدان

تو را در بهترین اوقات آوردم

قسم بر عصر روشن، تکیه کن بر من

قسم بر روز، هنگامی که عالم را بگیرد نور

قسم بر اختران روشن اما دور، رهایت من نخواهم کرد

برای درک آغوشم، شروع کن، یک قدم با تو

تمام گامهای مانده اش با من

تو بگشا گوش دل پروردگارت با تو میگوید

ترا در بیکران دنیای تنهایان. رهایت من نخواهم کرد

 

شعر از زنده یاد سهراب سپهری

مغز انسان هک شد

من مطلب زیر رو از یک سایت معتبر خوندم و هاج و واج موندم. نه به خاطر نوع عملش به خاطر توانایی انسان !


مغز انسان هک شدمحققان دانشگاه‌های 'آکسفورد' و 'کالیفرنیا' موفق به هک کردن مغز انسان و استخراج اطلاعات خصوصی از ذهن شدند.به گزارش سافت گذر به نقل ازآی تی آنالیز؛  از داوطلبان برای انجام این آزمایش امنیتی خواسته شد که یک قطعه به نام 'Emotiv BCI' را روی سر خود قرار دهند و در مقابل صفحه نمایش رایانه بنشینند.
در این حالت نقشه ذهنی این افراد و تمام رمزهایی که به خاطر سپرده‌ بودند مانند رمز عابر بانک وموارد دیگر در صفحه نمایش نشان داده ‌شد.
محققان با استفاده از این روش می‌توانند سیگنال‌های مغزی را دنبال کنند و داده‌های تصادفی را تا 40 درصد کاهش دهند.
هنگامی که این قطعه روی سر داوطلبان قرار دارد تراوشات اطلاعات ارزشمند منجر به پردازش سریعتر و آسان‌تر اطلاعات می‌شود.
محققان بر این باورند که با استفاه از این دستگاه به‌راحتی می‌توان به اطلاعات افراد حمله کرد و این موضوع برای پلیس در بازجویی متهم بسیار سودمند است.
هزینه این تجهیزات در حدود یک میلیون تومان برآورد شده است که نسبت به کارآیی آن بسیار ناچیز است.

شبکه های عصبی 2

شبکه های عصبی در مقابل کامپیوتر های معمولی
شبکه های عصبی نسبت به کامپیوتر های معمولی مسیر متفاوتی را برای حل مسئله طی می کنند . کامپیوتر های معمولی یک مسیر الگو ریتمی را استفاده می کنند به این معنی که کامپیوتر یک مجموعه از دستورالعمل ها را به قصد حل مسئله پی می گیرد. بدون اینکه، قدم های مخصوصی که کامپیوتر نیاز به طی کردن دارد، شناخته شده باشند کامپیوتر قادر به حل مسئله نیست. این حقیقت قابلیت حل مسئله ی کامپیوتر های معمولی را به مسائلی ،محدود می کند که ما قادر به درک آنها هستیم و می دانیم چگونه حل میشوند. اما اگر کامپیوتر ها می توانستند کار هایی را انجام دهند که ما دقیقا نمیدانیم چگونه انجام دهیم ، خیلی پر فایده تر بودند.
شبکه های عصبی اطلاعات را به روشی مشابه با کاری که مغز انسان انجام می دهد پردازش می کنند. آنها از تعداد زیادی از عناصر پرداز شی(سلول عصبی) که فوق العاده بهم پیوسته اند تشکیل شده است که این عناصر به صورت موازی باهم برای حل یک مسئله مشخص کار می کنند .شبکه های عصبی با مثال کار می کنند و نمی توان آنها را برای انجام یک وظیفه خاص برنامه ریزی کرد مثال ها می بایست با دقت انتخاب شوند در غیر این صورت زمان سودمند، تلف می شود و یا حتی بدتر از این شبکه ممکن است نا درست کار کند. امتیاز شبکه عصبی این است که خودش کشف می کند که چگونه مسئله را حل کند ، عملکرد آن غیر قابل پیش گویی است.
از طرف دیگر ، کامپیوتر های معمولی از یک مسیر مشخص برای حل یک مسئله استفاده می کنند . راه حلی که مسئله از آن طریق حل می شود باید از قبل شناخته شود و به صورت دستورات کوتاه و غیر مبهمی شرح داده شود. این دستورات سپس به زبان های برنامه نویسی سطح بالا برگردانده می شود و بعد از آن به کدهایی که کامپیوتر قادر به درک آنها است تبدیل می شود. به طور کلی این ماشین ها قابل پیش گویی هستند و اگر چیزی به خطا انجام شود به یک اشتباه سخت افزاری یا نرم افزاری بر می گردد.
شبکه های عصبی و کامپیوتر های معمولی با هم در حال رقابت نیستند بلکه کامل کننده یکدیگرند . وظایفی وجود دارد که بیشتر مناسب روش های الگو ریتمی هستند نظیر عملیات محاسباتی و وظایفی نیز وجود دارد که بیشتر مناسب شبکه های عصبی هستند . حتی فراتر از این ، مسائلی وجود دارد که نیازمند به سیستمی است که از تر کیب هر دو روش بدست می آید (بطور معمول کامپیوتر های معمولی برای نظارت بر شبکه های عصبی به کار گرفته می شوند ) به این قصد که بیشترین کارایی بدست آید.

شبکه های عصبی معجزه نمی کنند اما اگر خردمندانه به کار گرفته شوند نتایج شگفت آوری را خلق میکنند.

انسان و سلول های عصبی مصنوعی- در جستجوی شباهت ها

چگونه مغز انسان می آموزد ؟
مسائل زیادی راجع به این که مغز چگونه خود را برای پردازش اطلاعات آموزش می دهد، نا شناخته باقی مانده است بنابر این تئوری های فراوانی وجود دارد. در مغز انسان یک سلول سیگنال ها را از دیگران از طریق یک گروه از ساختار های ریز به نام dendrites جمع آوری می کند سلول عصبی جهش سریع فعالیت الکتریکی را در طول یک پایه بلند و نازک که axon نامیده میشود ، می فرستد که به داخل هزاران شاخه گسترش می یابد و کشیده می شود . در انتهای هر شاخه ، ساختاری که synapse نامیده می شود این فعالیت را ازaxon به اثرات الکتریکی تبدیل می کند که فعالیت یکaxon به صورت اثرات الکتریکی فعال کننده یا غیر فعال کننده تبدیل می شود که این کار باعث برانگیخته شدن یا آرام شدن سلول های عصبی مرتبط می شود. وقتی یک سلول عصبی پیام های فعال کننده را در یافت می کند، که بطور قانع کننده و وسیعی با پیام های ورودی غیر فعال کننده اش مقایسه شده باشد ،در این زمان این سلول نیز یک جهش از فعالیت الکتریکی را به داخل axon خودش می فرستد.
یاد گیر ی با تغییر تاثیر synapses اتفاق می افتد در نتیجه تاثیر یک سلول بر دیگران تغییر میکند.

از سلول های عصبی انسانی تا سلول های عصبی مصنوعی

ما این شبکه های عصبی را با تلاش اولیه در جهت یافتن خصوصیات اساسی سلول های عصبی و اتصالات آنها ، هدایت می کنیم. سپس بطور معمول یک کامپیوتر را برای شبیه سازی این خصوصیات برنامه ریزی می کنیم .اگر چه بدلیل اینکه دانش ما از سلول های عصبی ناقص است و قدرت محاسبات ما محدود است ، مدل های ما لزوما آرمان های خام و ناقصی از شبکه های واقعی سلول های عصبی است .

شبکه ی عصبی (Neural Network)

در سری جدید مطالب وبلاگ می خواهم بحث جدیدی در باره ی شبکه های عصبی آغاز کنم. این سری مطالب دنباله دار می باشد و هرچند وقت یکبار سعی می کنم مطالبی به صورت جزوه ای نیز برای دانلود قرار دهم.

یک شبکه عصبی مصنوعی چیست؟
یک شبکه عصبی مصنوعی (Artificial Neural Network (ANN)) ایده ای است برای پردازش اطلاعات که از سیستم عصبی زیستی الهام گرفته شده و مانند مغز به پردازش اطلاعات می پردازد . عنصر کلیدی این ایده ، ساختار جدید سیستم پردازش اطلاعات است. این سیستم از شمار زیادی عناصر پرداز شی فوق العاده بهم پیوسته تشکیل شده (neurons)که برای حل یک مسأله با هم هماهنگ عمل می کند.ANN ها ،نظیر انسانها ، با مثال یاد می گیرند . یک ANN برای انجام وظیفه های مشخص ، مانند شناسایی الگو ها و دسته بندی اطلاعات ، در طول یک پروسه یاد گیری ، تنظیم می شود . در سیستم های زیستی یاد گیری با تنظیماتی در اتصالات سیناپسی که بین اعصاب قرار دارد همراه است . این روش ANN ها هم می باشد.

سابقه تاریخی                   
به نظر می آید شبیه سازی های شبکه عصبی یکی از پیشرفت های اخیر باشد . اگرچه این موضوع پیش از ظهور کامپیوتر ها بنیان گذاری شده و حداقل یک مانع بزرگ تاریخی و چندین دوره مختلف را پشت سر گذاشته است. خیلی از پیشرفت های مهم با تقلید ها و شبیه سازی های ساده و ارزان کامپیوتری بدست آمده است. در پی یک دوره ابتدائی اشتیاق و فعالیت در این زمینه ، یک دوره ی بی میلی و بدنامی راهم پشت سر گذاشته است .

در طول این دوره سرمایه گذاری و پشتیبانی حرفه ای از این موضوع در پایین ترین حد خود بود ، پیشرفت های مهمی به نسبت تحقیقات محدود در این زمینه صورت گرفت . که بدین وسیله پیشگامان قادر شدند تا به گسترش تکنولوژی متقاعد کننده ای بپردازند که خیلی برجسته تر از محدودیت هایی بود که توسط Minsky و Papert شناسانده شد. Minsky و Papert ،کتابی را در سال 1969 منتشر کردند که در آن عقیده عمومی راجع به میزان محرومیت شبکه های عصبی را در میان محققان معین کرده بود و بدین صورت این عقیده بدون تجزبه و تحلیل های بیشتر پذیرفته شد. هم اکنون ، زمینه تحقیق شبکه های عصبی از تجدید حیات علایق و متناطر با آن افزایش سرمایه گذاری لذت می برد
اولین سلول عصبی مصنوعی در سال 1943 بوسیله یک neurophysiologist به نامWarren McCulloch و یک منطق دان به نام Walter Pits ساخته شد . اما محدودیتهای تکنولوژی در آن زمان اجازه کار بیشتر به آنها نداد.

 

چرا از شبکه های عصبی استفاده می کنیم ؟
شبکه های عصبی ، با قابلیت قابل توجه آنها در استنتاج معانی از داده های پیچیده یا مبهم ، میتواند برای استخراج الگوها و شناسایی روشهایی که آگاهی از آنها برای انسان و دیگر تکنیک های کامپیوتری بسیار پیچیده و دشوار است به کار گرفته شود. یک شبکه عصبی تربیت یافته می تواند به عنوان یک متخصص در مقوله اطلاعاتی ای که برای تجزیه تحلیل به آن داده شده به حساب آید.از این متخصص می توان برای بر آورد وضعیت های دلخواه جدید و جواب سؤال های " چه می شد اگر " استفاده کرد.

مزیتهای دیگر شبکه های عصبی 
یادگیری انطباق پذیر: قابلیت یاد گیری نحوه انجام وظایف بر پایه اطلاعات داده شده برای تمرین و تجربه های مقدماتی.
سازماندهی توسط خود: یک ANN می تواند سازماندهی یا ارائه اش را ، برای اطلاعاتی که در طول دوره یادگیری در یافت می کند، خودش ایجاد کند. عملکرد بهنگام(Real time ) : محاسبات ANN می تواند بصورت موازی انجام شود، و سخت افزارهای مخصوصی طراحی و ساخته شده است که می تواند از این قابلیت استفاده کند
تحمل اشتباه بدون ایجاد وقفه در هنگام کد گذاری اطلاعات : خرابی جزئی یک شبکه منجر به تنزل کارایی متناظر با آن می شود اگر چه تعدادی از قابلیت های شبکه ممکن است حتی با خسارت بزرگی هم باقی بماند.

دلنوشته اول

امروز بعد از تقریباً یکماه بارون رحمت خدا باریدن گرفت. ما ادم ها وقتی بارون میباره بعضی وقتا گلایه می کنیم اما...

باران را دوست دارم،زیرا با وجود محنت آدم ها بی منّت می بارد!

سلامی دوباره

با سلامی دوباره به همه ی عزیزان

مدت مدیدی بود که وبلاگ خودمو آپدیت نکرده بودم. چرا نشد بماند!

امیدوارم ازین به بعد بتونم با مطالب متنوع طری در خدمت شما باشم.

البته محتوای وبلاگ اندکی تغییر می کنه که در دوبخش دلنوشته ها و مطالب تخصصی مهندسی برق می باشد.

شما عزیزان می تونید هرگونه مطالب یا پروژه هایی که فکر می کنید مفیده برای بقیه به بنده ایمیل کنید تا با نام شما در وبلاگ قرار داده بشه.


با سلام خدمت همه شما عزیزان. در پست قبلی فقط جواب مسئله مشهور 8 وزیرو براتون گذاشتم. اما امروز می خوام روش حل مسئله مشهور 8 وزیرو و بطور کلی n وزیرو براتون شرح بدم.

این مسئله بدین صورته که شما باید 8 وزیرو طوری تو صفحه شطرنج قرار بدین تا هیچکدوم نتونه یکی دیگه رو برداره.جالبه بدونین که این مسئله تقریبا قدمتی به اندازه ابداع خود شطرنجهبرای همین معلوم نیست اولین با چه کسی اونو مطرح کرده.ولی ظاهراً آقای Karl Friedrich Gauss ( ریاضی دان آلمانی ) اونو برای اولین بار حل کرد.پیدا کردن تنها یک راه حل آنگونه که در ادامه می بینیم کار سختی نیست اما اگر بخواهیم همه راه حل ها رو بدست بیاریم دیگه کار خیلی سخت می شه.روش بازگشتی  ( Backtracking ) ه در طراحی سیستم های خبره کاربرد زیادی داره تنها راه حل شناخته شده برای این مسئله مشهوره. برای 8 وزیر ما 12 راه حل یکتا و با روش متقارن سازی ما 92 روش داریم.

حال شما مسئله رو در حالت کلی n وزیر در نشر بگیرین.اگر n  عددی اول باشه یک راه به راحتی با رسم یک خط راست در یک صفحه n*n محدود به وجود می یاد. تا زمانیکه هیچ دو خط راستی همدیگرو در بیشتر از یک نقطه قطع نمی کنن، خط مستقیم y= a*x+b  که برابر 1 یا 1- نیست می تونه یک راه حل باشه.طول عرض مختصات از 0 شروع می شه:

N=7 ; y=2x --à (0,0) , (1,2) , (2,4) , (3,6) , (4,1) , (5,3) , (6,5);

حتما می دونین که 8 = 2 * 4 ، بله به سواد خودتون شک نکنین چون صفحه ما بیشتر از 7 خونه نداره مجبور شدیم از اون 7 تا کم کنیم . (-:

با a= 2,3,4,5 و b=0,1,2,3,4,5,6 به راحتی می شه 28 راه حل پیدا کرد.

برای اعدادی که اول نیست یا به عبارتی مختلط هستن که می تونیم اونا رو به صورت n=p * q تعریف کنیم ، ما می تونیم با یک ضرب مستقیم از راه حل های p  وزیر  و  q  وزیر تموم راه حل ها رو بدست بیاریم.بدین صورت که هر وضعیت مکانی باری مسئه p وزیر یک راه حل هم برای مسئله q  وزیر به حساب می یاد.مثلاً برای 5*7=35 ما می تونیم 10*40 ̂ 7 + 40 * 10 ̂ 5 راه حی داشته باشیم. خیلی بزرگه نه؟

برای ایجاد یک راه حل در حالت کلی n بذارین در نظر بگیریم که یک سطح تقسیم شده به صورت j = 0,1,…,n-1 و i=0,1,…,n-1 داشته باشیم.

حال فرض کنید n یک عدد زوج باشه.داریم:

1)      if n is not 6k+2

j=2i+1, for 0 <=i< n/2

j=2i mod n, for n/2 <= i < n

 

2)      if n is not 6k

j= (n/2 + 2i-1) mod n, for 0 <= i < n/2

j=(n/2 + 2i+2) mod n ,for n/2 <= i < n

 

امیدوارم که مطلب تقریباً براتون روشن شده باشه.

راستی جالبه یه مطلب راجع به سوپر وزیر  (SuperQueen  ) به شما بگم. در نظر بگیرین علاوه بر حالت فوق وزیر ها نتونن از طریق حرکت اسب یا همون L معروف همدیگرو بزنن! به نظر شما این راه حل وجود داره؟ جالبه بدونین که این راه از صفحه 10 * 10 شروع می شه و در این صفحه تنها 1 مورد راه حل وجود داره!

پایین شما یک جدول از ره های ممکنه برای این مسئله می بینین. نظرتون چیه ؟؟؟!!!!!!!!!


Order       < -----  Ordinary Queens  ----- >       < ---- Superqueens ---- >         Exec
(“N”)     Total Solutions     Unique Solutions        Total Sol.     Unique Sol.      Time
------------------------------------------------------------------------------------------
1                       1                    1                1               1
2                       0                    0                0               0
3                       0                    0                0               0
4                       2                    1                0               0
5                      10                    2                0               0
6                       4                    1                0               0
7                      40                    6                0               0
8                      92                   12                0               0
9                     352                   46                0               0
10                    724                   92                4               1
11                  2,680                  341               44               6
12                 14,200                1,787              156              22
13                 73,712                9,233            1,876             239
14                365,596               45,752            5,180             653   0.2 sec.
15              2,279,184              285,053           32,516           4,089   1.9 sec.
16             14,772,512            1,846,955          202,900          25,411  11.2 sec.
17             95,815,104           11,977,939        1,330,622         166,463  77.2 sec.
18            666,090,624           83,263,591        8,924,976       1,115,871   9.6 min.
19          4,968,057,848          621,012,754       64,492,432       8,062,150  75.0 min.
20         39,029,188,884        4,878,666,808      495,864,256      61,984,976  10.2 hrs.
21        314,666,222,712       39,333,324,973    3,977,841,852     497,236,090  87.2 hrs.
22      2,691,008,701,644      336,376,244,042   34,092,182,276   4,261,538,564  31.9 days
23     24,233,937,684,440    3,029,242,658,210  306,819,842,212  38,352,532,487   296 days

Eight Queens Problem in Prolog

یکی از علاقه مندان به برنامه نویسی به Prolog به من ایمیل زدن و از من خواستند تا معمای جالب 8 وزیرو به Prolog  براشون بفرستم.

کفتم شاید به نظرتون جالب بیاد . برا همین مسئله 8 وزیر خیلی معروف که اکثر استادای نوگرا (: این برنامه خیلی قدیمی رو به دانشجوها برا حل کردن میدن رو با توضیح کانل در وبلاگ می ذارم. امیدوارم کمکتون کنه.

ابتدا به زبان Lisp :

;;;The following common lisp program is based on a solution given by
;;;Winston and Horn ("Lisp 3rd edition",1989, p.289, 538-539.)
;;;Significant improvements and alterations were made in all but the most
;;;primitive functions. To run, simply load file and type (queen n) where
;;;n is the width of board.

;discovers if a piece threatens another
(defun threat (i j a b)
(or (= i a)
(= j b)
(= (- i j) (- a b))
(= (+ i j) (+ a b))))


;discovers if a placement is OK
(defun conflict (n m board)
(cond ((endp board) nil)
((threat n
m
(first (first board))
(second (first board)))
t)
(t (conflict n m (rest board)))))


;;this now prints a board no matter what order it is presented in
(defun print-board (board)
; (sort board #'<= :key #'car)
(format t "~%*")
(print-horizontal-border board)
(format t "*")
(dotimes (row (length board))
(format t "~%|")
(dotimes (column (length board))
(if (= column (second (assoc row board)))

(format t " Q")
(format t " .")))
(format t " |"))
(format t "~%*")
(print-horizontal-border board)
(format t "*"))


(defun print-horizontal-border (board)
(dotimes (n (+ 1 (* 2 (length board))))
(format t "-")))




;;;The following is Winston/Horn's original queen-finding algorithm.
;;;It does not discriminate sets of solutions that are closed under rotation
;;;and reflection. Thus, a single solution can be equivalent to up to 8 other
;;;solutions.

(defun queen* (size &optional (board nil) (n 0) (m 0))
(unless (= m size)
;;Check for conflict in current row and column
(unless (conflict n m board)
(if (= (+ 1 n) size)
;;If all queens placed, prin solution:
(print-board (reverse (cons (list n m) board)))
;;Otherwise, proceed to next row:
(queen* size (cons (list n m) board) (+ 1 n) 0)))
;;In any case, try with another column
(queen* size board n (+ 1 m))))


;;; This version improves on Winston/Horn in that it displays only one instance
;;;of a closed set of solutions. Thus, 8-queens solution is reduced from 96 to 12.
;;;It achieves this by using a bindings list of already-found solutions. Since a change
;;;made at a deeper level of recursive search must be accessible to a higher level,
;;;the bindings list was made a global parameter that is re-initialized when queen is called.
;;; This required an auxilliary function, thus labels.
;;;NO-REPEATS predicate returns t if no member of the set of solutions, closed under reflection
;;;and rotation, is on the bindings list.
;;;Finally, the local variable new-board was assigned to save re-calculating that data.


(defun queen (size)
;;initialize bindings variable
(defparameter *bindings* nil)
;;declare auxilliary function
(labels ((n-queen (size &optional (board nil) (n 0) (m 0))
(unless (= m size)
(let ((new-board (cons (list n m) board)))
(unless (conflict n m board)
(if (= (+ 1 n) size)
;;check to see if solution is repeated
(if (no-repeats new-board (- size 1))
(progn ;only print solution if not already printed
(print-board new-board)
(setf *bindings* (append (list (sort-board new-board))
*bindings*)))) ;change bindings
(n-queen size (cons (list n m) board) (+ 1 n) 0))))
(n-queen size board n (+ 1 m)))))
;;call auxilliary function:
(n-queen size nil 0 0)))






(defun no-repeats (board size)
"looks to see if a permutation of current board has already been found--assumes a properly sorted bindings list"


;(format t "~&Bindings are: ~a" *bindings*)
;(format t "~&Equiv. Class is: ~a" (make-set board size))

(if (equal *bindings* nil) ;check to see if bindings in nil---find has a problem with this
t
(labels ((find-double (-eq-class-)

(if (equal nil -eq-class-)
t
(and (not (find (first -eq-class-) *bindings* :test #'equal)) ;find solution in bindings
(find-double (rest -eq-class-))))))
(find-double (make-set board size)))))






(defun reflect-horizontal (board size &optional (new-board nil))
"reflects across horizontal axis"

(if (equal board nil)
new-board
(reflect-horizontal (rest board) size (cons (list (- size (first (first board)))
(second (first board)))
new-board))))

(defun rotate-90 (board size &optional (new-board nil))
"reflects across diagonal axis"
(if (equal board nil)
(sort-board new-board)
(rotate-90 (rest board) size (cons (list (second (first board))
(- size (first (first board))))
new-board))))


(defun make-set (board size)
(let*((board1 (sort-board board))
(board2 (rotate-90 board1 size))
(board3 (rotate-90 board2 size))
(board4 (rotate-90 board3 size))
(board5 (reflect-horizontal board1 size))
(board6 (rotate-90 board5 size))
(board7 (rotate-90 board6 size))
(board8 (rotate-90 board7 size)))

(list board1
board2
board3
board4
board5
board6
board7
board8)))



(defun sort-board (board &optional (counter 0))
"sorts a board configuration into ascending order by rows"
(if (= counter (length board))
nil
(cons (assoc counter board)
(sort-board board (+ counter 1)))))


Now we see this solution in Prolog:
% eightqueen.pro
%

nocheck(_,[]).
nocheck(X/Y, [X1/Y1 | Rest]) :- X=\=X1,Y=\=Y1,
abs(Y1-Y) =\= abs(X1-X),
nocheck(X/Y,Rest).

legal([]).
legal([X/Y | Rest]) :-
legal( Rest),
% member(X,[1,2,3,4,5,6,7,8]),
member(X,[1,2,3,4,5,6,7,8]),
nocheck(X/Y,Rest).


if(Test,Then) :- Test,!,Then.
if(_,_,Else) :- Else.


manual(X) :- write('ls: list the solutions
cn: output the number of solutions
mp; display mapping on the board for solutions
\n
Enter Command:'),
read(X),
write('You enter:'), write(X), nl.

eightqueens :- manual(CMD),
eightqueens_body(CMD).

eightqueens_body(CMD) :-
CMD == 'mp',findall( X, eightqueens_map(X), L),
len(L,N),write('There are '),write(N),write(' solutions.').

eightqueens_body(CMD) :-
CMD == 'ls',findall( X, eightqueens_list(X), L),
showlist3(L,1), len(L,N),write('There are '),write(N),write(' solutions.').

eightqueens_body(CMD) :-
CMD == 'cn',findall( X, eightqueens_cnt(X), L),
len(L,N),write('There are '),write(N),write(' solutions.').

eightqueens_map(X) :-
X = [_/1,_/2,_/3,_/4,_/5,_/6,_/7,_/8],
legal(X),
showlist(X),
write('['),tab(1),
showlist2(X).

eightqueens_list(X) :-
X = [_/1,_/2,_/3,_/4,_/5,_/6,_/7,_/8],
legal(X).

%legal(X),
%write('['),
%showlist3(X).

eightqueens_cnt(X) :-
X = [_/1,_/2,_/3,_/4,_/5,_/6,_/7,_/8],
legal(X).

showlist([]) :- nl.
showlist([X|Y]) :- X = C/_, showboard(C,8), showlist(Y).

showlist2([]) :- write(']\n\n\n').
showlist2([X|Y]) :- write(X), tab(1), showlist2(Y).


showlist3([],0) :- nl.
showlist3([X|Y],N) :- N1 is N + 1, write(N), tab(1), write('['), showlist2(X), showlist3(Y,N1).

showboard(X,N) :- X = 0, write('Q|'), N1 is N -1, showboard2(N1).
showboard(X,N) :- X > 0, write(' |'), X1 is X - 1, N1 is N -1, showboard(X1,N1).

showboard2(N) :- N < 0, write('\n').
showboard2(N) :- N = 0, write(' |'),N1 is N -1, showboard2(N1).
showboard2(N) :- N > 0, write(' |'),N1 is N - 1, showboard2(N1).

len([],0) :- nl.
len([_|T], N) :- len(T, N1), N is 1 + N1.

A Brief History of Artificial Intelligence

اینم یه لینک دیگه که حیفم اومد نذارمش:

A Brief History of Artificial Intelligence

تاریخچه هوش مصنوعی یا A Brief History of Artificial Intelligence

شما عزیزان چه مقدار از تاریخچه هوش مصنوعی اطلاع دارین؟
فکر می کنین از چه تاریخی اولین جرقه های هوش مصنوعی زده شده؟
من متن کامل زبان اصلی شو براتون می ذارم اگه خواستین ترجمه شو بگین براتون می ذارم.

Introduction

old portrait

The intellectual roots of AI, and the concept of intelligent machines, may be found in Greek mythology. Intelligent artifacts appear in literature since then, with real (and fraudulent) mechanical devices actually demonstrated to behave with some degree of intelligence. Some of these conceptual achievements are listed below under "Ancient History."

After modern computers became available, following World War II, it has become possible to create programs that perform difficult intellectual tasks. From these programs, general tools are constructed which have applications in a wide variety of everday problems. Some of these computational milestones are listed below under "Modern History."

Ancient History

Greek myths of Hephaestus and Pygmalion incorporate the idea of intelligent robots. Many other myths in antiquity involve human-like artifacts. Many mechanical toys and models were actually constructed, e.g., by Hero, Daedalus and other real persons.

5th century B.C.

Aristotle invented syllogistic logic, the first formal deductive reasoning system.

13th century

Talking heads were said to have been created, Roger Bacon and Albert the Great reputedly among the owners.

Ramon Llull, Spanish theologian, invented machines for discovering nonmathematical truths through combinatorics.

15th century

Invention of printing using moveable type. Gutenberg Bible printed (1456).

15th-16th century

Clocks, the first modern measuring machines, were first produced using lathes.

16th century

Clockmakers extended their craft to creating mechanical animals and other novelties.

Rabbi Loew of Prague is said to have invented the Golem, a clay man brought to life (1580).

17th century

Early in the century, Descartes proposed that bodies of animals are nothing more than complex machines. Many other 17th century thinkers offered variations and elaborations of Cartesian mechanism.

Hobbes published The Leviathan, containing a material and combinatorial theory of thinking.

Pascal created the first mechanical digital calculating machine (1642).

Leibniz improved Pascal's machine to do multiplication & division (1673) and envisioned a universal calculus of reasoning by which arguments could be decided mechanically.

18th century

The 18th century saw a profusion of mechanical toys, including the celebrated mechanical duck of Vaucanson and von Kempelen's phony mechanical chess player, The Turk (1769).

19th century

Luddites (led by Ned Ludd) destroyed machinery in England (1811-1816).

Mary Shelley published the story of Frankenstein's monster (1818).

George Boole developed a binary algebra representing (some) "laws of thought."

Charles Babbage & Ada Byron (Lady Lovelace) worked on programmable mechanical calculating machines.

20th century - First Half

Bertrand Russell and Alfred North Whitehead published Principia Mathematica, which revolutionaized formal logic. Russell, Ludwig Wittgenstein, and Rudolf Carnap lead philosophy into logical analysis of knowledge.

Karel Capek's play "R.U.R." (Rossum's Universal Robots) produced in 1921 (London opening, 1923). - First use of the word 'robot' in English.

Warren McCulloch & Walter Pitts publish "A Logical Calculus of the Ideas Immanent in Nervous Activity" (1943), laying foundations for neural networks.

Arturo Rosenblueth, Norbert Wiener & Julian Bigelow coin the term "cybernetics" in a 1943 paper. Wiener's popular book by that name published in 1948.

Emil Post proves that production systems are a general computational mechanism (1943). See Ch.2 of Rule Based Expert Systems for the uses of production systems in AI.

Vannevar Bush published As We May Think (Atlantic Monthly, July 1945) a prescient vision of the future in which computers assist humans in many activities.

A.M. Turing published "Computing Machinery and Intelligence" (1950). - Introduction of Turing Test as a way of operationalizing a test of intelligent behavior.

Claude Shannon published detailed analysis of chess playing as search in "Programming a computer to play chess" (1950).

Isaac Asimov published his three laws of robotics (1950).

Modern History

1956 John McCarthy coined the term "artificial intelligence" as the topic of the Dartmouth Conference, the first conference devoted to the subject.

Demonstration of the first running AI program, the Logic Theorist (LT) written by Allen Newell, J.C. Shaw and Herbert Simon (Carnegie Institute of Technology, now Carnegie Mellon University).
1957 The General Problem Solver (GPS) demonstrated by Newell, Shaw & Simon.
1952-62 Arthur Samuel (IBM) wrote the first game-playing program, for checkers, to achieve sufficient skill to challenge a world champion. Samuel's machine learning programs were responsible for the high performance of the checkers player.
1958 John McCarthy (MIT) invented the Lisp language.

Herb Gelernter & Nathan Rochester (IBM) described a theorem prover in geometry that exploits a semantic model of the domain in the form of diagrams of "typical" cases.

Teddington Conference on the Mechanization of Thought Processes was held in the UK and among the papers presented were John McCarthy's Programs with Common Sense, " Oliver Selfridge's "Pandemonium," and Marvin Minsky's "Some Methods of Heuristic Programming and Artificial Intelligence."
Late 50's & Early 60's Margaret Masterman & colleagues at Cambridge design semantic nets for machine translation.
1961 James Slagle (PhD dissertation, MIT) wrote (in Lisp) the first symbolic integration program, SAINT, which solved calculus problems at the college freshman level.
1962 First industrial robot company, Unimation, founded.
1963 Thomas Evans' program, ANALOGY, written as part of his PhD work at MIT, demonstrated that computers can solve the same analogy problems as are given on IQ tests.

Ivan Sutherland's MIT dissertation on Sketchpad introduced the idea of interactive graphics into computing.

Edward A. Feigenbaum & Julian Feldman published Computers and Thought, the first collection of articles about artificial intelligence.
1964 Danny Bobrow's dissertation at MIT (tech.report #1 from MIT's AI group, Project MAC), shows that computers can understand natural language well enough to solve algebra word problems correctly.

Bert Raphael's MIT dissertation on the SIR program demonstrates the power of a logical representation of knowledge for question-answering systems
1965 J. Alan Robinson invented a mechanical proof procedure, the Resolution Method, which allowed programs to work efficiently with formal logic as a representation language. (See Carl Hewitt's history of logic programming).

Joseph Weizenbaum (MIT) built ELIZA, an interactive program that carries on a dialogue in English on any topic. It was a popular toy at AI centers on the ARPA-net when a version that "simulated" the dialogue of a psychotherapist was programmed.
1966 Ross Quillian (PhD dissertation, Carnegie Inst. of Technology; now CMU) demonstrated semantic nets.

First Machine Intelligence workshop at Edinburgh - the first of an influential annual series organized by Donald Michie and others.

Negative report on machine translation kills much work in Natural Language Processing (NLP) for many years.
1967 Dendral program (Edward Feigenbaum, Joshua Lederberg, Bruce Buchanan, Georgia Sutherland at Stanford) demonstrated to interpret mass spectra on organic chemical compounds. First successful knowledge-based program for scientific reasoning.

Joel Moses (PhD work at MIT) demonstrated the power of symbolic reasoning for integration problems in the Macsyma program. First successful knowledge-based program in mathematics.

Richard Greenblatt at MIT built a knowledge-based chess-playing program, MacHack, that was good enough to achieve a class-C rating in tournament play.
Late 60s Doug Engelbart invented the mouse at SRI.
1968 Marvin Minsky & Seymour Papert publish Perceptrons, demonstrating limits of simple neural nets.
1969 SRI robot, Shakey, demonstrated combining locomotion, perception and problem solving.

Roger Schank (Stanford) defined conceptual dependency model for natural language understanding. Later developed (in PhD dissertations at Yale) for use in story understanding by Robert Wilensky and Wendy Lehnert, and for use in understanding memory by Janet Kolodner.

First International Joint Conference on Artificial Intelligence (IJCAI) held in Washington, D.C.
1970 Jaime Carbonell (Sr.) developed SCHOLAR, an interactive program for computer-aided instruction based on semantic nets as the representation of knowledge.

Bill Woods described Augmented Transition Networks (ATN's) as a representation for natural language understanding.

Patrick Winston's PhD program, ARCH, at MIT learned concepts from examples in the world of children's blocks.
Early 70's Jane Robinson & Don Walker established influential Natural Language Processing group at SRI.
1971 Terry Winograd's PhD thesis (MIT) demonstrated the ability of computers to understand English sentences in a restricted world of children's blocks, in a coupling of his language understanding program, SHRDLU, with a robot arm that carried out instructions typed in English.
1972 Prolog developed by Alain Colmerauer.
1973 The Assembly Robotics group at Edinburgh University builds Freddy, the Famous Scottish Robot, capable of using vision to locate and assemble models.
1974 Ted Shortliffe's PhD dissertation on MYCIN (Stanford) demonstrated the power of rule-based systems for knowledge representation and inference in the domain of medical diagnosis and therapy. Sometimes called the first expert system.

Earl Sacerdoti developed one of the first planning programs, ABSTRIPS, and developed techniques of hierarchical planning.
1975 Marvin Minsky published his widely-read and influential article on Frames as a representation of knowledge, in which many ideas about schemas and semantic links are brought together.

The Meta-Dendral learning program produced new results in chemistry (some rules of mass spectrometry) the first scientific discoveries by a computer to be published in a refereed journal.

Mid 70's Barbara Grosz (SRI) established limits to traditional AI approaches to discourse modeling. Subsequent work by Grosz, Bonnie Webber and Candace Sidner developed the notion of "centering", used in establishing focus of discourse and anaphoric references in NLP.

Alan Kay and Adele Goldberg (Xerox PARC) developed the Smalltalk language, establishing the power of object-oriented programming and of icon-oriented interfaces.

David Marr and MIT colleagues describe the "primal sketch" and its role in visual perception.
1976 Doug Lenat's AM program (Stanford PhD dissertation) demonstrated the discovery model (loosely-guided search for interesting conjectures).

Randall Davis demonstrated the power of meta-level reasoning in his PhD dissertation at Stanford.
Late 70's Stanford's SUMEX-AIM resource, headed by Ed Feigenbaum and Joshua Lederberg, demonstrates the power of the ARPAnet for scientific collaboration.
1978 Tom Mitchell, at Stanford, invented the concept of Version Spaces for describing the search space of a concept formation program.

Herb Simon wins the Nobel Prize in Economics for his theory of bounded rationality, one of the cornerstones of AI known as "satisficing".

The MOLGEN program, written at Stanford by Mark Stefik and Peter Friedland, demonstrated that an object-oriented representation of knowledge can be used to plan gene-cloning experiments.
1979 Bill VanMelle's PhD dissertation at Stanford demonstrated the generality of MYCIN's representation of knowledge and style of reasoning in his EMYCIN program, the model for many commercial expert system "shells".

Jack Myers and Harry Pople at University of Pittsburgh developed INTERNIST, a knowledge-based medical diagnosis program based on Dr. Myers' clinical knowledge.

Cordell Green, David Barstow, Elaine Kant and others at Stanford demonstrated the CHI system for automatic programming.

The Stanford Cart, built by Hans Moravec, becomes the first computer-controlled, autonomous vehicle when it successfully traverses a chair-filled room and circumnavigates the Stanford AI Lab.

Drew McDermott & Jon Doyle at MIT, and John McCarthy at Stanford begin publishing work on non-monotonic logics and formal aspects of truth maintenance.
1980's Lisp Machines developed and marketed.

First expert system shells and commercial applications.
1980 Lee Erman, Rick Hayes-Roth, Victor Lesser and Raj Reddy published the first description of the blackboard model, as the framework for the HEARSAY-II speech understanding system.

First National Conference of the American Association of Artificial Intelligence (AAAI) held at Stanford.
1981 Danny Hillis designs the connection machine, a massively parallel architecture that brings new power to AI, and to computation in general. (Later founds Thinking Machines, Inc.)
1983 John Laird & Paul Rosenbloom, working with Allen Newell, complete CMU dissertations on SOAR.

James Allen invents the Interval Calculus, the first widely used formalization of temporal events.
Mid 80's Neural Networks become widely used with the Backpropagation algorithm (first described by Werbos in 1974).
1985 The autonomous drawing program, Aaron, created by Harold Cohen, is demonstrated at the AAAI National Conference (based on more than a decade of work, and with subsequent work showing major developments).
1987 Marvin Minsky publishes The Society of Mind, a theoretical description of the mind as a collection of cooperating agents.
1989 Dean Pomerleau at CMU creates ALVINN (An Autonomous Land Vehicle in a Neural Network), which grew into the system that drove a car coast-to-coast under computer control for all but about 50 of the 2850 miles.
1990's Major advances in all areas of AI, with significant demonstrations in machine learning, intelligent tutoring, case-based reasoning, multi-agent planning, scheduling, uncertain reasoning, data mining, natural language understanding and translation, vision, virtual reality, games, and other topics.

Rod Brooks' COG Project at MIT, with numerous collaborators, makes significant progress in building a humanoid robot
Early 90's TD-Gammon, a backgammon program written by Gerry Tesauro, demonstrates that reinforcement learning is powerful enough to create a championship-level game-playing program by competing favorably with world-class players.
1997 The Deep Blue chess program beats the current world chess champion, Garry Kasparov, in a widely followed match.

First official Robo-Cup soccer match featuring table-top matches with 40 teams of interacting robots and over 5000 spectators.
Late 90's Web crawlers and other AI-based information extraction programs become essential in widespread use of the world-wide-web.

Demonstration of an Intelligent Room and Emotional Agents at MIT's AI Lab. Initiation of work on the Oxygen Architecture, which connects mobile and stationary computers in an adaptive network.
2000 Interactive robot pets (a.k.a. "smart toys") become commercially available, realizing the vision of the 18th cen. novelty toy makers.

Cynthia Breazeal at MIT publishes her dissertation on Sociable Machines, describing KISMET, a robot with a face that expresses emotions.

The Nomad robot explores remote regions of Antarctica looking for meteorite samples.
 



بررسی عدم قطعیت در سیستم های خبره

قبل از آغاز بحث باید بگم که تا به حال چندبار ازم خواسته شده تا فایل هایی رو که قبلا گذاشتم رو دوبار ه بذارم.باید بگم که متاسفانه upload center خودش حذف میکنه ، اگه کسی جایی سراغ داره که فایلو حذف نمی کنه به من بگه تا بذارم اونجا.
بعد یه گله ای بکنم از دوستان.خیلی ها به من ایمیل زدن و از من کمک خواستن. منم با کمال میل تا اونجا که ممکن بود دریغ نکردم ولی این دوستان با مرام نه یه پیامی گذاشتن و نه اینکه حداقل از پیاین نامه شون برام مطلبی فرستادن تا بقیه هم استفاده کنن.
بازم امیدوارم مطالبم کمکی باشه

4-1 )  تسلسل پس رونده با عدم قطيت [1]

در بخش قبل ديده‌ايم كه سيستم‌هايي با تسلسل پس رونده براي حل مسايل از نوع انتخاب ساخته يافته [2] مناسب هستند سيستم Bird يك مثال خوب برايش بود. اما اين سيستم اين پندار را بوجود مي‌آورد كه همه‌ي اطلاعات كاملاً درست‌ يا غلط مي‌باشند. در دنیاي حقيقي همواره يك عدم قطعيتي بهمراه قواعدي كه خبره استفاده مي‌كند، بهمان نسبت كه براي كاربر وجود دارد، مي‌باشد.

براي مثال در سيتم Bird ممكن است كاربر يك albatross در هواي گرگ و ميش مشاهده كرده است، اما قادر نبوده است تا بدرستي تشخيص دهد كه رنگ‌ پرنده سفيد بوده است يا سياه. سيستم خبره بايد قادر باشد تا با چنين شرايطي مواجه شود و گزارش دهد كه پرنده ممكن است layson يا blacn footed albatross بوده باشد.

قواعد نيز مي‌توانند عدم قطيعتي با خود داشته باشند براي مثال يك اردك قهوه‌اي خالدار مي‌تواند يك اردك وحشي را با 80% قطعيت تعيين  كند.

اين بخش يك سيستم خبره را كه clam ناميده مي‌شود و تسلسل پس رونده با عدم قطعيت را در بردارد تشريح مي‌كند. استفاده از عدم قطعيت پروسه‌ي استنتاج را از آنچه بوسيله‌ي prolog بيان شده بود، متفاوت مي كند. از اين لحاظ Clam  فرمت قواعد و موتور استنتاج مخصوص به خود را دارد.

 

4-2 ) فاكتورهاي قطعيت [3]

رايج‌ترین طرح براي كار با عدم قطعيت نسبت دادن فاكتور قطعيت به هر قسمت از اطلاعات در سيستم است. موتور استنتاج بصورت توماتيك فاكتورهاي قطعيت را به محض اجراي استنتاج آپديت [4] كرده و نگهداري [5] مي‌كند.

در ابتدا بياييد به مثالي با استفاده از clam نگاهي بيندازيم. فاكتورهاي قطعيت (كه با CF نمايش داده مي‌شوند) اعداد صحيحي [6] از 100- براي نمايش False تا +100 براي True مي‌باشند. خطوط زير يك پايگاه دانش كوچك از Clam مي‌باشند كه براي تشخيص اينكه ماشين روشن نخواهدشد طراحي شده‌اند. اين كدها بعضي از رفتارهاي يك طرح براي كار با عدم قطعيت را نمايش مي‌دهد.

goal problem.

rule 1

if not turn_over and
battery_bad

then problem is battery.

rule 2

if lights_weak

then battery_bad cf 50.

rule 3

if radio_weak

then battery_bad cf 50.

rule 4

if turn_over and
smell_gas

then problem is flooded cf 80.

rule 5

if turn_over and
gas_gauge is empty

then problem is out_of_gas cf 90.

rule 6

if turn_over and
gas_gauge is low

then problem is out_of_gas cf 30.

 

ask turn_over

menu (yes no)

prompt 'Does the engine turn over?'.

ask lights_weak

menu (yes no)

prompt 'Are the lights weak?'.

ask radio_weak

menu (yes no)

prompt 'Is the radio weak?'.

ask smell_gas

menu (yes no)

prompt 'Do you smell gas?'.

ask gas_gauge

menu (empty low full)

prompt 'What does the gas gauge say?'.

 

استنتاج از تسلسل پس رونده مشابه prolog استفاده مي‌كند. goal بيان مي‌كند كه يك مقدار بايد براي خاصيت problem پيدا شود. قاعده‌ي 1 باعث مي‌شود كه زير هدف bad – battery تعقيب شود (درست مثل prolog) فرمت قاعده اضافه كردن فاكتور قطعيت را امكان مي‌دهد. براي مثال قواعد 5 و 6 درجات مختلف اطمينان را كه كدام مي‌تواند نتيجه بگيرد كه ماشين بنزین ندارد، ممكن مي‌كند. عدم قطعيت از عدم اطمينان ذاتي در باك بنزين ناشي مي‌شود. قواعد 2 و 3 اين گواه را ارائه مي‌كنند كه باتري در شرايط بدي است، اما هيچكدام‌شان قطعي نيستند.

 

4-3 ) عدم قطعيت در قاعده [7]

چيزي كه به تبع اجراي برنامه بوجود مي‌آيد يك مطالعه‌ي ساده از نتيجه‌گيري با سيستم خبره‌ي ماشين است:

consult, restart, load, list, trace, how, exit

:consult

Does the engine turn over?

: yes

Do you smell gas?

: yes

What does the gas gauge say?

empty

low

full

: empty

problem-out_of_gas-cf-90

problem-flooded-cf-80

done with problem

 

توجه كنيد كه برخلاف prolog استنتاج بعد از پيدا كردن يك مقدر ممكن براي مسئله، نايستاده است. اين برنامه همه‌ي مشكلات منطقي را پيدا مي‌كند و آنها را با قطعيتي كه وابسته به آنهاست نمايش مي‌دهد.

همانطور كه پيداست، اين فاكتورهاي قطعيت، يكسري مقادير احتمالي نيستند اما بسادگي يكسري از درجات قطعيت را به هر جواب مي‌دهند.

 

 

 

4-4 ) عدم قطعيت كاربر [8]

ديالوگ زير نشان مي‌دهد چگونه عدم قطعيت كاربر مي‌تواند وارد سيستم شود :

:consult

Does the engine turn over?

: yes

Do you smell gas?

: yes cf 50

What does the gas gauge say?

empty

low

full

: empty

problem-out_of_gas-cf-90

problem-flooded-cf-40

done with problem

 

توجه كنيد كه كار بر تنها 50% اطمينان داشت كه بوي بنزين را استشمام مي‌كند. اين باعث مي‌‌شود كه سيستم تنها 50% اطمينان حاصل كند كه problem is flooded".



[1] baekward chaining with uncertainty

[2] structured selection type

[3] certainty Factors

[4] update

[5] maintenance

[6] integer

[7] Rule uncertainty

[8] user unertainty

 

 

سلام من برگشتم

3-8 ) سئوال از كاربر

گزاره‌‌ي ask بايد به كمك كاربر درستي يا نادرستي جفت‌هاي attribute – value را تعيين كند. براي تعيين كردن اينكه خواص قابل پرسش هستند يا نه، نياز است تا برنامه اصلاح شود. اين كار به آساني با ساختن قواعد براي آن خواص كه نياز به سئوال كردن دارند. انجام مي‌شود:

eats(X):- ask(eats, X).

feet(X):- ask(feet, X).

wings(X):- ask(wings, X).

neck(X):- ask(neck, X).

color(X):- ask(color, X).

 

حال اگر سيستم هدف پيدا كردن colour (white) را دارد، ask را فرا خوانی خواهد كرد به جاي اينكه به برنامه نگاه كند. اگر ask (colour , white) موفق شود قانون colour (white) موفق خواهد بود. ساده‌ترين مدل ask كاربر را با خاصيت و ارزش در خواست شده آگاه مي‌كند و تأئيد يا تكذيب اطلاعات پيشنهاد شده را جستجو مي‌كند:

ask(Attr, Val):-
write(Attr:Val),
write('? '),
read(yes).

 

اگر جواب yes باشد read درست خواهد بود و اگر كاربر هر چيزي غير از yes تايپ كند رد خواهد شد. اكنون برنامه مي‌تواند بدون داشتن اطلاعات درون خود سيستم اجرا شود. اكنون برنامه جستجوي مشابه‌اي را براي پرنده شروع مي‌كند. اما اكنون كاربر براي مشخص كردن اينكه بعضي از attribute – value درست هستند يا نه، مسئول است. ديالوگ زير نشان مي‌دهد سيستم در اين حالت چگونه اجرا مي‌شود:

?- bird(X).

nostrils : external_tubular? yes.

live : at_sea? yes.

bill : hooked? yes.

size : large? yes.

wings : long_narrow? yes.

color : white? yes.

X = laysan_albatross

 

يك مشكل براي اين روش وجود دارد. اگر كاربر براي آخرين سئوال جواب no بدهد قاعده‌ي bird (layson – albatross) رد خواهد شد و عمل پيمايش معكوس [1] باعث مي‌شود تا قاعده‌ي    (black – footed- albat) bird امتحان شود. اولين زير هدف قاعده‌ي جديد، prolog را مجبور مي‌كند تا سعي كند Ramify (albatross) را دوباره به اثبات برساند و سئوالي را كه يكبار پرسيده است دوباره بپرسد. پس بهتر است سيستم جواب‌ها را به خاطر بسپارد تا اينكه آنها را دوباره بپرسد.

3-9 ) به خاطر سپاري جواب [2]

گزاره‌ي جديد known براي بخاطر سپاري پاسخ كاربران به سئوال استفاده مي‌شود.

اين گزاره‌ي مستقيماً در برنامه مشخص نشده است، اما نسبتاً بصورت دينامیكي هرجا كه ask يك اطلاعات جديد راه از كاربر دريافت مي‌كند، استفاده شده است. هر زمان كه ask فراخواني مي‌شود، ابتدا چك مي‌كند كه پاسخ در حال حاضر بصورت yes يا no شناخته شده است يا نه اگر پاسخ در حال حاضر معلوم نباشد پس ask زمانيكه پاسخ را از كاربر گرفته است، اظهار نظر قطعي مي‌كند .سه آرگومان known اينها هستند: yes/no، attribute و value. مدل جديد ask چيزي شبيه اين است:

ask(A, V):-
known(yes, A, V), % succeed if true
!. % stop looking

ask(A, V):-
known(_, A, V), % fail if false
!, fail.

ask(A, V):-
write(A:V), % ask user
write('? : '),
read(Y), % get the answer
asserta(known(Y, A, V)), % remember it
Y == yes. % succeed or fail

 

 

3-9-1 ) جواب‌هاي چند ارزشي  [3]

سطح ديگري از توانايي در استفاده از known وجود دارد. اكنون گزاره‌ي ask اينكه هر جفت خاص از attribute- value درست است يا نه را پذيرفته است. اين بدين معني است که کاربر به هر دو شناسه ی color:white و color:black ،جواب yes بدهد، در نتيجه‌ي آن ما به يك attribute خاص اجازه مي دهيم تا چند ارزشي باشد. اين موضوع مي‌تواند تنها براي بعضي از خواص درست باشد. بهترين راه براي مواجهه با اين مورد، اضافه كردن گزاره‌ي ديگري به برنامه است كه تعيين مي‌كند كداميك از خصوصيات چند ارزشي هستند:

multivalued (voice). Multivalued (feed)

 

3-10 ) يك پوسته‌ي ساده [4]

برنامه‌ي شناسايي پرنده دو جزء مجزا دارد: پايگاه دانش ، كه شامل اطلاعات مشخص شده درباره‌ي شناسايي پرنده است و گزاره‌ها كه روابط را كنترل مي‌كنند. با جدا كردن اين دو بخش مي‌توان يك پوسته خلق كرد كه مي‌تواند با هر پايگاه داده ديگري كار كند. براي مثال يك سيستم خبره‌ي جديد مي‌تواند ساخته شود كه بتواند ماهي را شناسايي كند اين برنامه مي‌تواند با همان رابط كاربري كه براي سيستم شناسايي پرنده طراحي شده بود كار كند.

حداقل تغيير مورد نياز براي شكستن دو بخش به دو ماژول [5] يک گزاره‌ي سطح بالاست كه شناسايي را شروع مي‌كند. ابتدا اينكه در حالت كلي چه چيزي دارد شناسايي مي‌شود ، تعيين مي‌شود و پوسته سعي مي‌كند تا يك گزاره‌ي كلي كه top – goal ناميده مي‌شود را حل كند. هر پايگاه دانش بايد يك “top – goal" داشته باشد تا يك goal را براي تأئيد شدن فراخواني كند.

 

براي مثال :  top- goal (x): bird(x)

اكنون اين اولين گزاره در پايگاه دانش درباره‌ي پرندگان است. در ضمن پوسته يك گزاره دارد كه solve ناميده مي‌شود كه ابتدا مقدمه چيني [6] مي‌كند و سپس براي top – goal مورد نظر مسئله را حل مي‌كند. مثل:

solve :-
abolish(known, 3),
define(known, 3),
top_goal(X),
write('The answer is '), write(X), nl.

solve :-
write('No answer found.'), nl.

 

گزار‌ه‌ي abolish تعبيه شده در خود برنامه براي استخراج هر known قبلي از سيستم زمانيكه يك نتيجه‌ي جديد شروع شده است، استفاده مي‌شود.

اين كار باعث مي‌شود تا كاربر از چند بار فراخواني solve در يك بار اجراي برنامه بي‌نياز گردد.

پس بطور خلاصه گزاره‌هاي سيستم شناسايي پرنده به دو ماژول تقسيم شده‌اند. يك‌سري كه در پوسته قرار دارند، Native ناميده مي‌شوند.

solve رایزنی براي حل مسئله را شروع مي‌كند.

ask سوال‌هاي ساده‌اي از كاربر مطرح مي‌كند و جواب‌هاي را به خاطر مي‌سپارد. 

 menuask به كاربر منويي براي انتخاب ارائه مي‌كند.

و يك‌سري ديگر از گزاره‌ها كه در پايگاه دانش هستند.

“top – goal" مهم‌ترين هدف را در پايگاه دانش معيني مي‌كند.

- قواعدي براي انتخاب هر آنچه كه پايگاه دانش براي آن ساخته شده است (مثل ... bird , family)

- قواعدي براي خواص كه بايد توسط كاربر فراهم شوند ( مثل color , size)

malti – valaed: تعيين مي‌كند كدام خاصيت مي‌تواند چند ارزشي باشد.

براي استفاده از اين پوسته در prolog، هر دوي پوسته و پايگاه دانش بايد با هم همفكري كنند سپس جستجو براي حل مسئله شروع مي‌شود:

?- consult(native).

yes

?- consult('birds.kb').

yes

?- solve.

nostrils : external_tubular?

...

 

3-11 ) حلقه‌ي دستور [7]

پوسته مي‌تواند با داشتن حلقه‌ي دستور سطح بالاي go براي اجراي يك دستور فراخواني مي‌شود اين به نام دستورات اجازه مي‌دهد تا از گزاره‌هاي واقعي prolog كه دستور را اجرا مي‌كنند، متفاوت باشند. براي مثال دستور رايج براي اجراي يك استنتاج consult است، در حاليكه consult نام يك گزاره‌ي داخلي در prolog است. كه بصورت زير است:

go :-
greeting,
repeat,
write('> '),
read(X),
do(X),
X == quit.

greeting :-
write('This is the Native Prolog shell.'), nl,
write('Enter load, consult, or quit at the prompt.'), nl.

do(load) :- load_kb, !.

do(consult) :- solve, !.

do(quit).

do(X) :-
write(X),
write('is not a legal command.'), nl,
fail.

 

گزاره‌ي go از يك حلقه‌ي رد و تكرار براي ادامه دادن تا زمانيكه كاربر دستور quit را تا يپ كند، استفاده مي‌كند گزاره‌ي do يك مكانيسم ساده را فراهم مي‌كند تا دستورات كاربر را به گزاره‌هايي كه در برنامه اجرا مي‌شوند، متصل كند تنها گزاره‌ي جديد load – kb است كه با پايگاه دانش مجدداً برقراري ارتباط كرده و همفكري مي‌كند كه چيزي مثل اين است:

load_kb :-
write('Enter file name: '),
read(F),
reconsult(F).

 

دو دستور ديگر كه در اينجا مي‌تواند اضافه شود:

help: ليتي از دستورهاي مجاز را نمايش مي‌دهد.

List: همه ی known هاي مقدار‌دهي شده در طول نتيجه‌گيري را ليست مي‌كند كه در عيب‌يابي مفيد است.

خلاصه: مثال فوق نشان مي‌دهد كه قواعد محلي prolog مي‌توانند بعنوان زبان تشريحي براي ارائه دانش در يك سيستم خبره استفاده شوند همچنين مثال نشان مي‌دهد كه prolog مي‌تواند به عنوان يك زبان براي ساختن رابط كاربر براي سيستم‌هاي خبره استفاده شود.

 



[1] bachtracking

[2] remembering answers

[3] malti – valued answers

[4] A Simple Shell

[5] modul

[6] housekeeping

[7] command loop

سلام به همه ی عزیزان

امروز می خوام به شما وبلاگ دوست بسیار خوب و عزیزم دکتر عادل حقانی رو به شما معرفی کنم.

در این وبلاگ شما می توانید آخرین کتابهای مرتبط با دنیای برق و الکترونیک رو دانلود کنید.

دانلود کتابهای برقی

قواعد برای برقراری ارتباط

3-6 ) قواعد براي ديگر ارتباطات [1]

canada goose [2] مي‌تواند براي اضافه كردن پيچيدگي بيشتر به سيستم اضافه شود. تا زمانيكه اين پرنده تابستان خود را در كانادا بسر مي‌برد و زمستانش را در آمريكاست شناسايي‌اش شامل “كجا ديده‌ام؟” و “در چه فصلي“ می شود. دو قاعده متفاوت براي در برگفتن اين دو شرط، نياز خواهد شد.

bird(canada_goose):-
family(goose),
season(winter),
country(united_states),
head(black),
cheek(white).

bird(canada_goose):-
family(goose),
season(summer),
country(canada),
head(black),
cheek(white).

اين اهداف مي‌توانند به ديگر گزاره‌ها در يك دسته‌بندي متفاوتي اشاره كنند:

country(united_states):- region(mid_west).

country(united_states):- region(south_west).

country(united_states):- region(north_west).

country(united_states):- region(mid_atlantic).

country(canada):- province(ontario).

country(canada):- province(quebec).

region(new_england):-
state(X),
member(X, [massachusetts, vermont,
....]).

region(south_east):-
state(X),
member(X, [florida, mississippi,
....]).

 

پرندگان ديگري وجود دارند كه به قواعد چندگانه براي خصوصيات متفاوت دو جنس نر و ماده نياز دارند براي مثال mallard [3] سري سبز دارد و ماده‌ي آن قهوه‌اي خالدار:

bird(mallard):-
family(duck),
voice(quack),
head(green).

bird(mallard):-
family(duck),
voice(quack),
color(mottled_brown).

 

اساساً هر نوع از شرايط شناسايي در يك كتاب از پرندگان، مي‌تواند به آسانی به صورت قاعده‌اي در prolog بيان شود كه اين قواعد پايگاه دانش سيستم خبره را تشكيل مي‌دهند. تنها مشكل براي برنامه، رابط كاربر است كه نياز دارد تا اطلاعات بعنوان حقايق وارد سيستم شوند.

3-6-1 ) رابط كاربر [4]

سيستم مي‌تواند بطور قابل ملاحظه‌اي با فراهم نمودن يك رابط كاربر بطوريكه زمانيكه نياز به اطلاعات است آنرا به كاربر اعلان كند، پيشرفت كند در مقايسه با اينكه كاربر مجبور باشد تا اطلاعات را بصورت پيشاپيش وارد كند.

 

3-7 ) جفت‌هاي attribute – value

قبل از پرداختن به پرسش، فهميدن ساختار اطلاعات كه درباره‌ي آن سوال خواهد شد ضروري است. همه‌ي اطلاعات بصورت “attribute – value" در آمده‌اند براي مثال يك پرنده از نوع مرغابي وحشي است، اگر ارزش‌هاي [5] زير براي اين پرنده‌ي انتخاب شده درنظر گرفته شوند:

attribute  value

family  buck

voice  quack

head  grean

اين يكي از ساده‌ترين مدل‌ها، براي ارائه‌ي اطلاعات در يك سيتسم خبره مي‌باشد و لی براي  بسياري از كاربردها مناسب است، نمايش‌هاي پيچيده‌تر مي‌توانند سه‌تايي                    “object – attribute- value" داشته باشند، درجايیكه attribute – value به object-هاي متعدد در يك سيستم گره مي‌خورند. براي كارما مدل اطلاعات ساده‌ي attribute – value كافي و مناسب خواهد بود. اين ساختار اطلاعات در prolog با گزاره‌هايي كه از نام  گزاره براي ارائه‌ي خواص[6] بعنوان شرايطي براي امتحان در مدل‌سازي prolog مراجعه مي‌كنند. براي مثال قاعده براي mallard شرط head (green) را در برداشت. البته تا زمانيكه ما از prolog استفاده مي‌كنيم. غني‌سازي كامل [7] ساختار اطلاعات در prolog مي‌تواند استفاد شود.

بخش آخر درباره‌ي يك سيستم كه استفاده‌ي كامل از prolog ، از طريق يك سيستم را براي ما روشن مي‌كند. بحث مي‌كند بهرحال ايده‌ي پايه‌اي attribute – value براي بسياري از سيستم‌هاي خبره كاربرد وسيعي دارد و استفاده از آن بدون تناقض با اصل سيستم خبره، استفاده از خصوصياتي مثل رابط كاربر را بسيار ساده مي‌كند.



[1] Rules for other relations

[2] غاز كانادايي

[3] مرغابي وحشی نر

[4] uset Interface

[5] values

[6] attribute

[7] full reachness

Prolog Training

3-1 ) مقدمه

Prolog يك موتور رابط با تسلسل پس رونده  [1] دارد كه مي‌تواند تا حدودي بعنوان ابزار سيستم خبره استفاده شود. قواعد در prolog براي ارائه‌ي دانش [2] استفاده مي‌شوند و موتور رابط[3]  Prolog براي استنتاج [4] استفاده مي‌شود. ديگر اجزاي سيستم مثل رابط كاربر[5]  بايد به زبان برنامه‌نويسي prolog كدبندي شوند. موتور رابط يك تسلسل پس رونده‌ي ساده دارد هر قاعده يك هدف [6] چند زير هدف [7] دارد كه بعضي از آنها تأیيد مي‌شوند و بعضي ديگر رد مي‌شوند اما هيچ عدم اطمينان به نتيجه‌ي استنتاج سيستم خبره وجود ندارد.

ساختار قواعد و استرانژي استنتاج براي بسياري از سيستم‌هاي خبره كافي و مناسب است تنها امكان مکالمه با كاربر بايد به سيستم اضافه شود تا يك سيستم خبره ی ساده ساخته شود. ما از اين خصوصيات ساده استفاده مي‌كنيم تا در اين بخش يك برنامه‌ي ساده كه Bird ناميده مي‌شود را طراحي كنيم و به كمك آن نوع پرندگان را شناسايي كنيم.

 

 

 

 

 3-2 ) سيستم شناسايي پرنده [8]

سيستمي كه نوع پرندگان را شناسايي مي‌كند براي تشريح يك سيستم خبره در prolog استفاده مي‌شود. قواعد سيستم بگونه‌اي طراحي شده‌اند تا چگونگي ارائه انواع مختلف دانش را در مقايسه با عرضه داشتن اطلاعات دقيق را تشريح كنند.

 

3-3 ) فرمت قواعد [9]

همانطور كه مي‌دانيم قواعد سيستم‌هاي خبره معمولاً بصورت زير نوشته مي‌شوند.

If firs premise and second premise ... THEN conclusion

بخش IF با نام LHS[10] و بخش THEN با نام RHS[11] شناخته شده‌اند. از لحاظ معنایی قواعد فوق در prolog به صورت زير نمايش داده مي‌شوند:

Conciusion:-

First premise

Second premise

……

توجه كنيد تا زمانيكه گرامر [12] در Prolog واقعاً بصورت IF , THEN است. ولی LHS , و RHS در سمت‌هاي كاملاً مخالف قرار مي‌گيرند، قضيه مقداري گيج كننده خواهد بود.

 

3-4 ) قواعد در مورد پرندگان

اساسي‌ترين قواعد در سيستم، انواع مختلف پرندگان را مشخص مي‌كند. ما مي‌توانيم ساختن سيستم را فوراً با چند قاعده شروع كنيم. با استفاده از فرمت عادي IF , THEN يك قاعده براي شناسايي نوع خاص از Albatross [13] شكل زير است:

IF family  is albatross and colour is white

THEN bird is laysan – albatross

قاعده فوق در prolog بصورت زير نمايش داده مي‌شود:

bird (laysan – albatross):

Ramily (albatross),

Coloar (white).

قواعد زير بين دو نوع از Swan , Albatross [14] تميز قائل مي‌شوند آنها قسمت های شرطی برای گزاره ی "bird" هستند:

bird(laysan_albatross):-
family(albatross),
color(white).

bird(black_footed_albatross):-
family(albatross),
color(dark).

bird(whistling_swan) :-
family(swan),
voice(muffled_musical_whistle).

bird(trumpeter_swan) :-
family(swan),
voice(loud_trumpeting).

 

 به منظور موفقيت اين قواعد براي تشخيص دو نوع پرنده نياز خواهيم داشت تا حقايق درباره‌ي يك پرنده‌ي خاص براي شناسايي توسط سيستم را ذخيره كنيم. براي مثال اگر ما حقايق زير را به برنامه‌ اضافه كنيم، داريم:

family (albatross)

colour (bark)

پرسش مقابل مي‌تواند براي شناسايي پرنده استفاده شود:

?- bird(X).

X = black_footed_albatross

 

توجه داشته باشيد كه در اين مرحله‌ي خيلي ابتدايي يك برنامه‌ي كامل prolog وجود دارد كه به عنوان تابعي از سيستم خبره براي تميز دادن [15] بين اين چهار پرنده عمل مي‌كند.

رابط كاربر، رابط مفسر براي prolog است و اطلاعات ورودي بصورت مستقيم در برنامه‌ ذخيره مي‌شوند.

3-5 ) قواعد براي ارتباط با سلسله مراتبي [16]

قدم بعدي در ساختن سيستم، ارائه رتبه‌بندي طبيعي سيستم طبقه‌بندي پرنده مي‌باشد. اين بايد شامل قواعدي براي شناسايي خانواده و دسته‌‌ي پرنده باشد. در ادامه‌ي كد مربوط به swan , Albatross گزاره‌ها [17] براي دسته[18]  ، خانواده [19]  به صورت زير مي‌‌باشند:

order(tubenose) :-
nostrils(external_tubular),
live(at_sea),
bill(hooked).

order(waterfowl) :-
feet(webbed),
bill(flat).

family(albatross) :-
order(tubenose),
size(large),
wings(long_narrow).

family(swan) :-
order(waterfowl),
neck(long),
color(white),
flight(ponderous).

 

اكنون سيستم خبره ، albatross را با ملاحظات پايه‌اي بيشتري شناسايي خواهد كرد. در سيستم اوليه مستندات براي family بعنوان يك حقيقت ساده اجرا شده بودند. اكنون family به عنوان يك قاعده اجرا مي‌شود اكنون در اين سيستم حقايق مي‌توانند اطلاعات پايه‌اي بيشتري را ارائه دهند :

nostrils(external_tubular).

live(at_sea).

bill(hooked).

size(large).

wings(long_narrow).

color(dark).

 

 

براي شناسايي پرنده داريم:

? – bird (x)

x= black – footed – albatross

تا كنون قواعد تنها خواص پرندگان را مختلف را بيان مي‌كردند و سيستم طبقه‌بندي مرتبه‌اي بود. اين نوع از سازماندهي مي‌تواند در زبانهاي متداول‌تري، بهمان خوبي كه در prolog يا ديگر زبانهاي برمبناي قواعد استفاده مي‌شوند بكار گرفته شوند. شكل زير ارتباط بين بعضي از قواعد را در سيستم شناسايي پرنده را نشان مي‌دهد.



[1] backward chaining

[2] knowledge representation

[3] interface engine

[4] inference

[5] user interface

[6] Goal

[7] sub – goal

[8] Bird identtification system

[9] Rule format

[10] Left Hand side

[11] Right Hand Side

[12] syntax  

[13] نوعي مرغابي دريايي

[14] قو

[15] distinguish

[16] hierarchical relation

[17] predicates

[18] order

[19] family

سلامی دوباره

دوستان گرامی از اینکه این همه مدت مطلب جدید نذاشتم عذر می خوام.

در سری جدید مطالب خودم به طور کامل به چگوگی طراحی سیستم خبره با  prolog رو آموزش میدم.

راستی اگه به وبلاگ من سر زدین یه پیامی بزارین تا دلگرم شم که وبلاگ من مفید هست!!

با تشکر از شما دوستان

صابر

1-7) امكانات توضيحي [1]         

بيشتر سيستم‌هاي خبره امكانات توضيحي دارند كه به كاربر اجازه مي‌دهد تا از سيستم بپرسد: چرا سوالي پرسيده شده است و چگونه سيستم به نتيجه‌اي رسيده است.

اين سوال‌ها با مراجعه به هدف سيستم بوسيله‌ي مراجعه به قواعد استفاده شده و هر اطلاعات موجود درباره‌ي مسئله پاسخ داده شده‌اند. براي شرح دادن دسته‌اي از امكانات كه معمولاً بهمراه سيستم خبره است، ما مثال ساده‌ي خود را با جزئيات بيشتري شرح خواهيم داد كه با يك مثال ساده شامل ديالوگي از سوال‌هاي why و how و توضيحات شروع شده است:

System: Is there gas 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: Why?
System: I am trying to prove: problem with battery.
It has been established that it is not the case that the engine turns over.
Therefore if it is not the case that the lights come on then there is a problem
with battery.
Is it true that the lights come on?
User: No.
System: I conclude that there is a problem with the battery.
User: How?
System: This follows from Rule 2:
IF NOT engine_turns_overAND ...

NOT engine_turns_over was given by the user.
NOT lights_come_on was given by the user.

 

ارائه امكانات توضيحي مشابه آنچه در بالا شرح داده است. حداقل ثبت اينكه چه قواعدي در رسيدن به نتيجه استفاده شده است و استفاده از اين ركودها براي ساختن توضيحاتي مشابه بالا نياز دارد. دادن توضيحات ساده‌اي مشابه به بالا چندان دشوار نيست و حتي گاهي اوقات كاملاً مفيد است.

 بهرحال امكانات توضيحي زياد استفاده نمي‌شوند و جائي هم كه استفاده شده‌اند مورد پذيرش كاربران واقع نشده‌اند. دلايل بسيار زيادي براي اين موضوع وجود دارد كه باعث تحقيقاتي در اين مورد شده است.

يك دليل اين است كه توضيحات تنها به دانش سطحي از قواعد كدبندي شده اشاره مي‌كنند در مقايسه با دانش عميقي كه بواسطه‌ي آن در حوزه‌اي خاص قواعد بوجود آمده‌اند (كه معمولاً نشان داده نمي‌شوند). بنابراين سيستم خواهد گفت كه: بخاطر قاعده‌ي 23 به نتيجه x رسيده است اما توضيحي درباره‌ي اينكه قانون 23 دقيقاً به چه علت است و درباره‌ي چيست، نمي‌دهد. علت اصلي ديگر براي عدم موفقيت امكانات توضيحي اين حقيقت است كه اگر كاربر توضيح را متوجه نشود يا قبول نكند، سيستم نمي‌تواند موضوع را دوباره و از طريق ديگري توضيح دهد. بهمين دلايل توضيح يك حوزه‌ي بسيار گسترده در تحقيقات راجع به سيستم خبره است. در ادامه براي بررسي سيستم‌هاي پيچيده‌تر به بررسي سيستم خبره MYCIN كه سيستمي براي تشخيص اختلالات خونی است مي‌پردازيم كه جزو اولين سيستم‌هاي خبره بحساب مي‌آيد.

 

1-8) بررسي اجمالي موضوعي درباره‌ي  MYCIN

همانطور كه بالا ذكر شد، MYCIN يكي از اولين سيستم‌هاي خبره مي‌باشد و طراحي‌اش نفوذ قدرتمندي در طراحي ديگر سيستم‌هاي خبره و پوسته‌هاي سيستم خبره داشت.

MYCIN در دهه‌ي 70 در دانشگاه استنفورد [2] طراحي شده بود. كارش تشخيص و توصيه‌ي درمان براي عفونت‌هاي خوني خاصي بود.

پزشکان براي تشخيص مناسب، به كشت ميكروب در آزمايشگاه از عضو عفونت يافته نیازداشتند. متاسفانه اين عمل 48 ساعت وقت مي‌گرفت و اگر پزشكان تا اين موقع صبر مي‌كردند، ممكن بود بيمارشان بميرد! بنابراين پزشكان مجبور بودند تا حدس‌هايي را درباره‌ي مشكلات محتمل با استفاده از اطلاعات، مطرح كنند و از اين حدس‌ها استفاده كنند تا يك درمان پوششي [3] با استفاده از داروهايي كه مي‌بايست در مورد مسئله‌ي محتمل استفاده شوند را فراهم كنند.

MYCIN طراحي شده بود تا كشف كند چگونه انسان متخصص اين حدس‌هاي سخت (اما مهم) را بر مبناي اطلاعات جزئي مي‌زند. بهرحال، مسئله‌ي بسيار مهم در موقع عمل، اين بود كه بسياري از دانشجويان تازه كار يا پزشكان غيرمتخصص كه بعضي اوقات مجبورند چنين حدس‌هاي سختي بزنند و اگر يك ابزار متخصص وجود داشته باشد تا كمكشان كند باعث مي‌شود كه درمان موثرتري توسط آنها ارائه شود. در حقيقت MYCIN هيچگاه در عمل استفاده نشد. اين كار بخاطر ضعفي در عملش نبود در حاليكه بارها توسط دانشگاه استنفورد امتحان شده بود. اين بخاطر مسايل اخلاقي و اعمال قانوني براي استفاده از كامپيوتر در پزشكي بود. اگر MYCIN تشخيصي اشتباه مي‌داد چه كسي مي‌بايست مورد بازخواست قرار مي‌گرفت؟

بهرحال، MYCIN دانش خود را به صورت مجموعه‌اي از قواعد IF-THEN با فاكتور قطعيت اعلان كرد. شرح ذيل يكي از قواعد MYCIN در نسخه‌ي انگليسي آن است:

IF the infection is pimary-bacteremia
AND the site of the culture is one of the sterile sites
AND the suspected portal of entry is the gastrointestinal tract
THEN there is suggestive evidence (0.7) that infection is bacteroid

7-0 تقريباً قطعيتي است كه نتيجه با شواهد داده شده مي‌تواند درست باشد. اگر شواهد غيرقطعي باشند، قطعيت همه ی قواعد با قطعيت قاعده تركيب مي‌شود تا قطعيت نتيجه را تعيين كند. MYCIN به زبان LISP نوشته شده بود و قواعدش رسماً با عبارات LISP ارائه شده بودند.

بخش عمل [4] قاعده مي‌تواند تنها يك نتيجه درباره‌ي مسئله‌اي كه بايد حل شود، باشد يا يك عبارت قراردادي LISP. اين كار اجازه‌ي انعطاف‌پذيري بالايي را مي‌داد اما از بعضي از خصوصيات سيستم‌هاي بر مبناي قاعده مي‌‌كاست.

در هر حال، MYCIN اصولاً يك سيستم goal directed مي‌باشد كه از استراتژي استدلال تسلسل پس‌رونده استفاده ميكرد. اما MYCIN از پس برنده‌هاي گوناگوني براي كنترل جستجو براي يك راه‌حل استفاده مي‌كرد و يا اثبات بعضي از فرضيه‌ها، هر دوي نياز داشتند تا استدلال مناسبي بسازند و از پرسش سوال‌هاي بسيار بي‌مورد از كاربر جلوگيري كنند.

يك استراتژي اين است كه در ابتدا از كاربر چند سوال كه هميشه مورد احتياج هستند و به سيستم اجازه مي‌دهد تا حدس‌هاي غيرمحتمل را بطور كل رد كند، پرسيده شود. زمانيكه اين سوال‌ها از كاربر پرسيده شده‌اند، سيستم مي‌تواند روي اختلالات خوني محتمل‌تر و خاص‌تر تمركز كند و وارد تسلسل پس‌رونده ‌هاي كاملي شود تا براي رد يا تائيد هر قاعده تلاش كند. اين قواعد بسياري از جستجوهاي غيرضروري را خارج مي‌كنند و همچنين از الگوي مصاحبه‌ي پزشك و بيمار انساني استفاده مي‌كنند.

استراتژي‌هاي ديگری نیز در ارتباط با راهي كه قواعد در آن احضار مي‌شوند، هستند. اولي ساده است، دادن يك قاعده ي محتمل براي استفاده . MYCIN در ابتدا همه‌ي فرضيه‌هاي قاعده را چك مي‌كند تا ببيند آيا هيچ كدامشان معين شده‌اند تا رد شوند. اگر اينچنين شد ديگر نيازي به استفاده از آن قاعده وجود ندارد. استراتژي‌هاي ديگر بيشتر در ارتباط با فاكتور قطعيت هستند. MYCIN ابتدا به قواعدي نگاه مي‌كند كه نتيجه‌ي آنها فاكتور قطعيت بزرگتري دارد و جستجو را در جائيكه قطعيت زير  .20 است قطع مي‌كند.

يك ديالوگ با MYCIN مشابه آنچه است كه ما قبلاً بصورت كوتاه ارائه كرديم ، البته طولاني‌تر و پيچيده‌تر. سه مرحله‌ي اصلي ديالوگ وجود دارد. در مرحله‌ي اول، مقدار دهي اوليه كردن اطلاعات در مورد نمونه‌ي جمع‌آوري شده است تا سيستم بتواند يك تشخيص اوليه بدهد. در مرحله‌ي دوم سوال‌هاي مرتبط بيشتري پرسيده مي‌شوند تا فرضيه‌هاي خاصي را تست كنند. در پايان اين بخش، يك تشخيص پيشنهاد مي‌شود. در مرحله‌ي سوم سوال‌هايي براي ارائه‌ي درمان مناسب پرسيده مي‌شود كه با دادن تشخيص‌ها و حقايق درباره‌ي بيمار همراه است. در هر مرحله كاربر مي‌تواند بپرسد كه چرا اين سوال مطرح شده است يا چگونه نتيجه‌اي بدست آمده است و زمانيكه درمان پيشنهاد شده است كاربر مي‌تواند براي درمان‌هاي جايگزين اگر مورد اول پيشنهاد شده مورد پذيرش واقع نشد، بپرسد.

اگرچه MYCIN پيشگام بسياري از تحقيقات سيستم خبره بوده است، اما مشكلاتي داشته است كه هنوز باقي مانده است. يكي از اينها اين بود كه گاهي اوقات قواعد حوزه‌ي دانش، دانش حل مسئله و “screening conclition" (شرايطي كه از پرسش‌هاي احمقانه يا ناشيانه جلوگيري مي‌كند) را قاطي مي‌كردند. يك نسخه‌ي جديدتر كه NEOMYCIN ناميده مي‌شود سعي كرد تا با اين مشكل با داشتن رده‌بندي صريح بيماري مواجهه كند تا حقايق را دربارهي انواع مختلف بيماري ارائه كند.

استراتژي ابتدايي حل مسئله، پائين رفتن از درخت بيماري بود، از يك كلاس عمومي بيماري به خاص‌تر آن، فراهم كردن اطلاعات براي تميز دادن بين دو زير كلاس بيماري (براي مثال اگر بيماري 1 زير كلاس‌هاي بيماري 2و3 را دارد و شما مي‌دانيد كه بيمار، بيماري 1 را دارد و زير كلاس بيماري 2، نشانه‌ي بيماري 1 را دارد، پس درباره‌ي نشاني 1 سوال مي‌كند) .

نسخه‌ي بيشتري از پروژه‌ي MYCIN بوجود آمد. براي مثال EMYCIN دومين پوسته‌ي سيستم خبره از MYCIN بود. سيستم خبره‌ي جديد كه PUFF ناميده مي‌شود، با استفاده از EMYCIN طراحي شده بود تا بيماري قلبي را تشخيص دهد و سيستمي كه MEOMYCIN ناميده مي‌شود، براي آموزش دكترها طراحي شده بود كه مي‌توانست آنها را با نمونه‌هاي مختلف بيماري مواجه كند و نتيجه‌ي آنها را چك كند و بگويد چرا نتيجه‌ي آنها اشتباه بوده است.

البته همه، سيستمهاي خبره خصوصاً سيستم‌هاي data driven بر مبناي MYCIN نيستند و از شيوه‌هاي متفاوتي بهره مي‌بردند.



[1] Explanation  facilities

[2] stanford university

[3] covering treatment

[4] action part

ادامه مبحث طراحی سیستم های خبره

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 .



[1] Rules and expert system

[2] backward chaining

[3] forward chaining

پروژه فاینال

سلام عزیزان

لینک قدیمی پروژه کارشناسی من  خوب نبود گذاشتم rapidshare

پسورد برای یاز کردنش هم اینه:

"Expert-Sys.Blogfa"

امیدوارم مفید واقع بشه

لینک دانلود

ادامه مبحث طراحی سیستم خبره

                  بيت با هدف عمومي، به همان عنوان پوسته ی سيستم‌هاي خبره اشاره مي‌كند. همانگونه كه در شكل مي‌بينيم پوسته‌ موتور رابط براي كاربر، يك سيستم توضيحي و گاهي              اوقات يك ويرايشگر بانك اطلاعات را فراهم خواهد كرد.

                 با دادن يك نوع جديد مسئله براي حل بطور معمول ما مي‌توانيم يك پوسته که مجموعه‌اي کامل از پشتيباني براي مسئله را در بردارد فراهم آوريم بنابراين همه كاري كه ما بايد ب               كنيم فراهم آوردن يك دانش خبره مي‌باشد.

               مقادير زيادي از پوسته‌هاي تجاري وجود دارد كه هر كدامشان براي دسته‌هايي با تفاوت جزئي از مسايل مناسب هستند. سيستم‌هاي خبره‌اي كه در صنعت كاربر دارند هم            يستم‌هاي خبره براي طراحي پوسته‌اند و هم سيستم‌هاي خبره‌اي كه توسط پوسته‌هاي آماده نوشته مي‌شوند مي‌باشند .

استفاده از پوسته براي نوشتن سيستم در حالت كلي، در مقايسه با ايجاد يك سيستم خبره از ابتدا، بطور قابل ملاحظه‌اي هزينه و زمان براي ايجاد يك سيستم جزئ را كاهش خواهد داد.

     

              1-3 )  انتخاب مسئله

                 نوشتن يك سيستم خبره بطور كلي زمان و هزينه زيادي را صرف خواهد كرد. براي جلوگيري از هزينه اشكالات بوجود آمده، مردم يك مجموعه از راهنمائيها براي تعيين   كردن اينكه آيا يك مسئله براي استفاده از سيستم خبره مناسب است يا نه، فراهم كرده‌اند:

               1) احتياج به راه‌حل بايد ارزش هزينه صرف شده براي اين امر را داشته باشد. بايد يك برآورد واقعي از هزينه‌ها و سود در بردارنده‌‌ي آن وجود داشته باشد.

                     2) يك انسان خبره در همه‌ي شرايطي كه به او نياز است در دسترس نيست.

v           اگر دانش يك انسان خبره بطور گسترده‌اي در دسترس است غير محتمل بنظر مي‌رسد كه ايجاد يك سيستم خبره ارزشمند باشد.

                 بهرحال از مكانهايي نظير اكتشاف و نفت ممكن است دانش خبره‌اي كه مي تواند بسيار ارزان و بوسيله يك سيستم خبره در هر زماني كه مورد نياز است بسيار راحت‌تر باشد             تا سراغ يك انسان خبره رفتن

                     3) مسئله ممكن است با تكنيكهاي نظير تكنيك استدلال سمبوليك [1] حل شود و ديگر نيازي به مهارتهاي فيزيكي با ذهني نباشد.

                 4) مسئله يك ساختار مناسب دارد و به دانش آنچناني نياز ندارد.

                     5) مسئله نمي‌تواند به راحتي با روش‌هاي محاسباتي سنتی حل شود.

v                     اگر يك الگوريتم خوب براي راه‌حل مسئله وجود دارد، شما نمي‌خواهيد از سيستم خبره استفاده كنيد.

                    6- مسئله در يك وسعت و اندازه‌ي مناسب است.

  v         بطور معمول شما در مسايلي كه نياز به خبره‌هاي با تخصص بالا دارند،به سیستمهای خبره احتياج داريد، اما همين ممكن است زمان            اندكي براي حل شدن بدست يك انسان خبره نياز داشته باشد.

                        بايد اينكه تنها يك رنج كوچك از مسايل براي تكنولوژي سيستم‌هاي خبره مناسب هستند، كاملاً روشن شود. بهرحال با دادن يك مسئله‌ي مناسب ، سيستم‌هاي خبره مي‌تواند                  منافع زيادي را بدنبال داشته باشند. سيستم‌ها پيشرفت داده شده‌اند، براي مثال براي كمك به آناليز نمونه‌هاي جمع‌آوري شده در اكتشاف نفت و براي كمك براي تنظيم              كردن سيستم كامپيوتر و مي‌بينيم كه هر دوي اين سيستم‌ها بصورت گسترده‌اي استفاده مي‌شوند و مقادير زيادي از پول را ذخيره مي‌كنند.

   1-4) مهندسي دانش [1]

                      با گرفتن اين تصميم كه مسئله‌ي شما براي يك سيستم خبره مناسب است شما نياز داريد تا دانش و اطلاعات را از يك خبره درباره‌ي اين مسئله گردآوري نمائيد و آنرا در                قابل يك سيستم خبره با كمك پوسته‌اي عرضه داريد. اين، كار يك مهندس دانش است البته با داشتن يك همكاري نزديك با كاربر و خبره.

        

 براي فراهم آوردن دانش از يك  مهندسي دانش، زبان هوش مصنوعي يا AI[2] و معرف خبره است. و بايد قادر باشد     تا يك پوسته‌ي سيستم خبره‌ي مناسب پيدا كند و بتواند به جمع‌آوري      دانش از خبره و        پياده‌سازي دانش در يك بانك اطلاعاتي درست و مناسب بپردازد. مهندس دانش حتي     مي‌تواند دانش اوليه‌اي راجع به آن حوزه نداشته باشد.  خبره،    مهندس دانش بايد در ابتدا مقداري با حوزه‌ي مسئله‌ي خود آشنايي پيدا كند.

                بعد از آن گفتگو با خبره آغاز مي‌شود. بطور معمول يك خبره يك سري از مسايل را مي‌داند و روش‌هاي حل آنها را نيز توضيح مي‌دهد. مهندس دانش قواعد را از اين مسايل           و راه‌حل‌ها خارج كرده و آنها را با خبره در ميان مي‌گذارد.

                 درست مشابه اكثر نرم‌افزارها، سيستمي كه كاربر با آن راحت نباشد، چيز بيهوده‌اي خواهد بود.

                 بنابراين طريقه‌ي طراحي بايد در يك ارتباط متقابل نزديك با كاربران باشد، همانطور كه در مقدمه شرح داده شد. سيكل اوليه‌ي تهيه‌ي نرم‌افزار بايد پيشرفت سريع ساختار          اوليه و آزمايش    مداوم و امتحان كردن بوسيله‌ي كاربر و خبره باشد، براي اينكه ببينند آيا سيستم رضايت‌بخش است يا نه.

          به منظور پيشرفت ساختار اوليه، مهندس خبره بايد يك تصميم ابتدايي براي ارائه‌ي        اطلاعات مناسب و روش تبادل اطلاعات بگيرد (براي مثال قواعد، قواعد +              چارچوب: سلسل پس‌رونده با پيش‌رونده ). براي امتحان اين تصميمهاي طراحي    اوليه، نمونه اوليه ممكن است تنها يك بخش كوچك از كل مسئله را حل كند. اگر به نظر             برسد كه روش مورد استفاده براي اين قسمت كوچك خوب كار كند، بنابراين ارائه‌ي بقيه‌ي دانش در فرم مشابه ارزش تحقيق و سعي و تلاش را خواهد داشت.

                 پيشرفت سيستم خبره در حدود 5 الي 10 سال پيش بصورت بسيار حرفه‌اي بود. پوسته‌هاي سيستم خبره بطور گسترده‌اي در حال استفاده‌اند اما هنوز براي حل مسايل بسيار            ساده‌اي استفاده مي‌شوند.



[1] knowledge engineering

[2] Artificial Intelligent



[1] symbolic reasoning Teahnique

پایان نامه

دوستان عزیز .

این هم پایان نامه من.

امیدوارم که مورد استفاده شما باشه

فعلا خداحافظ

پایان نامه

یک فایل مفید دیگه

دوستان عزیز این فایلی که امروز برای شما گذاشتم رو چند وقت پیش پیدا کردم .

دیدم بسیار جالبه و اومدم برای اینکه از دستش ندم و بتونم سر فرصت بخونمش ُ سایت رو دانلود کردم تا بتونم به صورت offline بخونمش .

برای اینکه شما هم دیگه نیاز نداشته باشید تا پول اینترنت بدین و تازه اگه هم خواستین online بخونینش با عجله بخونین و حالیتون نشه اونو upload کردم وشما میتونین از لینک زیر دانلودش کنید

البته دوباره از سایت Rapidshare استفاده کردم .امیدوارم مفید باشه

راستی برای استفاده پس از unzip  کردن در فولدر general فقط کافیه که index.html رو اجرا کنین.

لینک دانلود

دوستدار شما

صابر.

- طراحی یک سیستم خبره :

در این بخش ما وارد جزییات بیشتری از چگونگی طراحی سیستم های خبره خواهیم شد.

در ابتدا ساختار پایه سیستم های خبره بررسی خواهد شدو سپس بر سر اینکه چگونه یک مسئله مناسب برای سیستم خبره انتخاب می شود و طراحی می شود ، بحث می کنیم .

 

-         ساختار معماری سیستم های خبره :

   

شکل زیر مهم ترین بخش های یک سیستم های خبره  بر مبنای قواعد (Rule-Based) را نشان می دهد:

 

کاربر به واسطه ی یک رابط در ارتباط متقابل با سیستم های خبره  می باشدکه این رابط می تواند هرگونه وسیله ی interface با کامپبوتر نظیر :ماوس ، پردازش زبان طبیعی و ... باشد .

سپس ازیک موتور رابط ( Interface Engine) استفاده می شود تا با دانش خبره (Expert Knowledge ) و اطلاعات شرح داده شده برای یک مسئله ی خاص (  Case-specific Data ) مسئله را حل کند .

دانش خبره بطور عادی  می تواند به شکل بک دسته از قواعد If – Then یاشد .

 

در یک سیتم بر مبنای قواعد ( در اینده ای نزدیک مفهوم سیستم های بر مبنای قواعد (Rule-Based ) رو خواهم گفت ) با تسلسل پیش رونده ( Forward Chaining ) اطلاعات موجود در بخش اطلاعات بخش ویژه

(Case-specific Data ) (با عرض پوزش ، نتونستم ترجمه ی بهتری براش پیدا کنم ) ، عناصر عملیاتی برای حافظه کاری  (Working Memory )خواهند بود .

تقریبا همه ی سیستم های خبره  ، زیر سیستم های توضیحی ( Explanation Subsystems ) – که به برنامه کمک می کند تا برای دلایل خود به کاربر توضیح دهد – با خود دارند .

بعضی از سیستم ها ، ویرایشگر اطلاعات پایه (Knowledge Base Editor ) دارند که به خبره یا مهندس دانش (Knowledge Engineer ) کمک می کند تا به راحتی اطلاعات را ویرایش و یا بازیابی کند .

ادامه به زودی ....

فایل اموزشی از سیستم های خبره

این فایل رو من از اینترنت پیدا کردم و بسیار جالب دیدم.

فایلش به زبان شیزین فارسی است و می تونید از لینک زیر دانلود کنید:

لینک دانلود

(فقط امیدوارم کا ر با rapidshare رو بلد باشید  . ولی من برای اطمینان به شما میگم:

پس از load شدن صفحه بر روی دکمه ی free کلیک کنید و در صفحه ی بعدی پس از مدتی یک کد امنیتی ظاهر می شود و با وارد کردن آن می توامید فایل خود را دانلود کنید)

لینک های مفید

از اونجا که یه مدتیه درگیر امتحانات میانترم (!) هستم زیاد فرصت نکردم بنویسم .
اما امروز که دوباره رفتم سراغش تو اینترنت این سایت باحال رو پیدا کردم .
یه توضیح کامل درباره ی چگونگی طراحی یک سیستم خبره با زبان prolog.
من که خیلی حظ بردم ( راستی به املای کلمه ی حظ مطمئن نیستم ، اگه غلط بود ببخشید )
این لینک رو می تونید در بخش پیوند های روزانه پیدا کنید .


بررسی تسلسل پیش رونده

حال میخواهیم به بررسی پایگاه معرفت بپردازیم.

دوباره قواعد را مینویسیم و البته در این مرحله یک قاعده دیگر به آن اضافه می کنیم:

10 If interest = Fall

Then stock = Rise

20 If interest = Rise

Then stock = Fall

30 If dollar = Fall

Then interest = Rise

40 If dollar = Rise

Then interest =Fall

50 If fedint = Fall and Fedmon =Add

Then interest = Fall



در زیر شما جدول متغیر ها را مشاهده میکنید:


مفهوم متغیر
نام متغیر

Interest rate Direction جهت نرخ بهره



Dollar exchange Rate نرخ ارز دلار



Federal Reserve نرخ فدرال رزرو



Interest Rate Goals (مثل اضافه یا برداشتذخایر از سیستم بانکی)

هدف های چرخش پول فدرال رزرو



جهت بازار سهام
Interest



Dollar



Fedint



Fedmon





Stock






پردازش پایگاه معرفت:

اکنون که پایگاه معرفت خود را با استفاده از جدول اسامی متغیر ها آماده نموده ایم  آماده ایم تا پردازش اطلاعات را با استفاده از اصول تسلسل پیش رونده آغاز کنیم.

اولین ساختار داده ای را که استفاده میکنیم  لیست متغیر قضیه است.این لیست ساده به ما کمک میکند تا از متغیر های موجود در مسئله که در ارتباط با بخش IF عبارت IF-THEN هستند اطلاع پیدا کنیم .

به عنوان مثالی از چگونگی استفاده از لیست متغیر قضیه  فرض کنید می خواهیم اثرات پایین آمدن نرخ ارز دلار را که به صورت Dollar interest = Fall آمده است را بررسی کنیم. قواعد 30 و 40 دارای قضایایی باDollar بهعنوان متغیر هستند . به منظور آن که همواره به یاد داشته باشیم کهDollar متغیر مد نظر ما می باشد  این متغیر را در ساختار داده ای که آن را صف متغیر می نامیمقرار میدهیم.ما سعی داریم هر عبارتی که دارا ی متغیرDollar باشد شرط Dollar = Fall را داشته باشد . اگر چنین باشد بخش Then عبارت احضار می شود و متغیر شرطجدید بنام Interest به دست می آید .این مورد در مثال ما در قاعده شماره ی 30 اتفاق می افتد.



30 If Dollar = Fall

Then interest = Rise

اکنون باید ببینیم که اثر بالا رفتن نرخ سهام پس از آنکه پردازش کلیه قواعد با شرط Dollar پایان یابد چه می شود؟

با یاد آوری آنکه اکنون با متغیر جدیدی بنام Interest سر و کار داریم  آنرادر صف متغیر نتیجه پس از دلار قرارمیدهیم.پس از اینکه از کلیه قواعد IF-THENکه بخش If آنهادارای متغیر Dollar بود  عبور کردیم  این متغیر را از صف خود خارج میکنیم. چون متغیر Interest به جلوی صف آمده است این متغیر را درست به همان صورتی که نرخ متغیر Dollar را پردازش نمودیم  مورد پردازش قرار میدهیم.وقتی که هیچ متغیری در صف نباشد  آنگاه تسلسل پایان یافته است و آماده پاسخگویی می باشد.

ما نیاز به جدول دیگری داریم که لیست متغیر نام دارد .لیست متغیر به ما می گوید که آیا هنوز متغیری تحت بررسی است یا نه.در این لیست کلیه متغیرهای بخش if قرار دارد و تغییر متناسب با هر کدام در مسئله خاص که در بخش Then آمده است را قرار می دهیم .مثلا در این مثال متغیر Dollar در این جدول مقدار Fall و Interest مقدار Rise را میگیرد.و منتظر بررسی بقیه متغیر ها میشود.





مثالی از تسلسل پیش رونده:

اجازه دهید به عنوان مثالی از سیستم تسلسل پیش رونده از پایگاه معرفت بازار سهام استفاده کرده و سوال زیر را برای ابزار تسلسل پیش رونده مطرح کنیم.

اثر سپرده های اضافی فدرال رزرو در سیستم بانکی چیست؟ به این معنی که Fedmon = Add .

پس صف متغیر نتیجه  متغیر شرط اولیه بنام Fedmon می باشد که مقدار آن معلوم است.این ابزار را در لیست متغیر قضیه برای مورد اول Fedmon جستجو کرده و این حالت در مورد 50 اتفاق می افتد .

از لیست متغیر قضیه درمی یابیم که باید دو متغیرFedmon و fedint را معرفی کنیم .اکنون میدانیم که متغیرFedmon به Add به عنوان شرط اصلی معرفی گردید.چون Fedint معرفی نمی شود  ابزار تسلسل پیش رونده از کاربر سیستم خبره سوال زیر را می پرسد؟

آیا فدرال رزرو میخواهد نرخ بهره بالا برود یا پایین بیاید؟

در صورتی که کاریر خواهان پایین آمدن نرخ بهره باشد  باعث میشود که متغیر Fedint دارای ارزش Fall باشد و در لیست متغیر معرفی شود .شرایط Fedint = Fall وFedmon = add درست میباشند  بنابراین بخش Then قاعده 50 احضار میشود و در نتیجه خواهیم داشت :Interest = Fall .چون متغیر Interest شرط جدیدی را به نمایش می گذارد  لذا این شرط در صف متغیر نتیجه قرار می گیرد  باقیمانده قواعد موجود در لیست متغیر برای متغیر Fedmon مورد جستجو قرار می گیرند.چون هیچ قاعده ای با متغیر Fedmon وجود ندارد  لذا این متغیر از صف متغیر نتیجه برداشته می شود .اکنون متغیرInterestبه جلو حرکت می کند .حال در لیست متغیر قضیه به دنبال متغیر Interest می گردیم و آن را در قضیه 10 پیدا میکنیم.چون متغیر Interest دارای ارزش Fall است لذا بخش If در قاعده 10 درست است.این صحت باعث شده تا بخش Then احضار شده و متغیر stock را دارای ارزش Rise کند.این کار به نوبه خود باعث میشود تا متغیر Stock در صف متغیر نتیجه قرار گیرد.قاعده ی دیگر شامل متغیر Interest دارای ارزش Rise است و اجرا نمیشود.بنابراین متغیر Interest از صف متغیر نتیجه خارج سده و متغیر Stock در جلوی صف قرار میگیرد.چون متغیر Stock دربخش If هیچ قاعده ای قرار ندارد  لذا جستجو پایان می یابد.پاسخ های لازم برای سوال "اثر سپرده های اضافی فدرال رزرو در سیستم بانکداری چیست و می خواهید نرخ بهره پایین بیاید؟" عبارتند از:

1-نرخ بهره پایین خواهد آمد.

2-بازار سهام بالا خواهد رفت.

در اینجا توضیحات در باره ی سیستم تسلسل پیش رونده نیز پایان می یابد .امیدوارم که مفید واقعشده باشد.

درضمن اگر دوستان عزیز سوالی در این ضمینه دارند میتوانند به من e-mail بزنند  تا اگر تونستم کمک کنم .اگر هم source code این برنامه رو میخواهید به من E-mail بزنید.