تبلیغات
وبلاگ هوش مصنوعی موسسه آموزش عالی خیام مشهد - تكنیك ها وزبانهای برنامه نویسی هوش مصنوعی - قسمت سوم

پشتیبانی از روش های برنامه نویسی جستجویی.

مسائلی كه AI به آن مرتبط می باشد همیشه پاسخگوی یك چنین نظریه های مهندسی نرم افزار استاندارد كه شامل طراحی كامل و پردازش موفقیت آمیز و توسعه برنامه از خصوصیات و ویژگیهای دقیق است نمی تواند باشد. به دلیل طبیعت و ذات و نوع بخصوص AI  به ندرت این احتمال به وجود می آید كه بتوان ویژگیهای درست و كاملی از شكل نهایی یك برنامه AI قبل از ساخت حداقل یك proto type بدست آورد. اغلب موارد شناخت مسئله برنامه مربوط می شود به حل موارد درگیر مسئله از طریق توسعه برنامه . دلایل آن عبارت است از :

1 بیشتر مسائل AI اصولا مشخصه های ضعیفی دارند.

به دلیل اینكه پیچیدگی زیادی برای پشتیبانی از سطح اطلاعات لازم می باشد به ندرت احتمال مشاهده یك مسئله و تشخیص كامل بودن نظریه دقیق كه باید در جایگاه خودش باشد وجود دارد.

بهترین ساختارهای سطح نشانه ای كه در یك مسئله مورد استفاده قرار گیرند به ندرت در مشخصه های سطح دانش قرار می گیرند. این نوع پیچیدگی و نامفهومی خود را به روش های معمول مربوط به نرم افزارهای مهندسی مرتبط نمی دانند چون كه در این نوع برنامه ها لازمه اش این است كه مشخصه های مربوط به توسعه به خصوص مسئله قبل از اینكه مرحله كدبندی آغاز شود شكل می گیرد.یك عملكرد منطقی خود ذاتا برای مشخصه ها و خصوصیات معمولش بسیار مشكل تر از عملكرد نوعی طبقه بندی لیست یا ایجاد یك فایل سیستم است . حقیقتا این به چه معنی است؟

بقیه این مقاله در ادامه مطلب

به عنوان مثال برای طراحی یك مدار یا بهبود یك بیماری این به چه معنی است؟ چگونه یك انسان ماهر و متخصص این عملیات ها را شكل می دهد؟ سطح رضایت بخش ایجاد یك محدوده مسئله داده شده چه چیزی است؟ چه نوع دانش و اطلاعاتی لازم می باشد؟ چه مشكلاتی ممكن است به دلایل نبود و یا غیر واقعی بودن اطلاعات پیش بیاید؟ به دلیل جوابهای   به این قبیل سؤالات و دیگر سؤالات كه در یك دوره كلی مطرح می شود و بسیار تخصصی می باشند و هر وقت این طور باشد ساختار آن نیز عمیق تر و پیچیده تر می شود به همین نسبت حل آن نیز به دقت بیشتری نیاز دارد.

2 نظریاتی كه برای حل مسائل به آن پراخته می شود در محدوده بخصوصی قرار می گیرند.

گر چه چهار چوب های كلی برای حل مسائل AI وجود دارد به عنوان مثال سیستم تولید جستجو در زبان دامنه و محدوده هر مسئله نیازمند روش های خاص خود می باشد.

بنابراین راه حل موفقیت آمیز مسئله به ندرت به طور كامل برای محدودیتهای جدید عمومیت و كاربرد دارد هر كاربرد تا حدودی یك نوع مسئله جدید می باشد .

3- ساختارها و اشكال بیان AIبه طور پیوسته باید توسعه و تجدید شود

توسعه AI یك پروسه تحقیقی مداوم است . توسعه سیستم های AI كاربردی در بسیاری از روشها بسط و توسعة این پروسه ها می باشند . گرچه تجربه عمدتاً به كاربرد زبان كمك می كند ولی عموماً هیچ جایگزینی برای كاربرد یك ایده و اینكه چگونه عمل می كند وجود ندارد .

به همین دلیل AI   اصولاً به صورت جستجوی است . برنامه اغلب به صورت ماشینی است كه از طریق آن ما می توانیم دامن مسئله را كشف كنیم و روش های حل مسئله را كشف كنیم در حقیقت ابزاری است كه با آن به شناخت مسئله نائل می شویم .

چالش در برنامه نویسی AI ، پشتیبانی برنامه ریزی كشفی است . در بین خصوصیاتی كه یك زبان برنامه نویسی باید ایجاد كند موارد ذیل وجود دارد :

1-   Modularity

2-   قابلیت گسترش

3- ساختارهای سطح بالای مفید

4- پشتیبانی از Prototype سازی اولیه

 5- قابل خواندن بودن برنامه

6- مترجم ها

7- پشتیبانی نرم افزاری برای برنامه نویسی جستجویی

ما این عناوین را در پاراگراف های زیر مورد بحث و بررسی قرار خواهیم داد :

     

1-قابلیت Modularity كدها

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

این شامل پرهیز از تأثیرات جانبی و متغیرهای جهانی (global) و اطمینان از رفتار هر Module واحد در شناخت برنامه باشد كه بتواند به خوبی قابل تشخیص باشد.

برنامه های LISP به صورت مجموعة انتخابی از عملكردهای واحد می باشند در یك برنامه LISP كه به صورت مطلوب نوشته شده باشد هر عملكرد كوچك می باشد كه یك كاركرد خوب و واحد را شكل می دهند.

بنـــابراین اغلب  جایگزینی و اصلاح علت های هر كمبودی، ساده می باشد. روش های اندازه گیری متغیر LISP و پارامترهای مربوط به آن اغلب برای كاهش تأثیرات عملكردی به كار گرفته می شوند. متغیرهای جهانی،‌گر چه به وسیله زبان پشتیبانی می شوند ولی استفاده در كدهای متناسب LISP نهی شده اند.

علاوه بر این LISP دسته بندی شی گرا را از طریق سیستم شیء LISP به صورت CLOS پشتیبانی می شود.

در PROLOG واحد اصلی برنامه روش و قانون است، قوانین PROLOG همانند عملكردهای LISP كوچك و ویژه هستند.

به دلیل اینكه محدوده و قیاس متغیرها در PROLOG اغلب محدود به یك شیوه و قانون شده اند، و زبان اجازه تغییرات جهانی را نمی دهد. توصیف كردن اصولاً ساده می باشد.

LISP و PROLOG شامل مشخصه های سهل و آسانی می باشند كه هنگامی كه با یك ساختار برنامه مشخص تركیب شوند، موجب آسان شدن پرداخت آن می گردند.

 

2-قابلیت گسترش

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

اغلب امكان توصیف شكل نهایی یك برنامه AI وجود ندارد،‌اما امكان تشخیص ساختارهای سطح بالا و مفید برای كشف و بررسی دامنه مسئله وجود دارد. این ساختارها می توا ند شامل الگوهای مناسب ، كنترل كننده های جستجو وعملكردهای توصیف یك زبان توصیفی باشد.

اصـــولاً ایـــن نظـــریه كه می گوید اگر شما ساختار نهایی یك برنامه را تشخیص ندهید می بایستی سعی كنید كه ساختار زبان را توصیف كنید كه به شما كمك خواهد كرد كه آن ساختار را توسعه دهید.

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

LISP و PROLOG و همچنین توسعة شیء گرا آنها همانند CLOS همگی موجب می شوند كه توصیف سادة اهداف، پیش بینی ها و عملكردهای جدید ، صورت پذیرد.

هنگامی كه توصیف صورت پذیرفت، این ساختارهایی كه كاربر ایجاد كرده دارای رفتاری شبیه به ساختارهای اساسی زبان می باشند.

این زبانها به  وسیله توسعة توانایی های اصولی از ابتدا تا حل آن برنامه ریزی می شوند. دراین صورت،‌گفته می شود كه برنامه های معمول، ساختاربندی می شوند ولی برنامه های AI رشد و توسعه می یابند.

این مورد با تشخیص سریع مقایسه می شود كه در این مورد زبانهای معمولی مابین خصوصیات ساختاری و برنامه های توسعه یافته، كاربردی واقع می شوند.

در یك برنامه  ما ممكن است عملكردهای جدیدی را تعریف كنیم اما ساختار آنها بسیار محدودتر از ســـاختارهای از قبل ساخته شده است. این موجب محدودیت انعطاف پذیری و استفاده از این توسعه و گسترش ها می شود.

LISP و PROLOG همچنین موجب ساده شدن نوشتن توصیف متغیرهای ویژه یك زبان خاص می شوند. در LISP برنامه ها و اطلاعات به گونه ساختاری لیست می شوند. این باعــث ســادگی نوشتن برنامه ای می شود كه از كد LISP به عنوان داده (Data) استفاده می كنند كه در این صورت باعث ساده تر شدن توسعه، تصویفی می شوند.

بسیاری از زبانهایی كه از نظر سابقه و همچنین اقتصادی در نوع زبانهای AI حائز اهمیت می باشند، مثل PLANNER و ROSIE و KEE و OPS بر اساس توانائی های LISP ساخته می شوند.

PROLOG این توانائی ها را در قالب تعدادی “meta – predicates” كه قابل پیش بینی برای تركیب با دیگر مشخصه های PROLOG باشند. ایجاد می كند كه در این صورت باعث ساده شدن نوشتاری آن می گردد.

همراه با LISP تعدادی زبانهای سطح بالا AI بر اساس PROLOG ساخته شده اند كه از این روش استفاده می كنند.

 

3-وجود ساختارهای مفید سطح بالا

برنا مه نویسی جستجویی به كمك یك ساختار قوی سطح بالا در زبان به وجود می آید،‌این ساختارهای قوی و كلــــی به  برنامه نویس اجازه توسعه سریع ساختارهای ویژه برای بیان اطلاعات توصیفی و كنترل برنامه را می دهند.

در LISP اینها شامل اصول اساسی نوع اطلاعاتت می شود كه موجب ایجاد ساختارهای پیچیده اطلاعاتی و عملكردهای قوی برای توصیف عملیات بر روی آ‌نها می شود. به دلیل اینكه LISP قابل گسترش می باشد و برای چندین دهه است كه مورد استفاده قرار می گیرد. مهمترین و قوی ترین عملكردهای توصیفی LISP همان خصوصیات استاندارد زبانی آنها می باشد. ویژگیهای معمول LISP شامل جیدها عملكرد برای ایجاد ساختارهای اطلاعاتی، ساخت تداخلگرها و قابلیت Edit كردن ساختارهای LISP می شوند.

PROLOG به عنوان یك زبان مقایسه ای كوچك مطرح است كه بخشی از آن به دلیل نو بودن و بخش دیـــــگر به دلیل عدم سادگی و كامل بودن آن است با این حال PROLOG به كاربرها اجازة ایجاد پیشگوئی های به خصوص را می دهد و مفیدترین اینها راه خود را برای استاندارد شدن باز كرده اند.

 

4-پشتیبانی برای ساخت Prototype اولیه

یكی از روش های برنامه نویسی جستجویی و مهم، Prototype سازی اولیه می باشد. در اینجا برنامه نویس یك راه حل سریع برای مسئله پیدا می كند و از آن برای جستجو فضای مسئله استفاده می كند. وقتی كه مسئله مورد بررسی قرار گرفت و روش حل آن مشخص شد، Prototype كنار گذاشته می شود و یك برنامه نهایی كه تأكید آن بر روی صحت و مؤثر بودن می باشد، ساخته می شود. گر چه مشكل است كه چیزهایی را كه زیاد مورد استفاده قرار می گیرند تا برای ساخت یك برنامه كامپیوتری به كار روند، كنار گذاشت، ولی انجام چنین كاری باعث صرفه جوئی در زمان و بهبود كیفیت نهائی كار می شود. ساخـــتارهای ایجاد شده به وسیله زبانهای AI عمدتاً باعث افزایش سرعت توسعة Prototypeها می شوند.


  • آخرین ویرایش:-
آخرین پست ها