oldmagina

هوش مصنوعی ، شبکه های عصبی و منطق فازی

امتیاز دادن به این موضوع:

Recommended Posts

[quote name='senaps' timestamp='1361563311' post='301497']
دوست عزیز، میدونم که زبان برنامه‌نوسی معمولا پرل استفاده میکنن.... ولی ایا میشه با سی پلاس و یا سی شارپ یا پیتون با استفاده از اصول شی‌گرایی و شرط ها و سویچ‌کیس ها، قدرت تصمیم گیری داد؟!(هوش مصنوعی اعمال کرد؟!)....

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

میخواستم بدونم میشه با پیتون و سی‌شارپ مثلا پیاده‌سازیش کرد برای محیط ویندوز یا لینوکس!(البته پیتون و سی پلاس برای لینوکس! :) که اوبونتو باشه لینوکسش...!!‌)...

؟
[/quote]
سلام
ببخشید که دیر جواب میدم .
یکی از بهترین زبانهایی که میشه توش بنا به سلیقه عمل کرد همون ++C هستش و عملا خیلی از برنامه نویس های هوش مصنوعی دارن ازش استفاده می کنند ولی اشکال کار اینه که به قدر زبونای دیگه برای هوش مصنوعی تخصصی نشده .
البته الگو ها و اپلیکیشنهای بسیار زیادی براش تو نت وجود دارند.
  • Upvote 1

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[size=5][color=#0000FF]مهندسی دانش :[/color][/size]
مهندسی دانش یک بخش واجب در توسعه هر سیستم خبره است . مهندس دانش نیاز به برخورداری از دانش محیطی مثل فرد خبره ندارد ، اما نیاز دارد که بداند چگونه چنین خبرگی را به قوانینی که سیستم استفاده خواهد نمود به صورت کارا تبدیل نماید. از اینرو عمده ترین وظیفه مهندس دانش ارتباط با افراد خبره جهت فهم کامل اینکه ایشان چگونه به وقایع مختلف نگاه می کنند و چگونه از آن در جهت اشتقاق نتایج استفاده می نمایند ، می باشد. با کسب یک درک خوب از قوانینی که افراد خبره جهت اتخاذ تصمیم استفاده می کنند مهندس دانش باید این قوانین را به زبان پوسته سیستم خبره تبدیل نماید تا قابل استفاده برای آن باشد . در بعضی مسائل ، مهندس دانش آزادی کامل در انتخاب پوسته سیستم خبره یا بیشترین بهره را برای آن کار خاص دارد . در سایر مسائل ، این تصمیم در حال حاضر گرفته شده است و مهندس دانش باید با آنچه به او گفته شده است ، کار کند.
[size=5][color=#0000FF]CLIPS ( سیستم تولید زبان یکنواخت زبان C ) :[/color][/size]
[color=#ff0000]CLIPS[/color] یک [color=#ff0000]پوسته سیستم خبره[/color] می باشد که به صورت رایگان در دسترس است و به زبان C پیاده سازی شده است . این پوسته زبانی را جهت بیان قوانین فراهم می آورد و عموما از زنجیره جلورونده برای استنتاج نتایج از یک مجموعه از حقایق و قوانین استفاده می نماید. نمادها و فرامینی که در CLIPS استفاده می شوند خیلی شبیه LISP هستند . یک مثال از یک قانون که با CLIPS نوشته شده است را می بینیم :
[left][color=#ffffff]nul...[/color][color=#0000ff](defrule birthday[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul......[/color][color=#0000ff](firstname ?rl John)[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul......[/color][color=#0000ff](surname ?rl Smith)[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul......[/color][color=#0000ff](haircolor ?rl Red)[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul...[/color][color=#0000ff]=>[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul...[/color][color=#0000ff](assert(is - boss ?rl)))[/color][color=#ffffff]..........nul[/color][/left] ویرایش شده در توسط oldmagina
  • Upvote 5

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[quote name='oldmagina' timestamp='1361635513' post='301658']
[quote name='senaps' timestamp='1361563311' post='301497']
دوست عزیز، میدونم که زبان برنامه‌نوسی معمولا پرل استفاده میکنن.... ولی ایا میشه با سی پلاس و یا سی شارپ یا پیتون با استفاده از اصول شی‌گرایی و شرط ها و سویچ‌کیس ها، قدرت تصمیم گیری داد؟!(هوش مصنوعی اعمال کرد؟!)....

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

میخواستم بدونم میشه با پیتون و سی‌شارپ مثلا پیاده‌سازیش کرد برای محیط ویندوز یا لینوکس!(البته پیتون و سی پلاس برای لینوکس! :) که اوبونتو باشه لینوکسش...!!‌)...

؟
[/quote]
سلام
ببخشید که دیر جواب میدم .
یکی از بهترین زبانهایی که میشه توش بنا به سلیقه عمل کرد همون ++C هستش و عملا خیلی از برنامه نویس های هوش مصنوعی دارن ازش استفاده می کنند ولی اشکال کار اینه که به قدر زبونای دیگه برای هوش مصنوعی تخصصی نشده .
البته الگو ها و اپلیکیشنهای بسیار زیادی براش تو نت وجود دارند.
[/quote]

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

و مهمترین عیبش هم اینه که بسیار گسترده هست و یادگیریش تا حدودی برای تازه واردان سخت هست .. .... در ضمن ، کمی هم فرار هست
  • Upvote 1

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[quote]
و مهمترین عیبش هم اینه که بسیار گسترده هست و یادگیریش تا حدودی برای تازه واردان سخت هست .. .... در ضمن ، کمی هم فرار هست
[/quote]

اره....
خوبیش این هستش که کمی تا قسمتی شبیه به سی‌شارپ هستش و با کار کردن روی یکی، انگار اون یکی رو هم کار کردی!( تقریبا!...)....

ولی برای برنامه‌نویسی سنگین باهاش حال نمی‌کنم... متاسفانه این ویژوال استودیو بدجوری بدعادتمون کرده...
ببخشید برا انحراف تاپیک! :)
  • Upvote 1

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[color=#0000ff][size=5]CLIPS (سیستم تولید زبان یکنواخت زبان سی ) :[/size][/color]
[color=#ff0000]CLIPS[/color] یک [color=#ff0000]پوسته سیستم خبره[/color] می باشد که به صورت رایگان در دسترس است و به زبان C پیاده سازی شده است . این پوسته زبانی را جهت بیان قوانین فراهم می آورد و عموما از زنجیره جلورونده برای استنتاج نتایج از یک مجموعه از حقایق و قوانین استفاده می نماید. نمادها و فرامینی که در CLIPS استفاده می شوند خیلی شبیه LISP هستند . یک مثال از یک قانون که با CLIPS نوشته شده است را می بینیم :
[left]
[color=#ffffff]nul...[/color][color=#0000ff](defrule birthday[/color][color=#ffffff]..........nul[/color]
[color=#ffffff]nul......[/color][color=#0000ff](firstname ?rl John)[/color][color=#ffffff]..........nul[/color]
[color=#ffffff]nul......[/color][color=#0000ff](surname ?rl Smith)[/color][color=#ffffff]..........nul[/color]
[color=#ffffff]nul......[/color][color=#0000ff](haircolor ?rl Red)[/color][color=#ffffff]..........nul[/color]
[color=#ffffff]nul...[/color][color=#0000ff]=>[/color][color=#ffffff]..........nul[/color]
[color=#ffffff]nul...[/color][color=#0000ff](assert(is - boss ?rl)))[/color][color=#ffffff]..........nul[/color][/left]

[color=#ffffff]nul[/color][color=#ff0000]?rl[/color]جهت نمایش یک متغیر که در این مثال یک شخص است ، استفاده می شود.[color=#ff0000] Assert[/color] برای اضافه کردن حقایق جدید به بانک به کار گرفته می شود . در مثال ذکر شده از یک قانون استفاده شده است تا یک نتیجه را از سه حقیقت موجود در مورد شخص استخراج کند. اگر شخص نام کوچکش John باشد و نام خانوادگیش Smith و مویش هم قرمز رنگ باشد بنابراین او رئیس است . این مطلب را به شکل زیر نیز می توان نوشت:



[left]
[color=#ffffff]nul... [/color][color=#0000ff](assert (firstname x John))[/color][color=#ffffff] ..........nul[/color]
[color=#ffffff]nul... [/color][color=#0000ff](assert (surname x Smith))[/color][color=#ffffff] ..........nul[/color]
[color=#ffffff]nul... [/color][color=#0000ff](assert (haircolor x Red))[/color][color=#ffffff] ..........nul[/color]
[color=#ffffff]nul... [/color][color=#0000ff](run)[/color][color=#ffffff] ..........nul[/color][/left]
حال دستور[color=#ff0000] ( facts )[/color] را می توان به منظور مشاهده حقایقی که در بانک وجود دارد به کار برد:
[left]
[color=#ffffff]nul... [/color][color=#0000ff]CLIPS> (facts)[/color][color=#ffffff] ..........nul[/color]
[color=#ffffff]nul... [/color][color=#0000ff]f-0 (firstname x John)[/color][color=#ffffff] ..........nul[/color]
[color=#ffffff]nul... [/color][color=#0000ff]f-1 (surname x Smith)[/color][color=#ffffff] ..........nul[/color]
[color=#ffffff]nul... [/color][color=#0000ff]f-2 (haircolor x Red)[/color][color=#ffffff] ..........nul[/color]
[color=#ffffff]nul... [/color][color=#0000ff]f-3 (is – boss x)[/color][color=#ffffff] ..........nul[/color][/left]
با این حساب این قسمت سه واقعیت که به سیستم اعمال شده اند را می گیرد و قانون موجود را به منظور دستیابی به نتیجه به کار می برد . نتیجه سیستم این است که X رئیس است. هر چند این یک مثال ساده است اما CLIPS ، مانند سایر پوسته های سیستم خبره می تواند جهت ساخت ابزارهای قدرتمند و پیشرفته به کار گرفته شود.
در ادامه یک مثال ساده دیگر را مرور می کنیم که قوانین در آنم برای کنترل یک آسانسور نوشته شده اند.
[left][color=#ffffff]nul... [/color][color=#ff0000]CLIPS>[/color][color=#0000ff](defrule rule1[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#0000ff](elevator ?floor_now)[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#0000ff](button ?floor_now)[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#0000ff]==>[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#0000ff](assert (open_door)))[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#ff0000]CLIPS>[/color][color=#0000ff](defrule rule2[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#0000ff](elevator?floor_now)[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#0000ff](button ?other_now)[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul...[/color][color=#0000ff]==>..........nul[/color][/left]
[left][color=#ffffff]nul...[/color][color=#0000ff](assert goto ?other_floor)))[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul...[/color] [color=#ff0000]CLIPS>[/color][color=#0000ff](assert (elevator floor1))[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#ff0000]===> f-0 (elevator floor1)[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#ff0000]<Fact-0>[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#ff0000]CLIPS>[/color][color=#0000ff](assert (button floor3))[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul...[/color][color=#ff0000]===> f-1(button floor3)[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#ff0000]<Fact-1>[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#ff0000]CLIPS>[/color][color=#0000ff](run)[/color][color=#ffffff]..........nul[/color][/left]
[left][color=#ffffff]nul... [/color][color=#ff0000]===> f-2 (goto floor3)[/color][color=#ffffff]..........nul[/color][/left]
قسمتهایی که به رنگ آبی هستند ، ورودیهایی است که توسط مهندس دانش وارد شده است و سایر قسمتها محیط و نتایج CLIPS هستند. [color=#ffffff]nul...[/color][color=#0000ff] ?floor_now[/color] یک مثال از یک متغیر در CLIPS است و بدین معنی است که هر شیئ می تواند با آن برای یک قانون منطبق شود تا آن قانون را تحریک کرده و متعادل کند. در این مثال اولین قانون بیان می کند که اگر آسانسور در یک طبقه است و دکمه همان طبقه فشار داده شده است ، در آن صورت در باز شود. قانون دوم بیان می کند که اگر آسانسور در یک طبقه است و دکمه در طبقه دیگری فشرده می شود به آن طبقه برود.
بعد از این قوانین ، دو واقعیت به این پایگاه اضافه شده اند. اولین واقعیت بیان می کند که آسانسور در طبقه اول است و دومین واقعیت بیان میکند که دکمه در طبقه سوم فشار داده شده است. با دستور اجرا ( [color=#0000ff]run[/color]) واقعیت جدیدی به سیستم اضافه می شود که دستوری مبنی بر حرکت به طبقه سوم است. ویرایش شده در توسط oldmagina
  • Upvote 4

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[size=5][color=#0000FF]زنجیره عقب رونده در سیستمهای خبره مبتنی بر قانون :[/color][/size]
روش دیگری که برای ساخت سیستمهای خبره مورد استفاده قرار می گیرد استفاده از [color=#ff0000]سیستمهای خبره مبتنی بر قانون با زنجیره عقب رونده[/color] است. معمولا یک کاربر مجموعه ای از واقعیت ها را به سیستم وارد می کند و سیستم سعی می کند تا بررسی کند که آیا تمام قضایای ممکن را می توان با این واقعیت ها اثبات کرد یا نه . در بعضی حالتها نیاز است تا واقعیتهای دیگری نیز وجود داشته باشند که در چنین حالتی سیستم خبره اغلب از کاربر سوالاتی می پرسد تا واقعیتهایی به سیستم اضافه شوند که در اثر آن ممکن است قوانین جدیدتری فعال گردند.
الگوریتم چنین اعمال می شود :
[color=#ff0000]برای اثبات یک نتیجه باید مجموعه ای از قضایا را اثبات نمائیم که یکی از آنها نتیجه است.[/color]
[color=#0000ff]برای هر قضیه H :
- اگر H یک واقعیت در بانک است پس اثبات شده است.
- در غیر این صورت اگر H می تواند از طریق انجام یک پرسش تعیین شود ، جواب کاربر را به بانک واقعیتها اضافه کن . در این صورت با توجه به جواب کاربر درستی یا نادرستی H تعیین می گردد.
- در غیر این صورت قانونی را بیابید که نتیجه اش H باشد . حال همین الگوریتم را جهت اثبات قسمت مقدم این قانون اعمال کنید .
- اگر هیچکدام از اعمال فوق جواب نداد ، H قابل اثبات نیست .[/color]
در سیستمهای خبره معمولا زنجیره عقب رونده در ترکیب با زنجیره پیش رونده استفاده می شود . هر گاه واقعیت جدیدی به بانک اضافه می شود ، ابتدا زنجیره پیشرونده اعمال می شود تا اگر واقعیت جدید دیگری را می توان نتیجه گرفت ، آن را به بانک اضافه کند . سپس زنجیره عقب رونده به منظور اثبات قضایای ممکن اعمال می شود. ویرایش شده در توسط oldmagina
  • Upvote 1

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[size=5][color=#0000ff]یادگیری ماشین[font=arial, sans-serif] ( [/font][/color][b][color=#0000ff]Machine learning[/color] [color=#0000ff]) :[/color][/b][color=#0000ff][font=sans-serif] [/font][/color][/size]
در بسیاری از مسائل یادگیری ، تنها وظیفه موجود ، یادگیری نحوه کلاس بندی ورودی ها به تعدادی کلاس محدود ( البته گاهی نامحدود ) می باشد . معمولا یک سیستم یادگیر به وسیله مجموعه ای از داده های یادگیری تهیه می شود که به صورت دستی کلاس بندی شدده اند. در ادامه این سیستم سعی می کند تا بر اساس داده های موجود و کلاس بندی آنها بتواند داده های جدید را خودش کلاس بندی کند
جهت مشخص کردن نحوه کلاس بندی داده ها فرض می شود که ارتباط مشخصی بین داده ها و کلاسها وجود دارد ؛ به عبارت دیگر یک تابع F داشته باشیم که بتواند داده X را در کلاس Y قرار دهد.
[left][color=#0000ff]f(x)=y[/color][/left]
به عنوان مثال اگر تابع استفاده شده [color=#ff0000]تابع همانی [/color][url="http://mathnews.blogfa.com/post-60.aspx"][color=#ff0000](Identity function)[/color][/url] باشد ، کار یادگیری برای ماشین بسیار ساده خواهد بود چون هر داده به سادگی در کلاس خودش قرار می گیرد. البته مسائل دنیای واقعی به این سادگی نیستند و تولید تابعی که بتواند دسته بندی درست را برای داده های مختلف مشخص کند ، یکی از مشکلات بزرگ در امر یادگیری ماشین است. در واقع در بسیاری از مسائل یادگیری ، داده های ورودی برای دسته بندی بیش از یک متغیر دارند . ویرایش شده در توسط oldmagina
  • Upvote 2

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[size=5][color=#0000FF]یادگیری Rote :[/color][/size]
ساده ترین راه برای یادگیری ماشین از طریق روش ساده Rote می باشد. این نوع یادگیری شامل ذخیره هر جزء داده و کلاس بندی آن می باشد .در نتیجه برای کلاس بندی هر نمونه جدید از داده ها بررسی می شود که آیا قبلا این نمونه در حافظه ذخیره شده است و یا نه . اگر چنین باشد ، کلاس بندی که ذخیره شده است برای آن نمونه برگردانده می شود و در غیر این صورت پیغام خطایی مبنی بر عدم کلاس بندی داده می شود.
[color=#ff0000]یادگیری Rote می تواند فقط نمونه هایی را که تا کنون دیده است کلاس بندی نماید و تلاشی برای تخمین تابع نگاشت ( mapping function ) انجام نمی شود که این ضعف بزرگی برای این سیستم است.[/color]
[color=#0000ff][size=5]یادگیری مفاهیم :[/size][/color]
[size=4]یادگیری مفهوم ([color=#ff0000]Concept Learning[/color]) شامل تعیین الگو از طریق تبدیل یک مجموعه از متغیرهای ورودی به یک مقدار باینری می باشد.[/size]
  • Upvote 2

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[size=5][color=#0000FF]یادگیری مفاهیم :[/color][/size]
[size=4]یادگیری مفهوم ( [color=#FF0000]Concept learning[/color]) شامل تعیین نقش از طریق یک مجموعه از متغیرهای ورودی به یک مقدار باینری می باشد.[/size]
[size=4]روندهایی که در اینجا بحث می شوند به عنوان روندهای یادگیری قیاسی ( [color=#FF0000]Inductive Learning Methods[/color] ) شناخته می شوند. این روندها بر این اصل استوار هستند که اگر یک تابع یافت شود و بتواند به درستی یک مجموعه بزرگ از داده های یادگیری را به کلاسها نگاشت دهد، در این صورت قادر است به درستی داده های دیده نشده را هم نگاشت دهد. با این روش یادگیر می تواند مجموعه داده های یادگیری را عمومی کند.[/size]
[size=4]عمل یادگیری مفهومی ، عبارت است از پیمایش یک مجموعه از داده های یادگیری مثبت و منفی و استفاده از آنها به منظور تعیین یک فرضیه که همه داده های تطبیقی را نگاشت می دهد و می تواند جهت کلاس بندی نمونه هایی که قبلا دیده نشده اند ، استفاده شود.[/size]
[size=4]یادگیری مفهومی را می توان به مشابه یک جستجو در یک فضای جستجو که شامل همه فرضیه های ممکن مثبت می باشد ، دانست؛ که هدف در این جستجو فرضیه ای است که بیشترین نزدیکی به نگاشت جاری را دارد.[/size]
  • Upvote 2

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
سلام
البته یک مقدار مطلب برای این بخش آماده کرده بودم که با سوختن مادربورد و بی کامپیوتر شدن ما ( ماشاالله که سی پی یو دوران بوق ما براش مادربورد گیر نمیاد ... نو هم که از توان ما خارجه ) .... همش رو هواست ...

برادر لطف کن مثال ها رو از موارد نظامی بزن و یکمی هم بحث رو ساده تر کن ... اکثر افراد کلیات رو می خواهند نه جزئیات رو ....

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[font=tahoma,geneva,sans-serif]سلام[/font]
[font=tahoma,geneva,sans-serif]بعد از مدتها دوباره قرار شد یه ذره دیگه به این مباحث اضافه کنم icon_cheesygrin [/font]
[font=tahoma,geneva,sans-serif][color=#0000ff][size=5]جستجو :[/size][/color][/font]
[font=tahoma,geneva,sans-serif]قبلا تا حدودی بحث شد که زنجیره جلو رونده یا همان جستجوی داده محور ( [color=#ff0000]Data Driven Search[/color] ) از یک وضعیت اولیه شروع می کند و از برای پیشرفت از عملگرها استفاده می کند و تا زمانی این کار را انجام می دهد تا به وضعیت هدف برسد. در مقابل زنجیره عقب رونده یا همان جستجوی هدف محور ( [color=#ff0000]Goal Driven Search[/color] ) از وضعیت هدف مشخص شده شروع می کند و به عقب برمی گردد تا حالت اولیه می رسد.[/font]
[font=tahoma,geneva,sans-serif]کلیدی ترین چیزی که در هر دو نوع جستجو استفاده می شود خود جستجو است . در این قسمت می خواهیم به انواع جستجو بپردازیم.[/font]

[color=#0000ff][size=5][font=tahoma, geneva, sans-serif]روش تولید و تست :[/font][/size][/color]
[font=tahoma,geneva,sans-serif]ساده ترین راه برای جستجو روش تولید و تست ( [color=#ff0000]Generate and Test[/color] ) است . در این روش هر نودی در فضای جستجو تولید می شود و سپس تست می شود که نود هدف است یا نه . در صورتی که نود تولید شده هدف باشد که جستجو به نتیجه رسیده است و در غیر این صورت همین روال در نودهای بعدی ، تا رسیدن به هدف تکرار خواهد شد.[/font]
[font=tahoma,geneva,sans-serif]این الگوریتم ساده ترین فرم جستجوی [/font][font=tahoma, geneva, sans-serif]فراگیر​[/font][font=tahoma,geneva,sans-serif] ( [color=#ff0000]Brute Force Search[/color] ) است . اطلاعات این نوع جستجو فقط در حد نحوه جابجایی در درخت جستجو می باشد. در این روش باید بدون هیچ گونه محدودیت تک تک نودها را با ترتیب مشخص شده جستجو کرد تا در نهایت به هدف رسید.[/font]


[font=tahoma, geneva, sans-serif]الگوریتم جستجوی تولید و تست برای موفقیت نیاز به یک تولید کننده مناسب دارد. این تولید کننده باید خواص سه گانه زیر را دارا باشد:[/font][list=1]
[*][font=tahoma, geneva, sans-serif]باید [/font][color=#0000FF][font=tahoma, geneva, sans-serif]کامل باشد[/font][/color][font=tahoma, geneva, sans-serif] یعنی تمام راه حل های ممکن ( تمام نودهای فضای جستجو ) را تولید کند چون در غیر این صورت ممکن است جواب ( نود هدف ) را از دست بدهد. [/font]

[*][font=tahoma, geneva, sans-serif]باید [/font][color=#0000FF][font=tahoma, geneva, sans-serif]افزونگی نداشته باشد[/font][/color][font=tahoma, geneva, sans-serif] یعنی یک راه حل را دو بار تولید نکند .[/font]

[*][font=tahoma, geneva, sans-serif]باید [/font][color=#0000FF][font=tahoma, geneva, sans-serif]مطلع باشد[/font][/color][font=tahoma, geneva, sans-serif] یعنی نودهای تولید شده توسط آن در فضای جستجو قرار داشته باشند و راه حلهای ناسازگار با فضای جستجو را ارائه نکند.[/font]
[/list]
[font=tahoma, geneva, sans-serif]​[/font]
[font=tahoma,geneva,sans-serif]این روش با موفقیت می تواند در اکثر مسائل مورد استفاده قرار بگیرد . در زندگی روزمره هم هنگامی که اطلاعات اضافی در مورد راه حل یک مساله وجود ندارد ، این روش مورد استفاده قرار می گیرد. به عنوان مثال با مشخص شدن خیابان محل زندگی یک فرد می توان برای پیدا کردن خانه وی از این روش استفاده کرد . به این صورت که با زدن زنگ تک تک خانه ها در نهایت یکی از خانه ها به عنوان خانه شخص مورد نظر مشخص خواهد شد.[/font]
[font=tahoma,geneva,sans-serif]این روش گاهی با عنوان روش جستجوی کور ( [color=#ff0000]Blind[/color] ) نیز نامیده می شود ، زیرا درخت جستجو بدون داشتن هیچ اطلاع خاصی از فضای جستجو بررسی می شود و در نهایت هدف پیدا می شود.[/font] ویرایش شده در توسط oldmagina
  • Upvote 4

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[font=tahoma,geneva,sans-serif]دو شکل خاص از جستجوی کور ( [color=#ff0000]Blind[/color] ) که عبارتند از جستجوی اول سطح و جستجوی اول عمق .[/font]



[center][IMG]http://gallery.military.ir/albums/userpics/10145/Justsearch1~0.gif[/IMG][/center]



[font=tahoma,geneva,sans-serif][size=5][color=#0000ff]جستجوی اول عمق :[/color][/size]
عمومی ترین الگوریتم جستجو همین نوع جستجوی اول عمق ( [color=#ff0000]Depth First Search[/color] ) است . علت نامیدن آن این است که در آن یک شاخه هر چقدر که عمق داشته باشد ابتدا و قبل از اینکه به شاخه دیگری برویم پیمایش می شود . معمولا در این حالت در یک درخت جستجو از یک طرف شروع می کنیم و به طرف دیگر حرکت می کنیم . جستجوی اول عمق از اولین شاخه شروع می کند و نودهای آن را تا رسیدن به برگها دنبال می کند . اگر وضعیت هدف به دست آمد که جستجو کامل است و اعلام موفقیت می شود . اگر نود برگ وضعیت هدف را ارائه ندهد ، جستجو به سمت عمیق ترین نود بعدی که مسیر بسط داده نشده دارد بر می گردد. این پروسه تا زمانی که همه نودها پردازش نشده اند ادامه می یابد و در نهایت اگر وضعیت هدف به دست آمد که جستجو موفق اعلام می شود و نود مشخص شده اعلام می شود . در غیر این صورت جستجو به خطا رسیده است .[/font]
[font=tahoma,geneva,sans-serif]جستجوی اول عمق در یک وضعیت بن بست ( هنگامی که در یک شاخه به جواب نرسیده است ) ، از روشی به عنوان برگشت به ترتیب زمانی ( [color=#ff0000]Chronological Backtracking[/color] ) جهت حرکت گام به گام به عقب استفاده می نماید . این نام گذاری به این علت صورت گرفته است که هنگام برگشت به نودی برمی گردیم که از لحاظ زمانی دیرتر از سایرین دیده شده است.[/font]
[font=tahoma,geneva,sans-serif]در این روش اگر یک شاخه از درخت خیلی بزرگ ( عمیق ) و یا حتی بی نهایت باشد ، الگوریتم جستجو با مشکل مواجه خواهد شد که برای حل این مشکل می توان این روش را با اعمال محدودیت عمقی به کار گرفت و البته این کار ممکن است باعث عدم دستیابی به وضعیت هدف شود.[/font]

[color=#0000ff][font=tahoma,geneva,sans-serif][size=5]جستجوی اول سطح :[/size][/font][/color]
[font=tahoma,geneva,sans-serif]یکی از روشهای مشابه جستجوی اول عمق ، روش جستجوی اول سطح ( [color=#ff0000]Breadth First Search[/color] ) می باشد . این روش درخت جستجو را به صورت سطح به سطح و از ریشه به طرف برگها پیمایش می کند. در واقع الگوریتم اول سطح کارش را با پیمایش همه نودهای سطح اول ( [color=#ff0000]لایه اول[/color] ) بعد از ریشه شروع می کند . جستجو با توسعه همه شاخه ها از همه نودها ی موجود در سطح جاری به سمت پایین ادامه پیدا می کند . این کار تا جایی ادامه پیدا می کند تا نود هدف پیدا شود و گزارش موفقیت صادر گردد و در غیر این صورت گزارش خطا یا شکست داده می شود.[/font]
[font=tahoma,geneva,sans-serif]جستجوی اول سطح در مواقعی که درخت جستجو دارای شاخه های خیلی عمیق می باشد و نود هدف احتمال بالاتری برای قرار گرفتن در ارتفاع کمی از درخت قرار دارد ، مناسب تر است. متاسفانه این روش جستو در زمانی که فاکتور شاخه شاخه شدن درخت خیلی زیاد باشد ( مثل بازی شطرنج ) خوب کار نمی کند.[/font]
[font=tahoma,geneva,sans-serif]نکته مهم این است که پیاده سازی جستجوی اول عمق معمولا از جستجوی اول سطح ساده تر است و معمولا حافظه کمتری نیز نیاز دارد ، چرا که فقط نیازمند نگهداری از اطلاعات همین مسیری است که در حال حاظر پیمایش می کند و این در حالی است که در جستجوی اول سطح نیازمندیم اطلاعات تمام مسیرها را تا عمقی که در حال پیمایش ان هستیم در حافظه داشته باشیم.[/font] ویرایش شده در توسط SHAHABESAGEB
  • Upvote 2

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[color=#0000ff][size=5][font=tahoma,geneva,sans-serif]خصوصیات روندهای جستجو :[/font][/size][/color]
[font=tahoma,geneva,sans-serif]روندهای جستجوی متفاوت به روشهای متفاوتی عمل می کنند . در این میان بعضی خصوصیات وجود دارند که روندهای جستجو برای کارایی بیشتر باید آنها را داشته باشند . در این قسمت توضیحی خلاصه در مورد این خصوصیات می دهیم.[/font]
[size=5][font=tahoma,geneva,sans-serif][color=#0000ff]پیچیدگی[/color] ([color=#ff0000] Complexity[/color] ) :[/font][/size]
[font=tahoma,geneva,sans-serif]در توصیف یک روش جستجو ، تشریح [color=#ff0000]کارایی[/color] آن در محدوده زمانی و مکانی معمولا مفید است . [color=#0000ff]پیچیدگی زمانی[/color] یک روش به طول زمانی که یک روند جهت یافتن یک وضعیت هدف نیاز دارد اشاره می کند .[color=#0000ff] پیچیدگی مکانی[/color] هم به مقدار حافظه ای که آن روش نیاز دارد اشاره می نماید.[/font]
[font=tahoma,geneva,sans-serif]جستجوی اول عمق از حیث مکانی بسیار مقرون به صرفه است چرا که فقط نیازمند به ذخیره اطلاعات همان شاخه ای است که در حال حاضر در حال پیمایش آن است . اما از نظر پیچیدگی زمانی این روش کارایی بالایی ندارد ، چون نیاز دارد تا کل یک شاخه را با هر طولی که دارد پیمایش کند.[/font]
[font=tahoma,geneva,sans-serif]پیچیدگی یک خصوصیت مهم جهت درک بهتر هر روند جستجویی می باشد.ممکن است یک روند جستجو بصورت معقول برای یک مساله کوچک جواب داشته باشد ولی در مواجهه با مسائل بزرگ دنیای واقعی نیاز به دوره زمانی غیر قابل قبولی داشته باشد که در این صورت کارایی ندارد. پیچیدگی یک روش همواره باید در مقابل کفایت و کارایی آن و راه حلی که تولید می کند ارزیابی شود.یک روش جستجوی خیلی سریع ممکن است نتواند همواره بهترین جوابها را بدهد و در عوض یک روش جستجو کامل که بتواند همه راه حل های ممکن را بررسی کند و تضمین کند که بهترین راه حل را خواهد یافت ، کارآیی لازم را نداشته باشد.[/font]
[size=5][font=tahoma,geneva,sans-serif][color=#0000ff]کامل بودن[/color] ( [color=#ff0000]Completeness[/color] ) :[/font][/size]
[font=tahoma,geneva,sans-serif]روش جستجویی کامل است که تضمین کند که در صورت وجود جواب حتما آن را بیابد . جستجوی اول سطح ،کامل است اما جستجوی اول عمق همیشه کامل نیست چون ممکن است در شاخه ای با طول بی نهایت گیر کند و هرگز به جوابی که در شاخه ای دیگر است نرسد. [color=#0000ff]کامل بودن خصوصیتی است که برقراری آن در جستجو الزامی است[/color] چرا که اجرای یک روند جستجو که امکان دارد جواب را پیدا نکند ، مفید نیست. برای همین در بعضی موارد ( مثل جستجو در یک درخت بازی ) فرض می کنیم که جستجوی تمام درخت جستجو لازم نیست ( و البته گاهی وقتها امکان پذیر نیست ) . در این حالت روندی که فقط تعداد کافی از درخت را پیمایش کند به اندازه کافی خوب خواهد بود.[/font]
[font=tahoma,geneva,sans-serif]مشکل اساسی روندی که کامل نیست در گزارش عدم حضور نود هدف توسط آن روش بروز می کند و در این صورت قابل اعتماد نیست.[/font]
[size=5][font=tahoma, geneva, sans-serif][color=#0000ff]بهینگی[/color] ( [color=#ff0000]Optimality[/color] ) و [color=#0000ff]مقبولیت[/color] ( [color=#ff0000]Admissibility[/color] ):[/font][/size]
[font=tahoma, geneva, sans-serif]یک روند جستجو زمانی [color=#0000ff]بهینه[/color] ا[/font][font=tahoma, geneva, sans-serif]ست که تضمین نماید [color=#0000ff]بهترین راه حل موجود[/color] را خواهد یافت . به عبارت دیگر ، مسیری را به سمت هدف بیابد که کمترین مراحل را شامل شود.[/font]
[font=tahoma, geneva, sans-serif]البته این به معنی کارا بودن روش جستجو نیست . زیرا ممکن است زمان خیلی زیادی صرف پیدا کردن بهترین جواب شود ، بلکه به معنی این است که اگر راه حل به وسیله روش مورد نظر یافت شد ، بهترین راه حل خواهد بود.[/font]
[font=tahoma, geneva, sans-serif]جستجوی اول سطح یک جستجوی بهینه است ولی جستجوی اول عمق چنین نیست . جستجوی اول عمق اولین راه حلی را که می یابد برمی گرداند که ممکن است بهترین و نز دیکترین جوابی نباشد که وجود دارد . در جستجوی اول سطح به دلیل اینکه همه نودهای عمق داده شده قبل از رفتن به عمق بعدی امتحان می شوند ، اگر راه حلی یافته شود تضمین می کند که این راه حل نزدیکترین راه حل به ریشه است و قبل از آن راه حل دیگری وجود ندارد.[/font]
[font=tahoma, geneva, sans-serif]در بعضی حالتها الگوریتمی داریم که یک راه حل قابل قبول [/font][font=tahoma, geneva, sans-serif] ( نه حتما بهترین راه حل )[/font][font=tahoma, geneva, sans-serif] را در سریعترین زمان ممکن بیابد . در این حالت مفهوم مفهوم [color=#0000ff]مقبولیت[/color] جایگزین بهینگی می شود . الگوریتمی مقبول شناخته می شود که تضمین کند بهترین راه حل ممکن را در دامنه زمانی محدود می یابد .[/font]
[size=5][font=tahoma, geneva, sans-serif][color=#0000ff]برگشت ناپذیری[/color] ( [color=#ff0000]Irrevocability[/color] ) :[/font][/size]
[font=tahoma, geneva, sans-serif]روشهای جستجویی که از برگشت به عقب استفاده می کنند روشهای سعی و خطا تلقی می شوند . الگوریتمهایی که از روش برگشت عقب استفاده نمی کنند و فقط یک مسیر را امتحان می کنند [color=#0000ff]برگشت ناپذیر[/color] نامیده می شوند .[/font]
[font=tahoma, geneva, sans-serif]روندهای جستجوی برگشت ناپذیر اغلب [color=#0000ff]جوابهای بهینه جزئی [/color]را برای مسائل می یابند که این راه حل ها ممکن است به صورت محلی خوب به نظر برسند ولی اگر با سایر جوابهای در جاهای دیگر فضای جستجو مقایسه شوند ممکن است خیلی هم عالی نباشند.[/font] ویرایش شده در توسط oldmagina
  • Upvote 2

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[font=tahoma,geneva,sans-serif][size=5][color=#ff0000]یک مثال : [/color][color=#0000ff]عبور از یک ماز [/color][/size][/font]

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

[center][IMG]http://gallery.military.ir/albums/userpics/10145/52457098962054955775.jpg[/IMG][/center]

در شکل بالا یکسری نقاط خاص در مسیر ماز برچسب گذاری شده اند .[list]
[*]A ورودی مسیر ماز است .
[*]M نقطه خروج است .
[*]C,E,F,G,H,J,L,N نقاط بن بست هستند.
[*]B,D,I,K نقاط انتخاب مسیر بعدی و گام بعدی هستند.
[/list]
با دنبال کردن ماز از نقطه A به طوری که انتخاب اول ما همواره مسیر سمت چپ باشد مسیر زیر را طی خواهیم کرد :
[left]A, B, E , F , C , D , G , H , I , J , K , L, ,M[/left]
با تشکیل درخت جستجو برای ماز عنوان شده ، درخت جست و جوی زیر را خواهیم داشت :

[center][IMG]http://gallery.military.ir/albums/userpics/10145/92821395819444431522.jpg[/IMG][/center]

[right]جالب این است که بررسی مسیر با الگوریتم جستجوی اول عمق هم دقیقا منجر به همین نتیجه خواهد شد.[/right] ویرایش شده در توسط SHAHABESAGEB
  • Upvote 1

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر
[size=3][font=tahoma,geneva,sans-serif]با تشکر. با اینکه هنوز به طور دقیق مطالعه نکرده‌ام اما ظاهرا هنوز وارد مبحث فازی نشده‌اید (؟) (شاید در ذات بحث مستتر هست و چون بنده سررشته‌ای در هوش مصنوعی ندارم متوجه نشده‌ام). اگر قصد داشته باشید جداگانه وارد بحث فازی هم بشوید، خوب خواهد بود. بحث جالبی هست و قطعا دیدگاه جدیدی را در مقابل دوستان خواهد گشود. مخصوصا که ریاضیدان‌های ایرانی هم در بحث فازی خود جزو اولین‌ها (بنیانگذار منطق فازی، جناب زاده - هرچند نشود گفت کاملا ایرانی هستند) بوده‌اند و خوشبختانه در این شاخه علم ریاضی، اسامی ایرانی روی قضایا و لم‌ها... به گوش می‌رسد. :) [/font][/size]

به اشتراک گذاشتن این پست


لینک به پست
اشتراک در سایت های دیگر

ایجاد یک حساب کاربری و یا به سیستم وارد شوید برای ارسال نظر

کاربر محترم برای ارسال نظر نیاز به یک حساب کاربری دارید.

ایجاد یک حساب کاربری

ثبت نام برای یک حساب کاربری جدید در انجمن ها بسیار ساده است!

ثبت نام کاربر جدید

ورود به حساب کاربری

در حال حاضر می خواهید به حساب کاربری خود وارد شوید؟ برای ورود کلیک کنید

ورود به سیستم

  • مرور توسط کاربر    0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.