هوش مصنوعي و الگوريتم ژنتيك

Keivan Keihanipour

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


 
آخرین ویرایش:

Keivan Keihanipour

عضو جدید
کاربر ممتاز
الگوريتم‌هاي ژنتيك - ‌پرواز در فضاي حالت مسئله‌

الگوريتم‌هاي ژنتيك - ‌پرواز در فضاي حالت مسئله‌

[FONT=Arial, Helvetica, sans-serif]اشاره : [/FONT]

الگوريتم‌هاي ژنتيك، به عنوان يكي از راه‌حل‌هاي يافتن جواب مسئله در بين روش‌هاي مرسوم در هوش مصنوعي مطرح است. در حقيقت بدين روش مي توانيم در فضاي حالت مسئله حركتي سريع‌تر براي يافتن جواب‌هاي احتمالي داشته باشيم؛ يعني مي توانيم با عدم بسط دادن كليه حالات، به جواب‌هاي مورد نظر برسيم. اين مقاله با اين هدف نوشته شده است كه اين امكان را فراهم كند تا الگوريتم‌هاي ژنتيك را ياد بگيريد و از آن‌ها در برنامه‌هايتان استفاده كنيد.​






1- مقداري درس بيولوژي
در جهان اطراف ما همه ارگانيزم‌هاي حياتي از ساختارهاي قانونمندي تشكيل شده‌اند. ساختارهايي كه از سوي آفريدگار هستي در بطن مخلوقات قرار داده ‌شده است. همه اين ارگانيزم‌ها از بلوك‌هاي پايه‌اي از زندگي به نام سلول تشكيل به وجود آمده‌اند. قوانين مزبور در قالب ژن‌ها به صورت كد شده در هر ارگانيزم وجود دارند. از به هم وصل شدن اين ژن‌ها، رشته‌هايي طولاني به نام كروموزوم توليد مي‌شود. هر ژن نمايانگر يكي از خصوصيات آن ارگانيزم است.

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

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

در غار موجود ديگري زندگي نمي‌كرد و بدين ترتيب سوتك‌ها از هيچ چيزي نمي‌ترسيدند. در قسمتي از كف غار رودخانه‌اي وجود داشت كه آب مورد نياز سوتك‌ها و جلبك‌ها را تأمين مي‌كرد. بدين ترتيب سوتك‌هاي داستان ما هيچ نيازي به حس بينايي در فضاي تاريك غار نداشتند. سال‌هاي متمادي سوتك‌ها بدين‌ترتيب زندگي مي‌كردند تا اين‌كه يك روز زلزله مهيبي رخ داد و در اثر آن، قسمتي از غار خراب شد و راهي به بيرون باز شد و براي اولين بار سوتك‌ها گرماي نور خورشيد را روي پوست خود احساس كردند.

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

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

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

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

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

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

بدين ترتيب تركيب ژن‌ها اين امكان را به وجود ميآورد تا ارگانيزم‌هاي جديدتري به دست آوريم كه تركيبي از مزاياي هر دو والد باشد.

3- الگوريتم ژنتيك در دنياي كامپيوتر

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

1011011010000101011111110

‌يا

1264196352478923455548216

‌براي شروع فعاليت الگوريتم ژنتيك نيازمند جمعيتي از كروموزوم‌ها به صورت تصادفي هستيم. يعني در ابتدا به عنوان قدم اول، تعدادي كروموزوم به صورت تصادفي ايجاد مي كنيم. فرض كنيد N كروموزوم و اين N را جمعيت آغازين مي‌ناميم.

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

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

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

بدين ترتيب دو كرومزوم جديد توليد مي‌شود (دو جواب جديد). راه ديگري نيز براي انجام عمل تركيب وجود دارد و آن انتخاب چند نقطه شكست است. مثلاً به شكل زير براي 2 نقطه شكست توجه كنيد.

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


اكنون يك مرحله را انجام داديم و يك كرومزوم جديد (جواب جديد) براي مسئله ايجاد كرديم. در ادامه دو مرتبه دو كرومزوم از جمعيت اوليه انتخاب مي‌كنيم و همه اعمال گفته‌شده را روي آن انجام مي دهيم تا كرومزوم ديگري ايجاد شود و اين‌كار را به قدري تكرار مي‌كنيم تا به تعداد كرومزوم‌هاي جمعيت اوليه، كرومزوم جديد داشته باشيم و اين مجموعه كرومزوم جديد در حقيقت نسل جديد ما خواهند بود و ما اين‌كار را به قدري ادامه مي‌دهيم تا نسل‌هاي بهتر و بهتري را ايجاد كنيم و هنگامي جواب نهايي به دست ميآيد كه تابع ارزشي ما، مقدار مطلوب ما را به ازاي مقدار مورد نظر ما از كروموزوم ها برگرداند.
4- نكات مهم در الگوريتم هاي ژنتيك
1- شرايط جمعيت اوليه مي‌تواند در سرعت رسيدن به جواب بسيار تأثيرگذار باشد. يعني اگر جمعيت اوليه مناسب‌تر باشد، بسيار سريع‌تر به جواب مي‌رسيم. بنابراين گاهي در بعضي از مسئله‌ها به جاي آن كه جمعيت اوليه به صورت تصادفي ايجاد شود، از اعمال شرايط خاص مسئله به جمعيت اوليه نيز استفاده مي‌شود.

2- با توجه به وجود پارامترهاي تصادفي در الگوريتم مسئله حتي در صورت استفاده از جمعيت اوليه يكسان ممكن است در اجراهاي مختلف الزاماً جواب‌هاي يكسان به دست نيايد و البته در صورت استفاده از جمعيت اوليه متناوت اين پديده ملموس‌تر خواهد بود.

3- تابع ارزش در اين‌گونه از الگوريتم‌ها از اهميت بسزايي برخوردار است؛ چرا كه معمولاً در اكثر مسائل در اثر تركيب، حالت‌هايي رخ مي‌دهد كه منطبق بر شرايط مسئله نيست و حتي فاقد معني و مفهوم است. بنابراين تابع ارزش بايد به گونه‌اي طراحي شود كه به ازاي اين حالات مقادير بسيار كمي برگرداند و از طرفي بايد براي نزديك شدن به هدف بسيار خوب تخمين بزند.

4- يكي از پديده‌هاي جالب اين است كه ممكن است در نسل‌هاي مياني نمونه‌هايي بروز كنند كه از نظر تابع ارزش و خوب بودن بسيار مناسب باشند. يك روش اين است كه اينگونه موارد را شناسايي كنيم و در نسل بعدي نيز از آن‌ها استفاده كنيم. به اين تكنيك نخبه‌گرايي مي‌گويند كه عملاً تأثير بسزايي در رسيدن به جواب مسئله دارد.

5- نتيجه گيري‌
الگوريتم‌هاي ژنتيك الگوريتم‌هايي هستند كه داراي قدرت بسيار زيادي در يافتن جواب مسئله هستند، اما بايد توجه داشت كه شايد بتوان كاربرد اصلي اين الگوريتم ها را در مسائلي در نظر گرفت كه داراي فضاي حالت بسيار بزرگ هستند و عملاً بررسي همه حالت‌ها براي انسان در زمان‌هاي نرمال (در حد عمر بشر) ممكن نيست. از طرفي بايد توجه داشت كه حتماً بين حالات مختلف مسئله بايد داراي پيوستگي مناسب و منطقي باشيم. در نهايت الگوريتم‌هاي ژنتيك اين امكان را به ما مي‌دهد كه داراي حركتي سريع در فضاي مسئله به سوي هدف باشيم. به گونه‌اي كه مي‌توانيم تصور كنيم كه در فضاي حالات مسئله به سوي جواب مشغول پرواز هستيم.
 
آخرین ویرایش:

Keivan Keihanipour

عضو جدید
کاربر ممتاز
معرفی الگوریتم‌هاي ژنتیک

معرفی الگوریتم‌هاي ژنتیک

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

2-الگوریتم ژنتیک در هر تکرار چند نقطه از فضای جستجو را در نظر می‏گیرد.

3-الگوریتم ژنتیک برای راهنمایی جهت جستجو، انتخاب تصادفی انجام می‏دهد که به این ترتیب اطلاعات مشتق نیاز ندارد. مکانیسم‏هایی که تکامل روی موجود زنده را انجام می‏شوند تا کنون به طور کامل فهمیده نشده‏اند. اما تعدادی از ویژگی‏های این مکانیسم شناخته شده است.

در اینجا تعدادی از ویژگی‏های یکی از تئوری‏های بسیار پذیرفته شده است آورده می‏شود.
1- تکامل، فرایندی است که روی رشته‏ها صورت می‏گیرد، نه روی موجود زنده‏ای که معرف آن رشته است.
2- انتخاب طبیعی، پیوندی ما بین رشته‏های و عملکرد ساختمان‏های رمز‏گشایی شده آنها می‏باشد.
3- فرایند تولید مثل، نقطه‏ای است که تکامل صورت می‏گیرد. تکامل ممکن است سبب شود که فرزند بیولوژیکی با والدین خود متفاوت می‏باشد.

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

Keivan Keihanipour

عضو جدید
کاربر ممتاز
اصطلاحات الگوریتم ژنتیک/ اجزاء اساسی الگوریتم ژنتیک و تشریح کلی از الگوریتم ژنتیک

اصطلاحات الگوریتم ژنتیک/ اجزاء اساسی الگوریتم ژنتیک و تشریح کلی از الگوریتم ژنتیک

1- رشته ( کروموزوم) : آرایه‏ای از اعداد صحیح است که مقادیر عناصر این آرایه با توجه به نوع رشته تعیین می‏شود. مثلاً در رشته بیتی این عناصر فقط صفر و یک می توانند باشند. این رشته‏ها مشخص کننده مجموعه متغیر های بهینه سازی مسأله مورد نظر هستند.
2- ژن : بخشی از رشته که خصوصیات ویژه‏ای را معین می‏کند.
3- نماد ژنی : به ترکیب ژنتیکی یا همان رشته گفته می‏شود.
4- نماد معرف : به خصوصیات قابل مشاهده یک جاندار گفته می‏شود و در مسائل بهینه سازی به بردار حقیقی حاصل از رمز‏گشایی یک رشته گفته می‏شود.
5- نسل : یک دوره از زاد و ولد اعضاء یک جمعیت را یک نسل می‏گویند. به عبارت دیگر هر جایگزینی از جمعیت قدیمی به وسیله جمعیت جدید یک نسل ( زاد و ولد ) نامیده می‏شود.
6- شایستگی : در طبیعت به مقدار سازگاری و تطابق یک جاندار با محیط گفته می‏شود و در بهینه‏سازی به مقدار ارزیابی تابع هدف یا مقداری متناظر با آن به ازای یک رشته خاص، گفته می‏شود که نشان دهنده میزان مطلوب بودن آن رشته برای آن مسأله خاص ( تابع هدف ) می‏باشد.
7- تبادل ژنی : به جا به جایی و مبادله قسمت‏های متناظر از دو رشته گفته می‏شود.
8- جهش : به تغییر تصادفی و ناگهانی یکی از عناصر در یک رشته گفته می‏شود.
----------------------------------------------------------------


در حالت کلی هر الگوریتم ژنتیک دارای سه جزء اساسی زیر است:
1- جزء ارزیابی 2- جزء جمعیت 3- جزء تولید مثل
---------------------------------------------------------------
1- جزء ارزیابی : شامل یک تابع ارزیابی است که درستی هر رشته‏ای که در جمعیت وجود دارد را اندازه گیری می‏کند. در مورد این جزء نکته مهم این است که چیز مخصوصی درباره تابع ارزیابی، که آن را با الگوریتم ژنتیک گره بزند، وجود ندارد و به راحتی می‏توان هر تابع دیگری را به جای آن تابع به کار برد. البته مادامی که تعداد متغییرهای دو تابع و محدوده تغییرات متغییر‏ها و دقت مورد نیاز آنها یکسان باشند. به عبارت دیگر، در الگوریتم ژنتیک هیچ اطلاعاتی درباره مسأله‏ای که باید حل شود، وجود ندارد و تا آنجایی که به الگوریتم ژنتیک مربوط می‏شود، صرفاً تولید مثل می‏کند و رشته‎های جدید تولید می‏کند و روی رشته‏های بیتی تولید شده به گونه‏ای عمل می‏کند که آنهایی که دارای ارزیابی بالاتری هستند، بیشتر اوقات تولید مثل کنند. فرایند رمز گشایی و تابع ارزیابی به راحتی می‏توانند جایگزین شوند. این تغییرات، تا مادامی که تعداد بیت‏های رشته‏ها ثابت بماند به تغییر اجزای دیگر الگوریتم ژنتیک نیاز ندارد.
2- جزء جمعیت : شامل جمعیتی از رشته‏ها و تکنیک‏هاست که این تکنیک‏ها برای ایجاد و دستکاری آن جمعیت استفاده می شود.
3- جزء تولید مثل : شامل روش هایی برای ایجاد رشته‏های جدید طی تولید مثل است.
تداخل بین سه جزء یک الگوریتم ژنتیک موقعی که در حال اجراست، به این صورت می‏باشد که جزء جمعیت از جزء تولید مثل، جمعیت جدید را می‏خواهد. جزء تولید از جزء جمعیت، والدینی که باید در رخداد تولید مثل به کار برده شوند را طلب می‏کند. در هر رخداد تولید مثل، دو والد از جزء جمعیت گرفته شده و روی آنها عملگرهای تبادل و جهش اعمال می‏شود تا دو فرزند تولید شود. همچنین موقعی که یک مجموعه جدید از فرزندان تولید شدند، جزء جمعیت از جزء ارزیابی برای ارزیابی فرزندان جدید ( رشته‏های جدید ) استفاده می‏کند.
-----------------

یک تشریح کلی از الگوریتم ژنتیک را می‏توان به صورت زیر در نظر گرفت :
1- جمعیتی از رشته‏ها را به صورت تصادفی بسازید.
2- هر رشته داخل جمعیت را ارزیابی کنید.
3- رشته‏های جدید را با ترکیب رشته‏های جاری ایجاد کنید. برای ترکیب رشته‎های والد از عملگر‏های جهش و تبادل استفاده کنید.
4- اعضایی از جمعیت را برای ایجاد فضایی برای رشته‏های جدید حذف کنید.
5- رشته‏های جدید را ارزیابی نموده و آنها را داخل جمعیت قرار دهید.
6- اگر زمان اجرا تمام شده است توقف نمایید و بهترین رشته را باز گردانید. در غیر این صورت به مرحله سه بازگردید.
روند ذکر شده در بالا متداول‏ترین روش الگوریتم ژنتیک را تشریح می‏کند. اما محققین مختلف، آن را به روش‏های متفاوت پیاده سازی کرده‎اند.
(دو روش متداول دیگر برای اختتام: همگرا شدن الگوریتم، تولید تعداد خاص نسل می‏باشد )
 

Keivan Keihanipour

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

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

اغلب نام الگوریتم ژنتیک متداول در مقابل الگوریتم ژنتیک ترکیبی آورده می‏شود. در الگوریتم ژنتیک متداول معمولاً از سه عملگر انتخاب، تبادل و جهش استفاده می‏شود. این سه عملگر معمولاً عملگرهای اساسی همه روش‏های الگوریتم ژنتیک هستند که از رشته‏های بیتی استفاده می‏کنند. با توجه به اینکه روش رمز کنندگی با استفاده از رشته‏های بیتی می‏توان با طیف وسیعی از مسائل روبرو شد؛ می توان گفت این سه عملگر و روش رمزکنندگی رشته بیتی باعث مقاوم شدن الگوریتم ژنتیک خواهد شد که در این مورد در بخش بعد توضیحات بیشتری داده خواهد شد.

1- عملگر انتخاب
هدف از انتخاب والدین در الگوریتم ژنتیک دادن شانس تولید مثل بیشتر به آن اعضایی است که برازندگی بالاتری داشته باشند. چندین روش برای انجام این کار وجود دارد.
یک روش که به طور معمول استفاده می‏شود، روش انتخاب با استفاده از چرخ گردان است. روند اجرای این روش به صورت زیر می‏باشد:
الف – برازندگی همه اعضای جمعیت را جمع کنید و نتیجه را برازندگی کل بنامید
ب- عدد n را به صورت تصادفی تولید کنید، به طوری که آن عددی بین صفر و برازندگی کل باشد. ج- اولین عضو از جمعیت را که برازندگی آن به اضافه برازندگی اعضای پیشین جمعیت بزرگ‏تر یا مساوی n باشد را باز‏گردانید.

اثر انتخاب والدین به روش چرخ گردان بازگردان یک والد می‏باشد که به صورت تصادفی انتخاب شده است. اگر چه این فرایند انتخاب، تصادفی است، شانس هر والدی که انتخاب می‏شود مستقیماً متناسب با برازندگی آن است. به طور متعادل در روی تعدادی از نسل‏ها این الگوریتم ژنتیک اعضای با کمترین برازندگی را دفع می‏کند و به انتشار مواد ژنتیکی در برازنده‎ترین اعضای جمعیت کمک می‏کند. البته ممکن است بدترین عضو جمعیت بتواند به وسیله این الگوریتم انتخاب شود ( زیرا به هر حال در روند این الگوریتم عنصر تصادف نیز وجود دارد. ) اتفاقاتی از این دست در جمعیتی با هر اندازه، قابل صرف‎نظر هستند و به فرض انتخاب چنین اعضایی در یک نسل، احتمال دفع آنها در نسل‏های بعدی بسیار بیشتر است. به هر حال، با گذشت چند نسل، این اعضا از جمعیت دفع می‏شوند. در به کار بردن روش انتخاب والدین باید دقت شود که مقادیر برازندگی رشته‏ها باید اعداد مثبت باشند.

2- عملگر تبادل
عملکرد این عملگر و عملگر جهش باعث می‏شود که رشته های تولید شده طی تولید مثل، از رشته‏های والدینشان متفاوت باشند. در طبیعت، این عملگر موقعی رخ می‏دهد که دو والد قسمت‏هایی از رشته‏های متناظرشان را معاوضه کنند و در الگوریتم ژنتیک، عملگر تبادل، مواد ژنتیکی دو رشته والد را مبادله می‏کند تا دو فرزند ( رشته جدید ) ایجاد شود. چندین نوع عملگر تبادل وجود دارد. ولی معروف‏ترین عملگر تبادل به کار رفته در الگوریتم ژنتیک عملگر یک نقطه‏ای می‏باشد.
در الگوریتم ژنتیک این عملگر به صورتی که در زیر تشریح می‏شود، اعمال می‏گردد. برای اینکه بتوانیم از این عملگر استفاده کینم نیاز به دو رشته داریم. بنابراین با دوبار اعمال عملگر انتخاب روی جمعیت جاری دو رشته از آن را انتخاب می‏کنیم سپس یک آزمون احتمال انجام می‏دهیم تا مشخص شود که عملگر تبادل روی دو رشته اعمال بشود یا نشود. این آزمون با استفاده از یک سکه نا همگن صورت می‏گیرد به این صورت که سکه با احتمال (Pcross) شیر و با احتمال (1- Pcross) خط می‏آید. به عنوان مثال، اگر قرار باشد با شیر آمدن سکه عملگر تبادل بر روی رشته اعمال گردد، فرض می‏کنیم سکه را پرتاب کرده‏ایم و شیر آمده است. سپس وارد مرحله بعدی یعنی اجرای عملگر تبادل می‏شویم یک عدد تصادفی بین یک و طول رشته‏ تولید می‏شود.پس از مشخص شدن این عدد صحیح که نشان دهنده مکان تبادل روی رشته‏ها است, هر دو رشته از محلی که این عدد مشخص می‏کند شکسته می‏شوند و قسمت‏های انتهایی آنها با همدیگر معاوضه می‏شوند. اکنون قسمت‏های جدا شده به همدیگر متصل می‏شوند، تا دو رشته جدید حاصل شود
3-عملگر جهش
این عملگر نیز یکی از عملگرهای الگوریتم ژنتیک است و به کارگیری آن قابلیت الگوریتم ژنتیک را برای یافتن حل‏های نزدیک بهینه افزایش می‏دهد. جهش، تغییر اتفاقی در مقدار یک وضعیت ویژه رشته می‏باشد. با به کارگیری این عملگر مشخصه هایی که در جمعیت والدین وجود ندارد، ایجاد می‏شود. زیرا جهش باعث تغییر مقدار یک ژن می‏شود یعنی اگر یک باشد صفر می‏شود و بالعکس اگر صفر باشد یک می‏شود. لذا همین موضوع باعث تغییر مشخصه‏های یک رشته می‏شود و برای اینکه جمعیت پیش از موعد همگرا نشود، مناسب می‏باشد. زیرا یکی از دلایل همگرایی پیش از موعد یکسان بودن اعضاء جمعیت می باشد که عملگر جهش باعث می شود احتمال یکسان شدن اعضاء در جمعیت های جدید بسیار کاهش یابد. روش پیاده سازی این عملگر در زیر توضیح داده می شود.
این عملگر بر خلاف عملگر تبادل که به دو رشته نیاز داشت، به یک رشته نیاز دارد، پس از اینکه عملگر تبادل روی دو رشته اعمال شد و دو رشته جدید به دست آمد، عملگر جهش به این دو رشته به صورت مجزا اعمال می شود. روش اعمال به این صورت است که برای تک تک عناصر یک رشته، آزمون احتمال جهش صورت می‏گیرد. در صورتی که این آزمون با موفقیت انجام شود، مقدار آن وضعیت از یک به صفر یا از صفر به یک تغییر می‏کند و به اصطلاح جهش می‏کند. انجام آزمون احتمال نیز با استفاده از یک سکه نا همگن که با احتمال (Pcross) شیر و با احتمال (1- Pcross) خط می‏آید، صورت می‎گیرد و در صورتی که با پرتاب سکه شیر آمده باشد مقدار بیت مربوط جهش می‏کند.
همانطور که در بالا گفته شد بایستی آزمون احتمال برای تک تک وضعیت‎های یک رشته صورت گیرد. به عبارت دیگر برای هر جهش یک بار سکه ناهمگن رها می‏شود و با توجه به نتیجه، مقدار بیت جهش می‏یابد یا جهش نمی‏یابد.
 

Keivan Keihanipour

عضو جدید
کاربر ممتاز
تكنيك‌ها و زبان‌هاي برنامه‌نويسي هوش‌مصنوعي/ قسمت اول

تكنيك‌ها و زبان‌هاي برنامه‌نويسي هوش‌مصنوعي/ قسمت اول

اين انقلاب در اقتصاد امروز و نظم جامعه، به همان ميزان انقلاب صنعتي در قرن 19 تأثير دارداين تحولات قادر است الگوي فكري و فرم زندگي هر فرد را تغيير دهد.
انقلاب كامپيوتر توان ذهني ما را گسترش مي دهد.
عملكرد اولية برنامه نويسي هوش مصنوعي(AI)ايجاد ساختار كنترلي مورد لزوم براي محاسبه سمبوليك است خصوصيات اين ساختارها به مقدار زيادي موجب تشخيص خصوصياتي مي شود كه يك زبان كاربردي مي بايستي فراهم كند.
در اين مقدمه به يك سري خصوصيات مورد نظر براي زبان برنامه نويسي سمبوليك مي پردازيم و زبانهاي برنامه نويسي LISP و PROLOG را معرفي خواهيم كرد.
اين دو زبان علاوه بر اين كه از مهمترين زبانهاي مورد استفاده در هوش مصنوعي هستند، خصوصيات semantic و syntactic آنها نيز باعث شده كه آنها شيوه ها و راه حل هاي قوي براي حل مسئله ارئه كنند.
تأثير قابل توجه اين زبانها بر روي توسعه AI از جمله توانائي آنها به عنوان «ابزارهاي فكر كردن» مي باشد كه از جمله نقاط قوت آنها در زبانهاي برنامه نويسي مي باشد.
همان طور كه هوش مصنوعي مراحل رشد خود را طي مي كند زبانهاي LISP و PROLOG بيشتر مطرح مي شوند.
اين زبانها كار خود را در محدودة توسعه و prototype سازي سيستم هاي AI در صنعت و دانشگاهها دنبال مي كنند.
اطلاعات در مورد اين زبانها به عنوان بخشي از مهارت هر برنامه نويس AI مي باشد ما به بررسي اين دو زبان در هوش مصنوعي مي پردازيم.
آنــــچه را كـــه نمي دانيم موجب دردسر و گرفتاري ما نخواهد شد، بلكه دردسرها از دانسته ها سرچشمه مي گيرند.
W.ROGERS

زبان ، شناخت و خلاصه پردازي
توانايي شكل گيري خلاصه برداري از تجربيات از توانمند ترين و اساسي ترين توانائي هاي ذهن انسان است خلاصه پردازي به ما اين اجازه را مي دهد كه به فهم جزئيات از يك محدوده ي كلي اطلاعات مربوط به يك خصوصيت كلي سازمان و رفتار برسيم . اين خلاصه ها به ما اجازه شناخت و درك كامل موارد دريافت شده در حوزه خاص را مي دهند . اگر ما وارد يك خانه شويم كه به خوبي ساخته شده باشد ، راههاي خود را به اطراف پيدا خواهيم كرد . ساختار خصوصيات اطاق نشيمن ، اطاق خواب ،‌آشپزخانه و حمام عموماً از ويژگيهاي يك مدل خانة استاندارد مي باشد .
خلاصه پردازي به ما حس شناخت خانه هاي متفاوت را مي دهد . يك تصوير ممكن است بياني قوي تر از هزاران كلمه داشته باشد ، اما يك خلاصه مشخصاً بيان كنندة خصوصيات مهم يك كليت از نوع تصوير است .
وقتي كه ما به تئوري براي توصيف كلاس هاي يك پديده مي پردازيم ، خصوصيات و ويژگيهاي كمي و كيفي مربوط به كلاس از كل جزئيات خلاصه مي شود .
كه اعضاء به خصوص خود را مشخص مي كند . اين كاهش جزئيات به وسيله قدرت توصيف و پيش بيني يك نظريه ارزشمند جبران مي شود .
خلاصه سازي يكي از ابزارهاي اساسي شناخت و ارزيابي كليت هاي جهان اطراف ما و همچنين ساختار ذهني ما است . در حقيقت اين پروسه به طور مداوم براساس دانش و اطلاعات صورت مي گيرد . دانش و اطلاعا نيز در لايه ها و بخش هايي از خلاصه پردازي ساخته مي شود كه از مكانيسم هايي كه ساختار را فشرده ساخته و از حس اوليه به سمت يك سري تئوري هاي علمي سوق داده مي شود و در نهايت بيشتر اين ايده ها دربارة ايده هاي ديگر و نشأت گرفته از آنها مي باشد .
خلاصه پردازي طبقه بندي شده (سلسله مراتبي ) :
ساختار و سازمان آزمايش و تجربه در ارتباط با توصيفات كلاس هاي خلاصه سازي يكي از ابزارهاي شناخت رفتار و ساختار سيستم هاي مركب است كه شامل برنامه هاي كامپيوتر مي شوند .
همانند رفتار يك حيوان كه ممكن است بدون توجه به فيزيولوژي سيستم عصبي نهفته در پشت آن مورد مطالعه قرار گيرد .
يك الگوريتم داراي خصوصيات مربوط به خود مي باشد كه كاملاً آن را از برنامه اي كه آن را به كار مي برد جدا مي سازد .
به عنوان مثال دو نوع كاربر متفاوت جستجوي باينري را در نظر بگيريد .
يكي از آنها يعني Fortran از محاسبات و طبقه بندي استفاده مي كند و ديگري يعني Ctt از Pointer استفاده مي كند كه بتواند در جستجوي درون شاخه هاي binary كاربرد داشته باشد .
اگر دقيق تر نگاه كنيم اين برنامه ها مثل هم مي باشند چون اگر جز اين باشد كاربردهاي آنها نيز تفاوت خواهد شد . جداسازي الگوريتم از كه مورد استفاده در كاربرد آن يكي از نمونه هاي خلاصه سازي سلسله مراتبي مي باشد .
Allen New ell بين سطح دانش و سطح نشانه ها براي توصيف يك سيستم هوشمند تفاوت قائل شده است.
سطح نشانه ها همراه سازماندهي به خصوصي مورد توجه قرار گرفته كه براي بيان اطلاعات حل مسئله مورد استفاده قرار مي گيرد. بحث مربوط به توجه به منطق به عنوان يك زبان يك نمونه از مواردي است كه به سطح نشانه پرداخته است.
علاوه بر سطح نشانه سطح دانش است كه توجه آن به مقدار و محتوي اطلاعات يك برنامه و شيوه استفاده از آن اطلاعات مي باشد.
اين نوع تمايز در ساختار و معماري سيستم هايي كه بر اساس دانش و اطلاعات و سبك توسعه اي كه آن را پشتيباني مي كتد منعكس مي گردد.
به دليل اينكه كاربرها برنامه ها را در قالب دانش و توانايي خودشان مي شناسند بنابراين حائز اهميت است كه برنامه هاي AI داراي يك سطح خصوصيات اطلاعاتي باشند.
جداسازي اصل دانش و اطلاعات از ساختار كنترل اين نظريه را آشكار مي سازد و توسعه رفتار سطح دانش را ساده مي سازد.
همانند اين نيز سطح نشانه اي يك زبان توصيفي را تشريح مي كند كه شبيه قوانين و روشهاي توليد يا منطق براساس دانش و اطلاعات مي باشد.
جداسازي آن از سطح و دانش و اطلاعات نه برنامه نويس اين اجازه را مي دهد كه به سمت خلاصه پردازي ت،ثير پذيري و راحتي برنامه نويسي سوق پيدا كندكه در ارتباط با رفتار و عملكرد بالاي برنامه نمي باشد.
كاربرد بيان سطح نشانه اي شامل يك سطح دوره پائين تر از ساختار برنامه مي شود و بيانگر يك سري ملاحظات طراحي اضافي مي شود.
اهميت نظريه چند مرحله اي نسبت به طراحي سيستم نمي تواند بيش از اين مورد توجه قراار گيرد.
يعني اينكه به برنامه نويس اجازه مي دهد كه با پيچيدگي نهفته شده در سطوح پائين تر خود را درگير نكند و توجه و تاكيدش بر روي منابع مناسب با سطح فعلي خلاصه پردازي كند.
همچنين موجب مي شود كه اصول تئوري هوش مصنوعي عاري از كاربردهاي خاص يا زبان برنامه نويسي باشد . اين همچنين به ما قدرت توصيف يك كاربرد را مي دهد و تاثير گذاري خود را بر روي ماشين ديگر اثبات مي كند بدون اينكه بر رفتارش در سطوح بالاتر تاثير بگذارد .


سطح اطلاعات توصيف كننده توانائي هاي يك سيستم هوشمند است. محتوي دانش و اطلاعات مستقل از شكل پذيري مورد استفاده براي بيان آن است به همان اندازه كه زبان بيان كاملا مؤثر مي باشد .
توجه به سطح دانش شامل سؤالاتي از اين قبيل است:
از اين سيستم چه چيزي ساخته خواهد شد؟ چه اشيا و چه ارتباطي در آن محدوده مؤثر و مفيد است ؟ چگونه يك اطلاعات جديد به سيستم اضافه مي گردد؟
آيا واقعيات در طي زمان تغيير مي كنند؟ چگونه و چطور سيستم نيازمند است كه دلائل اطلاعات خود را ثابت كند؟ آيا محدوده ارتباطي داراي يك طبقه بندي درست و شناخته شده است؟
آيا اين محدوده شامل يك سري اطلاعات نادرست و غير ممكن است؟
تجزيه و تحليل دقيق در اين سطح يك گام مبهم در طراحي كلي ساختار يك برنامه مي باشد.
در سطح نشانه تصميمات درباره ساختارها صورت مي گيرد كه براي بيان و ايجاد دانش مورد استفادده قرار مي گيرند. انتخاب يك زبان براي بيان يك مورد مربوط به سطح نشانه مي باشد.
منطق يكي از چندين نوع اشكال است كه اصولا در حال حاضر براي بيان دانش و اطلاعات در دسترس مي باشد.
زبان بيان نه تنها مي بايستي توانايي بيان اطلاعات مورد لزوم براي كاربر را داشته باشد بلكه مي بايستي خلاصه و قابل توصيف و داراي كاربرد مؤثر باشد و مي بايستي به برنامه نويس براي دستيابي و سازماندهي اصل و اساس اطلاعات كمك كند.
وقتي كه بين سطح اطلاعات و سطح نشانه يك برنامه تمايز به وجود آمد ما مي توانيم بين سطح نشانه و الگوريتم و ساختمان داده ها مورد استفاده براي كاربرد آن نيز تمايز قايل شويم. به عنوان مثال بدون تاثيرگذاري رفتار و عملكرد يك تحليل گر برنامه كه اساس منطقي داشته باشد مي بايستي تاثير ناپذير از انتخاب بين يك سري جزئيات و يك مجموعه و دسته بايزي باشد تا بتواند يك جدول مربوط به نشانه ها را به كار برد.
اين تصميمات كاربردي هستند و مي بايستي در سطح نشانه قابل رؤيت باشند . بسياري از الگوريتم و ساختمان داده ها در كاربرد بيان زبان AI به كار مي روند كه از روشهاي معمول علم كامپيوتر مي باشند مثل شاخه ها و جداول بايزي.
ديگر موارد در رابطه با AI بسيار تخصصي هستند و به گونه يك كه مستعار بيان مي شوند كه از طريق متن و بخش هاي مربوط به LISP و PROLOG بيان مي شوند .
در سطح پائين تر مربوط به الگوريتم و ساختمان داده ها ( سطح زبان ) واقع شده است در اين جا ست كه زبان كاربردي براي برنامه مشخص مي شود .
با اين حال سبك برنامه نويسي مطلوب احتياج به اين دارد كه ما يك خلاصه داده اي بسازيم كه بين خصوصيات ويژه يك زبان برنامه نويسي و لايه هاي بالاي آن قرار گيرد . نيازهاي منحصر به فرد برنامه نويسي سطح نشانه اي تأثير به روي طراحي و استفاده از زبانهاي برنامه نويسي AI ايجاد مي كند . علاوه بر اين طراحي زبان مي بايستي در برگيرنده و مطابق با ساختار آن كه بر گرفته از سطوح پائين تر ساختمان كامپيوتر كه شامل زبان اسمبلي و سيستم عامل و دستور العملهاي ماشين و سطوح سخت افزار ي باشد .
و محدوديت هاي فيزيكي كامپيوتر مي بايستي بر روي منابعي همچون حافظه و سرعت پردازشگر تأ كيد كند . روش هاي PROLOG , LISP در جهت مستعاذل كردن نيازهاي سطح نشانه و نيازهاي نهفته در ساختار هر دو منبع مورد استفاده مي باشند و هم چنين يك هدف هوشمند و ذهني با اهميت مي باشند . در دنباله ما از ساختارهاي سطح اطلاعات در محيطهاي برنامه نويسي بر روي يك زبان كاربردي صحبت خواهيم كرد و سپس به مصرفي زبانهاي عمده AI يعني PROLOG , LISP مي پردازيم .
 

Keivan Keihanipour

عضو جدید
کاربر ممتاز
تكنيك‌ها و زبان‌هاي برنامه‌نويسي هوش‌مصنوعي/ قسمت دوم

تكنيك‌ها و زبان‌هاي برنامه‌نويسي هوش‌مصنوعي/ قسمت دوم

خصوصيات مطلوب يك زبان AI
يكي از خصوصيات و ويژگيهاي مهم خلاصه سازي سلسله مراتبي در ساختار برنامه غير حساس بودن سطوح بالاتر نهفته در كاربرد زبان مي باشد .
اين مشاهده در عمل سنجيده مي شود كه همراه با سيستم هاي موفق دانش مدار مي باشد كه در زبانهاي برنامه نويسي مختلفي مثل Pascal , C , Ctt , Java , PROLOG , LISP و حتي Fortran به كار مي رود .
برنامه هاي مختلفي اصولاً در PROLOG , LISP و سپس در C به كار گرفته مي شوند تا بتواند تاثيرپذيري و انتقال پذيري بهتر ايجاد كنند. در هر دوي اين موارد رفتار و عملكرد در سطح نشانه به طور قطع بي اثر مي باشد.
با اين حال محدوديتهاي خلاصه سازي در يك برنامه جامع بيان مي شود كه كامل نمي باشد . ساختار سطح بالاتر باعث ايجاد ساختارهاي قوي بر روي لايه هاي زيرين مي شود و نياز به اين دارد كه برنامه نويسي AI بر روي سطح نشانه اي قرار گيرد كه در سطح زبان تكرار مي شوند.
به عنوان مثال ساختارهاي اطلاعاتي مورد لزوم براي ادغام سمبوليك خود را مقيد به اشكال تكراري مثل فلش ها و ليست ها نمي كنند.
اهداف و پيش بيني هاي منطقي ابزارهاي كاربردي طبيعي تر و انعطاف پذيرتر خواهند بود.
علاوه بر اين به دليل مشكلات موجود در بسياري از مسائل مربوط به AI اغلب توسعه را قبل از اينكه يك شناخت كامل از نهايت فرم برنامه داشته باشيم شروع مي كنيم.
توسعه AI لزوما در طبيعت به صورت كشف و تجزيه و آزمايش است.
اين نياز هم چنين وابسته به يك زبان و ابزارهايي است كه بايد فراهم ساخت . يك زبان نه تنها مي بايستي متناسب با كاربرد ساختارهاي سطح بالا باشد بلكه مي بايستي يك ابزار مناسب براي انتقال كل چرخه نرم افزار از آناليز و تجزيه و تحليل تا حصول برنامه باشد.
در پنــج زير گـــروه بعدي ما به صورت جزئي و كامل در مورد نيازهايي كه ساختارهاي سطح نشانه اي برنامه هاي AI كه بر روي كاربرد زبان دارند بحث مي كنيم.
اين موارد عبارتند از :
1.پشتيباني از محاسبه سمبوليك

2.انعطاف پذيري كنترل
3.پشتيباني از متدولوژي و روش هاي برنامه نويسي جستجويي
4.پويايي
5.مستنند سازي خوب و واضح
`پشتيباني از محاسبات سمبوليك
گرچه روش هاي زيادي براي سازماندهي اطلاعات در يك سطح نشانه وجود دارد . ولي تمامي آنها نهايتاً به عنوان عملكردهايي بر روي نشانه ها به كار مي روند .
اين روش در تئوري نشانه هاي آقاي Simon , Newell آمده است . تئوري هاي سيستم فيزيكي نشانه نياز اصلي براي زبان برنامه نويسي است كه كاربردهاي يك سري از عمليات سمبوليك را آسان مي كند .
حتي شبكه هاي عصبي و ديگر شكل هاي ضروري محاسبه مي بايستي شامل اطلاعات سمبوليك در وروديها و خروجي هايشان باشند . انواع كاربردها و اطلاعات دادهاي عددي تاكيد شان بر روي زبانهاي برنامه نويسي معمول است كه براي كاربردهاي جستجوي الگوريتمي يا بيان زبان AI مناسب نمي باشند.
علاوه بر اين يك زبان AI مي بايستي ساختار ايجاد نشانه هاي اوليه را ساده سازد و بر روي آنها كار كند. اين يكي از مهمترين نيازهاي يك زبان برنامه نويسي AI مي باشد.
محاسبات و پيش بيني يكي از قوي ترين و عمومي ترين ابزارهاي ايجاد ساختار كيفي يك محدوده از مسئله مي باشد.
خصوصيات بارز يك محدوده ممكن است به گونه يك سري واقعيات منطقي بيان شود. از طريق استفاده از متغيرها امكان ايجاد واقعيات كلي درابره ارتباط بين اهداف در يك محدوده به وجود مي آيد.
PROLOG يك زبان برنامه نويسي كلي است كه بر اساس پيش بيني محاسباتي است.
به عنوان يك كاربرد رسمي منطق PROLOG بعضي اوقات مستقيما به عنوان يك زبان در سطح نشانه مورد استفاده قرار مي گيرد.
با اين حال قدرت واقعي آن به عنوان يك زبان براي كاربرد دقيق تر و كامل همانند چهارچوب ها و شبكه ها در يك روش سيستماتيك و فشرده مي باشد بسياري از ساختارهاي سطح نشانه اي به سادگي با استفاده از ساختارهاي سطح بالاي PROLOG ساخته مي شوند.
PROLOG ممكن است براي كاربرد در جستجوي الگوريتم ها يك سيستم محافظ و يك شبكه سمانتيكي مورد استفاده قرار گيرد.
يك ابزار مهم ديگر براي ساخت ساختارهاي نشانه ليست مي باشد يك ليست شامل يك سري عناصر مي شود كه در آن هر عنصر ممكن است حتي يك ليست و يك نشانه باشد.
چند نمونه از ليست ها با استفاده از ساختار برنامه نويسي LISP عبارتند از :
(اين يك ليست است)
(اين هست) (يك ليست) (از ليست ها)
(زمانها (بعلاوه 13)(بعلاوه 23) )
((123)(456)(789))
توجه داشته باشيم كه اينها نمونه هايي مي باشند كه شامل ليستهاي درون ليست هاي ديگر مي شود اين موجب مي شود كه ارتباطات ساختاري ايجاد گردد. قدرت ليست ها عمدتا در نتيجه توانايي بيان هر نوع ساختار نشانه اي بدون در نظر گرفتن پيچيدگي يا عملكردهايي كه مي بايد از آن پشتيباني كند مي باشد.
اين شامل شاخه ها گراف هاي اوليه يك سري مشخصه هاي منطقي جهت ها اصول اطلاعاتي كليدي مي شود. به طور خلاصه هر نوع ساختار ممكن است بر اساس يك تركيب مناسب متشكل از ليست ها و عملكردهاي واقع شده بر روي آنها حاصل شوند.
ليست ها يك سري بلوك هاي مهم مي باشند كه PROLOG , LASP كه موجب مي شود كه كاربر را با عناصر اطلاعاتي و عملياتي براي دستيابي و تاكيد بر آنها در درون يك سري ساختارهاي پيچيده مهيا سازد. در حاليكه PROLOG مستقيما به محاسبات پيش بيني شده وابسته است و شامل يك سري ليست به عنوان ابزارهاي بيان مي شود.
LISP ليست را به عنوان اصول انواع داده ها و برنامه ها مورد استفاده قرار مي دهد. تمامي ساختارهاي LISP از ليست ها ساخته مي شوند و زبان فراهم كردن يك سري ابزارهاي قوي براي تركيب اينها (ساختارها) را به عهده دارد و توصيف كننده عمليات جديد براي ايجاد توسعه و تغيير آنها است. يك شكل كردن ساختار LISP و توانائي توسعه آن توصيف هر نوع زباني را براي ساختار آن ساده مي سازد . بوسيله پرداختن به نظريه جمع آوري اطلاعات فشرده برنامه نويس LISP مي تواند ساختارهاي نشانه را توصيف كند و عمليات مورد نياز هر نوع شكل گيري سطح بالا شامل كنترل كننده هاي جستجو حل كننده هاي تئوريهاي منطقي و ديگر اظهارات سطح بالا مي باشد.

انعطاف پذير بودن كنترل:
يكي از مشخصه هاي اساسي رفتار هوشمند قابليت انعطاف پذيري آن مي باشد . در حقيقت مشكل بتوان تصور كرد كه هوشمندي مي تواند از طريق توسعه گام به گام مراحل ثابت كه بوسيله برنامه هاي معمول كامپيوتري نشان داده مي شود حاصل شود. خوشبختانه اين تنها راه سازماندهي محاسبات نمي باشد.
يكي از مهمترين و در عين حال قديمي ترين نمونه هاي مربوط به ساخت يك برنامه AI سيستم توليد مي باشد.
در سيستم توليدي برنامه شامل يك سري قوانين مي شود. در منطق اطلاعات اين قوانين به گونه اي تنظيم مي شود كه بوسيله الگوي اطلاعات در يك نوع مسئله داده شده قابل تشخيص باشد.
قوانين توليد مي تواند به هر گونه كه پاسخگوي آ“ موقعيت خاص باشد برنامه ريزي شود. بدين طريق يك سيستم تولسد مي تواند ايجاد كننده انعطاف پذيري و ارتباط لازم براي رفتار هوشمند باشد.
بنــــابراين AI از يك تعداد متفاوتي ساختارهاي كنترلي استفاده مي كند كه بسياري از انها مرتبط با سيستم هاي توليد مي باشند و همه آنها تابع الگو مي باشند . كنترل الگويي موجب مي شود كه اطلاعات با توجه به نياز به خصوصيات يك نوع مسئله خاص به كار گرفته شود. الگوي الگوريتم هاي انطباقي مثل به صورت واحد در آوردن باعث مي شود كه بتواند تشخيص دهد كه چه موقع خصوصيات يك مسئله منطبق با يك برنامه اطلاعاتي است كه بر اين اساس اطلاعات لازم براي كاربرد در مسئله را انتخاب مي كند.
بنابراين حائز اهميت مي باشد كه يك زبان AI بتواند آن را مستقيما ايجاد كند و يا توسعه الگوي كنترل را ساده سازد.
در PROLOG يكي كردن و جستجوي الگوريتم ها در درون خود زمان ساخته مي شوند و قلب و اساس PROLOG را تشكيل مي دهند .
با استفاده از اين يكي كردن الگوريتم ها به سادگي مي توان هر نوع الگوي ساختاري كنترلي را ايجاد كرد .
LISP مستقيماً الگوي انطبقي ايجاد نمي كند اما محاسبات سمبوليك آن موجب گسترش ساده مربوط به زبان ساده ساختار الگوي منطق شونده و توصيف كننده اوليه ساختار مي شود.
يكي از مزاياي اين نظريه اين است كه الگوي تطبيق و كنترل ساختارهاي همراه با آن ممكن است به سادگي براي تطبيق با نيازهاي يك مسئله بخصوص خود را منطبق سازد.
اغلــــب نظـــريات فعلي در ارتباط با هوش مصنوعي همانند شبكه هاي عصبي عوامل تنظيم كننده و ديگر فرم هاي محاسبات ضروري ممكن است اجتناب از عمليات بر روي ساختارهاي سمبوليك باشد.
ولي آنها نياز به يك كنترل انعطاف پذير را نفي نمي كنند. شبكه هاي عصبي مي بايستي توانايي حركتي شكل گيري خودشان را داشته باشند . عوامل متكي به پيام هستند كه از بين ماحوبهاي مختلف مي گذرد.
الگوريتم هاي ژنتيكي نياز به ايجاد واحد هاي شمارش به عنوان جمعيت كانديد شده حل مسئله دارند. توانايي زبان هاي AI براي ايجاد مشخصه تركيب ساده طبقه بندي اتوماتيك حافظه امكان اطلاع رساني ساده ايجاد متغيرها و روش هاي پويا و شكل هاي قوي ايجاد برنامه مثل يك برنامه شيء گرا موجب خواهد شد كه آنها را به سمت استفاده گسترده در كاربرد اين ابزارهاي جديدتر AI سوق دهد.

پشتيباني از روش هاي برنامه نويسي جستجويي.
مسائلي كه AI به آن مرتبط مي باشد هميشه پاسخگوي يك چنين نظريه هاي مهندسي نرم افزار استاندارد كه شامل طراحي كامل و پردازش موفقيت آميز و توسعه برنامه از خصوصيات و ويژگيهاي دقيق است نمي تواند باشد. به دليل طبيعت و ذات و نوع بخصوص AI به ندرت اين احتمال به وجود مي آيد كه بتوان ويژگيهاي درست و كاملي از شكل نهايي يك برنامه AI قبل از ساخت حداقل يك proto type بدست آورد. اغلب موارد شناخت مسئله برنامه مربوط مي شود به حل موارد درگير مسئله از طريق توسعه برنامه . دلايل آن عبارت است از :
1 بيشتر مسائل AI اصولا مشخصه هاي ضعيفي دارند.
به دليل اينكه پيچيدگي زيادي براي پشتيباني از سطح اطلاعات لازم مي باشد به ندرت احتمال مشاهده يك مسئله و تشخيص كامل بودن نظريه دقيق كه بايد در جايگاه خودش باشد وجود دارد.
بهترين ساختارهاي سطح نشانه اي كه در يك مسئله مورد استفاده قرار گيرند به ندرت در مشخصه هاي سطح دانش قرار مي گيرند. اين نوع پيچيدگي و نامفهومي خود را به روش هاي معمول مربوط به نرم افزارهاي مهندسي مرتبط نمي دانند چون كه در اين نوع برنامه ها لازمه اش اين است كه مشخصه هاي مربوط به توسعه به خصوص مسئله قبل از اينكه مرحله كدبندي آغاز شود شكل مي گيرد.
يك عملكرد منطقي خود ذاتا براي مشخصه ها و خصوصيات معمولش بسيار مشكل تر از عملكرد نوعي طبقه بندي ليست يا ايجاد يك فايل سيستم است . حقيقتا اين به چه معني است؟
به عنوان مثال براي طراحي يك مدار يا بهبود يك بيماري اين به چه معني است؟ چگونه يك انسان ماهر و متخصص اين عمليات ها را شكل مي دهد؟ سطح رضايت بخش ايجاد يك محدوده مسئله داده شده چه چيزي است؟ چه نوع دانش و اطلاعاتي لازم مي باشد؟ چه مشكلاتي ممكن است به دلايل نبود و يا غير واقعي بودن اطلاعات پيش بيايد؟ به دليل جوابهاي به اين قبيل سؤالات و ديگر سؤالات كه در يك دوره كلي مطرح مي شود و بسيار تخصصي مي باشند و هر وقت اين طور باشد ساختار آن نيز عميق تر و پيچيده تر مي شود به همين نسبت حل آن نيز به دقت بيشتري نياز دارد.
2 نظرياتي كه براي حل مسائل به آن پراخته مي شود در محدوده بخصوصي قرار مي گيرند.
گر چه چهار چوب هاي كلي براي حل مسائل AI وجود دارد به عنوان مثال سيستم توليد جستجو در زبان دامنه و محدوده هر مسئله نيازمند روش هاي خاص خود مي باشد.
بنابراين راه حل موفقيت آميز مسئله به ندرت به طور كامل براي محدوديتهاي جديد عموميت و كاربرد دارد هر كاربرد تا حدودي يك نوع مسئله جديد مي باشد .
3- ساختارها و اشكال بيان AIبه طور پيوسته بايد توسعه و تجديد شود
توسعه AI يك پروسه تحقيقي مداوم است . توسعه سيستم هاي AI كاربردي در بسياري از روشها بسط و توسعة اين پروسه ها مي باشند . گرچه تجربه عمدتاً به كاربرد زبان كمك مي كند ولي عموماً هيچ جايگزيني براي كاربرد يك ايده و اينكه چگونه عمل مي كند وجود ندارد .
به همين دليل AI اصولاً به صورت جستجوي است . برنامه اغلب به صورت ماشيني است كه از طريق آن ما مي توانيم دامن مسئله را كشف كنيم و روش هاي حل مسئله را كشف كنيم در حقيقت ابزاري است كه با آن به شناخت مسئله نائل مي شويم .
 

Keivan Keihanipour

عضو جدید
کاربر ممتاز
تكنيك‌ها و زبان‌هاي برنامه‌نويسي هوش‌مصنوعي/ قسمت سوم

تكنيك‌ها و زبان‌هاي برنامه‌نويسي هوش‌مصنوعي/ قسمت سوم

چالش در برنامه نويسي 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ها مي شوند.
5-قابليت خواندن برنامه و مستندسازي آن
به دليل اينكه اغلب برنامه هاي AI به طور گسترده اي از طريق خودشان توصيف مي شوند ولي اين نكته حائز اهميت است كه كد بتواند قابل خواندن و قابل مستندسازي باشد. در عين حاليكه هيچ نوع جايگزيني براي محتوي زبانهاي معمول در كد وجود ندارد، ولي با اين حال زبـــان هـــاي AI همـــراه بـا Moduleهاي با ساختار سطح بالا باعث ساده شدن اين عمل مي شوند.
6-مفسرها
بيشتر زبانهاي AI قبلاً ترجمه شده هستند نه اينكه در طول برنامه بخواهند ترجمه شوند. اين بدان معني است كه برنامه نويس لازم نيست به مدت طولاني هر زمان كه كد تغيير كرد برنامه را تعريف مجدد كند.
با توجه به مسائل عملكردي در ترجمه كد، زبانهاي AI مدرن به Module هاي ويژه اجازه تعريف مجدد براي يك موقعيت متوسط را مي دهند كه از اين طريق برنامه هاي سطح بالاتر بهتر تعريف مي شوند. علاوه بر اين بسياري از كاربردها به برنا مه ها اجازه تكميل شدن نهايي برنامه ها را مي دهند.
7-محيطهاي توسعه
زبانهاي جديد AI در برگيرنده محيطهاي برنامه ريزي مي شوند كه ابزارهاي ايجاد كلي و يا بخشـــي از برنامه را فراهم مي كنند.بسياري از كاربردهاي زباني شامل ويرايش هوشمند مي شــوند كه اشتباهات را به عنوان يك كد نوشتاري در نظر مي گيرد. به دليل پيچيدگي برنامه هاي AI و مشكل بودن پيش بيني عملكرد هر سيستم توليد، اهميت اين پشتيباني هاي سهل نمي تواند قابل تصور باشد.
Dynamic Binding and constraint propagation
زبانهاي معمول نياز به اين دارند كه بيشتر برنامه هاي مرتبط با آن در يك مدت زمان خاص تشخيص داده شوند.
شامل اتصال دادن متغيرها به محيط حافظه و انتقال روش هاي به نام هايشان مي باشد. با اين حال بسياري از روش هاي برنامه نويسي پيشرفته مثل، برنامه نويسي هاي شيء گرا نياز به اين اتصال ها براي تشخيص ديناميكي دارند.
برنامه هاي Prolog و LISP پشتيبان قيدگذاري ديناميكي هستند. از يك نقطه نظر AI يكي از مهمترين منافع قيدگذاري ديناميكي پشتيباني از برنامه نويسي ساختاري است. اغلب مسائل مربوط به يك برنامه AI نيـــاز به ايــــن دارد كه ارزش هاي مشخصه هاي خاص ناشناخته باقي مي ماند تا زماني كه اطلاعات لازم جمع آوري شوند.
اين اطلاعات ممكن است به گونه يك سري از ساختارها بر اساس ارزش ها باشد كه يك متــغير از آن انتظار دارد. هم چنانكه ساختارها جمع شوند يك سري از احتمالات كاهش مي يابد و در نهايت به يك راه حل منتهي مي شود كه تمامي ساختارها را تحت پوشش مطلوب قرار مي دهد.
يك نمونه ساده از اين نظريه ممكن است در يك سيستم تشخيص پزشكي ديده شود كه اطلاعات دربارة نوع بيماري مريض جمع آوري مي شود تا زماني كه اطلاعات مربوطه محدود به نوع خاصي از بيمار شوند زبان برنامه نويسي مقايسه اي اين روش از نوع متغير قيدگذاري اوليه يا توانايي حصول يك متغير نامركب مي باشد در حاليكه آن را در كد برنامه جمع مي كند.
LISP و PROLOG به متغيرها اجازة ترجمه وافزايش غيرمركب را مي دهند، در حاليكه توصـــيف ارتبـــاطات و وابستگي هاي بين اين متغيرها و ديگر واحدهاي برنامه را انجام مي دهد. اين موجب كاربرد آسان و طبيعي نوع قيد مي شود.

6. تعاريف مشخص و واضح
لازم است كه زبانهاي AI همراه با زبانهاي ديگر برنامه نويسي براي توسعه گسترده كامل و در عين حال منطقي سيستم، به كار گرفته شوند.
متأسفانه زبانهاي برنامه نويسي معمول مثل Fortran و پاسكال داراي تعاريف مشكل و پيچيده اي هستند اين موارد مي تواند ناشي از واقعيت خود زبان باشد كه اصولاً داراي خصوصيات ساختاري سطح بالايي در كامپيوتر دارند و در خودشان سيستم هاي فيزيكي و پيچيده اي دارند. به دليل اينكه زبانهاي AI داراي اساس و پايه رياضي هستند مثل PROLOG و LISP ،‌آنها مي بايستي معاني ساده تري باشند كه داراي قدرت و ظرافت نهفته در رياضي باشند.
اين موجب مي شود كه اين زبانها عمدتاً براي تحقيقات در محدودة به كارگيري دانش ابزارهاي زبان، ايجاد برن امه درست،‌و اتوماتيك كردن تأثير گذاري كد، مفيد واقع شوند.
همـــچنين بـــايد توجه داشت كه گر چه عملكرد بسياري از برنامه هاي AI كاملاً پيچيده مي باشد ولي كدي كه داراي اين عملكرد است بايد ساده و مشخص باشد.
بلوك هاي بزرگ مركب و پيچيده با كد مشخص داراي AI مناسب نمي باشند يك زبان خوب توصيف شده،‌يك ابزار مهم براي دريافت اين اهداف مي باشد.
 
آخرین ویرایش:

Keivan Keihanipour

عضو جدید
کاربر ممتاز
تكنيك‌ها و زبان‌هاي برنامه‌نويسي هوش‌مصنوعي/ قسمت چهارم

تكنيك‌ها و زبان‌هاي برنامه‌نويسي هوش‌مصنوعي/ قسمت چهارم

خلاصه اي دربارة LISP و PROLOG
به وسيله برآورده كردن نيازهاي گفته شده، LISP و PROLOG هر دو داراي زبانهاي برنامه نويسي غني و كاملي هستند وقتي كه اين زبانها را فرا مي گيريم، دانشجو در ذهن و فكر دربارة روشهايي كه آنها به وسيله ويژگيهاي خاص هر زبان پشتيباني مي كنند، نيازها را نگه داري مي كنند.
PROLOG

PROLOG يكي از بهترين نمونه و مثال يك زبان برنامه نويسي منطقي است. يك برنامه منطقي داراي يك سري ويژگيهاي قانون و منطق است . PROLOG از محاسبة اوليه استفاده مي كند. در حقيقت خود اين نام از برنامه نويسي PRO در LOGIC مي آيد يك مفسر برنامه را بر اساس يك منطق مي نويسد. ايده استفاده توصيفي محاسبه اوليه براي بيان خصوصيات حل مسئله يكي از محوريت هاي مشاركتPROLOG مي باشد كه براي علم كامپيوتر به طور كلي و به طور اخص براي زبان برنامه نويسي هوشمند مورد استفاده قرار مي گيرند. نفع اسفتاده از محاسبه اوليه براي برنامه نويسي شامل يك ساختار ظريف و ساده و قابل معني مي شود.
به دليل همين خصوصيات است كه PROLOG به عنوان يك محرك اصلي و مفيد براي تحقيقاتي مثل موارد برنامه نويسي آزمايشي به عنوان يك كد، متغير كردن برنامه و طراحي ويـــژگيهـاي زبان سطح بالا، مطرح است. PROLOG و ديگر زبانهاي منطقي يك سبك برنامه نويسي مشخصي را دنبال مي كنند كه در آنها برنامه ها به صورت دستورات پشت سرهم و متوالي براي ايجاد يك الگوريتم، نوشته مي شوند. اين نوع برنامه اصولاً به كامپيوتر مي گويد كه «چه چيزي درست است» و «چه چيزي بايد صورت گيرد» و اين به برنامه نويس اجازه مي دهد كه بر روي حل مسئله به صورت يك سري خصوصيات از يك محدوده تأكيد كند تا اينكه بخواهد به جزئيات نوشتاري سطح پائين ساختارهاي الگوريتمي براي بعد بپردازد.
اولين برنامه PROLOG در مارسي فرانسه در اوايل 1970 به عنوان بخشي از زبان معمول يك پروژه نوشته شد. تئوري نهفته در پشت اين زبان در كارهاي كوالسكي،‌هيز و ديگران آورده شده است. عمدة توسعة PROLOG بين سالهاي 1975 تا 1979 در بخش هوش مصنوعي دانشگاه ادينبورگ صورت گرفت.
در آنجا يك گروه مسئوليت كاربرد اولين PROLOG را به عهده داشتند كه آقاي David H.D مسئول آن بود. اين گروه اولين PROLOG را ساخت كه مي توانست محاسبات كلي را انجام دهد. اين محصول بر اساس سيستم DEC-10 ساخته شده بود و مي توانست در مدهاي توصيفي و مقايسه اي كارآئي داشته باشد.
مزيت اين زبان به وسيله پروژه هايي كه براي ارزيابي و گسترش قدرت بيان برنامه هاي منطقي نوشته شده اند،‌ اثبات شده است.
بحث دربارة يك چنين كاربردهايي مي تواند در سمينار و گردهمائي هاي مربوط به زبان برنامه نويسي هوش مصنوعي در سطح بين المللي مطرح شود.
LISP

LISP اولين بار به وسيله JACK MCCARTHY در اواخر دهه 1950 مطرح شد اين زبان به عنوان يك مدل پيوسته محاسباتي بر اساس تئوري عملكرد مجدد،‌معرفي شد.
در مقالات اولية مك كارتي (1960) اهداف خود را مشخص مي كند: ايجاد يك زبان سمبوليك تا يك زبان محاسباتي. ايجاد زباني كه بتوان از آ‌ن به عنوان يك مدل محاسباتي بر اساس تئوري عملكرد مجدد استفاده كرد و از آن بتوان براي تعريف دقيق يك ساختار و تعريف زباني استفاده كرد.
گر چه LISP يكي از قديمي ترين زبانهاي محاسباتي است كه هنوز فعال است، ولي دقت كافي در برنامه نويسي و طراحي توسعه باعث شده كه اين يك زبان برنامه نويسي فعال باقي بما ند.
در حقيقت اين مدل برنامه نويسي طوري مؤثر بوده است، كه تعدادي از ديگر زبانها بر اساس عملكرد برنامه نويسي آن واقع شده اند مثل FP ، ML و SCHEME .
اين ليست اساس برنامه ها و ساختارهاي اطلاعاتي در LISP است، LISP خلاصه شده نام پروسه LIS است. اين برنامه يك سري ليست هاي عملكردي درون ساختاري دارد.
LISP به برنامه نويس قدرت كامل براي اتصال به ساختارهاي اطلاعاتي را مي دهد.
اصولاً LISP يك زبان كامل است كه داراي عملكردها وليست هاي لازمه براي توصيف عملكردهاي جديد، تشخيص تناسب و ارزيابي معاني مي باشد.
تنها هدف كنترل برنامه بازگشت و شرايط منحصر به فرد است. عملكردهاي كامل تر هنگامي كه لا زم باشد در قالب اين اصول تعريف مي شوند. در طي زمان بهترين عملكردها به عنوان بخشي از زبان مي شوند. پروسه توسعة زبان به وسيلة اضافه كردن عملكردهاي جديد موجب توسعه محورهاي زيادي از LISP مي شوند كه اغلب شامل صدها عملكرد بخصوص براي ايجاد اطلاعات كنترل برنامه، خروجي و ورودي، Edit كردن عملكردهاي LISP مي شوند.
اين ارتباطات محركه اي هستند كه به وسيله LISP از يك مدل ساده و ظريف به يك مدل قوي و غني و عملكردي براي ساخت سيستم هاي نرم افزاري بزرگ، تبديل مي شود.
يكي ازمهم ترين برنامه هاي مرتبط با LISP برنامه SCHEME مي باشد كه يك تفكر دوباره دربارة زبان در آن وجود دارد كه به وسيله توسعه AI وبراي آموزش اصول مفاهيم علم كامپيوتر مورد استفاده قرار مي گيرند.

7.برنامه نويسي شيء گرا

برخلاف برنامه LISP و PROLOG ،‌برنامه شيء گرا ريشه در مهندسي نرم افزار دارد. اولين بار در سال 1970 توسعه يافته كه به وسيله Alan Kay اين تحقيقات صورت گرفته است.
ساخت ايده ها از محرك، كه زبان نروژي تظاهر مي كند در سال 1960 و مقاله Symour در استفاده از LOGO براي آموزش كودكان، صورت پذيرفته است.
استفاده از Dyna book براي اولين بار به عنوان يك كامپيوتر، كه افرادي به غير متخصصان علم كامپيوتر با آن سروكار داشتند.
بـــه دليل اينكه كاربر افراد معمولي بودند سيستم عملكرد و كاربرد نرم افزار نبايد تكنيكي مي بود و به سادگي قابل تشخيص بود. راه حل آنها براي اين مسئله يك مداخلة گرافيكي است با استفاده از منوها و آيكون هاي گرافيكي و اشاره گرها، يك موس يا يك سري برنامه ها براي اديت كردن، داده ها مي باشد.
دخالت كاربر در طراحي يك notebook متأثر از طراحي كاربرها براي يك سري كامپيوترهاي تخصصي مثل سيستم هاي به كارگيري كامپيوتر شخصي مثل مكينتاش، ماكروسافت و محل هاي مربوط به ويندوز مي باشد.
در يك برنامه small talk ،‌همه چيز در قالب هدف و يك ساختار قابل محاسبه مرك و قراردادي مطرح مي شود. اهداف نه فقط شامل انواع اطلاعات براي محاسبه بلكه شامل انواع روشهاي لازم براي محاسبه حالت و وضعيت هدف نيز مي شوند.
ارزشهاي يك هدف به صورت كلاس ها بيان مي شود. اهداف ممكن است اهداف طبقه بندي شده كه توصيف كنندة تمامي مواد يك نمونه باشد و بيانگر نوع ذات و توصيف تما مي موارد يا مواردي كه بيانگر يك عضو واحد هستند را شامل شود.
وقتي مواردي از يك نوع اطلاعات به وسيله اهداف توصيف مي شود اين موارد ذاتاً داراي نوع توصيف و روشهاي توصيفي از عملگرهايشان مي باشند،‌براي شكل دادن يك عمليات بر روي يك هدف، يك پيام به سمت هدف فرستاده شده كه حاصل روش مناسبي مي باشد. به عنوان مثال، اضافه كردن 3 و 4 پيام 4+ به سمت شيء 3 فرستاده مي شود و 3 پاسخ مي دهد مي شود 7 .
به وسيله ايجاد انواع تركيب اطلاعات و عمل بر روي آنها در يك عمل واحد مربوط به هدف، small talk از كد Modular (پيمانه اي) توسعه و نوع كاربرد براي عناصر اطلاعات و كد مربوط به تكثير آنها، پشتيباني مي كند.
به دليل اينكه اهداف small talk در قالب يك كلاس شبكه اي همراه با اهداف كاملاً ويژه كه بخشي از تمامي روش هــاي كاملاً كلي است ، بسيار ساده است كه يك ساختار جديد برنامه اي توصيف كنيم كه عملاً با اهداف موجود در برنامه همراه باشد. بنابراين يك برنامه اصولاً مي تواند قدرت كامل يك سيستم باشد كه شامل گرافيك،‌بازنگري و ارتباط است.
علاوه بر اين روش هاي توسعه نرم افزاري مثل ارائه اطلاعات و زبانهاي نهفته، فشار بر اپراتور و استفاده از كدها از طريق يك گروه اصلي و زبانهاي نهفته در قالب يك مدل رايج پشتيباني مي شوند.
زبانهاي شيء‌گرا همراه با بسياري از خصوصيات مندرج در يك كلاس اطلاعاتي، شامل كلاس اصلي و توانايي پاسخ در ساختار اطلاعات مي شود به همين دلايل زبانهاي شيءگرا در برنامه نويسي AI استفاده مي شوند.
محيطهاي هيبريد

نياز به برنامه نويسي اطلاعاتي موجب توسعة تعدادي برنامه نويسي و تكنيك هاي زبان، شامل سيستم هاي توليد،‌قوانين و كلاس شيء‌گرا مي شود.
يك سيستم هيبريد بيانگر نمونه هاي چند منظوره در قالب يك محيط برنامه نويسي خاص مــي باشد. گر چه محيطهاي هيبريد متفاوت مي باشد. ولي عموماً شامل خصوصيات ذيل مي شوند.
1-نمايش شيء گرا از محدوده اشياء
يك چنين سيستم هايي ذاتاً ويژگيهاي كلاس را پشتيباني مي كنند و اغلب شامل يك مكانيسم انتقال پيام براي عكس العمل هدف مي باشند.
2-قوانين نمايش اطلاعات neuristic
گر چه چهارچوب اهداف به معني توصيف طبقه بندي اهداف، مي باشند. قوانين به عنوان عمدة نظر توصيف مسائل اطلاعاتي مي باشند.
ساختار then …. if ….. مناسب شيوة تخصص انساني است كه بيانگر پروسة تصميم گير است. قوانين دريافت اطلاعاتي از اهداف را دارند كه با استفاده از يك زبان كه مستقيماً در چارچوب يك هدف مي خواند و مي نويسد و يا به وسيلة استفاده از پيام كه مستقيماً وارد هدف مي شود صورت مي پذيرد.
3-پشتيباني از انواع روش هاي جستجو
بيشتر سيستم هاي پشتيباني از جستجوي اوليه و انتهايي حمايت مي كنند عموماً بيان يك هدف در قالب جستجويي ،‌تغيير به سمت عقب مي باشد . علاوه بر اين يك واقعيت تازه دربارة حافظه كاركرد ممكن است ايجاد علت هاي اوليه از قوانين كند كه به وسيله اين واقعيت جديد پشتيباني مي شوند.
 

Keivan Keihanipour

عضو جدید
کاربر ممتاز
تكنيك‌ها و زبان‌هاي برنامه‌نويسي هوش‌مصنوعي/ قسمت پاياني

تكنيك‌ها و زبان‌هاي برنامه‌نويسي هوش‌مصنوعي/ قسمت پاياني

4-توصيف دامنة كاربرد عملكرد متقابل و تأثيرات جانبي
يك demon فـــرآيندي اســـت كه به وسيله عملكردهاي جانبي بعضي از اعمال مشخص مي شود. يك نمونه از استفاده demon كنترل در يك سيستم زماني است كه بيانگر دوره اي در مانيتور يك چاپگر و يا ديگر وسايل مي باشد.
demon به وسيله يك زمان مشخص مي شود. محيطهاي AI اين ايده را توسعه مي دهند و باعث ايجاد demon مي شوند كه هنگامي كه هدف توليد يا توصيف شود به كار مي آيند.
چنين demonهايي براي به زمان نگه داشتن يك نشانگر در پاسخ به تغيير مقدار مورد استفاده قرار مي گيرند. Demon هاي مهم و مطرح اصولاً داراي مقاديري متغير مي باشد كه هنگامي كه ارزش متغير تغيير كند demon خوانده شده و وقتي كه اين اتفاق افتاد demon ايجاد و خلق مي شود كه اين وقتي اتفاق مي افتد كه يك مقدار خلق شده باشد و ارزش ها در قالب گرافيكي فعال مي شوند كه اين فعاليت مي تواند متغير باشد.
5-تداخلگرهاي گرافيكي
اينها شامل يك طيفي از امكاناتي مي باشند كه اجازه تداوم و دنبال كردن موارد را مي دهند. به عنوان مثال نشانگرهاي گرافيكي مي توانند ساختار قوانين يك اصل اطلاعاتي را به صورت يك درخت توصيف دهند. يكي از مهمترين خصوصيات محيطهاي هيبريد،‌توانائي اتصال با استفاده از demon مي باشد كه به صورت يك نشانگر گرافيكي متصل به شيء و هدف مي باشد. كه اين موجب عملكرد گرافيكي براي بيان زمان واقعي نشانگر مي باشد كه در حقيقت بيشتر محيط ها داراي يك پشتيباني سطح بالاي از داده هاي گرافيكي مي باشند.
6-اجتناب از زبانهاي زيرين
روشهايي كه در قالب يك زمان خاص يا پاسخگو مي باشند به وسيله محيط و يا اغلب اوقات LISP و PROLOG يا حتي و يا پاسكال توصيف شده اند كه اين موجب توصيف طيفي فرآيند اطلاات و هم چنين يك برنامه اطلاعاتي كه طيف وسيعي از زبانهاي كه شكل دهنده هندسي، جهت ها و سنسورها و يا ديگر عملكردهايي كه به صورت بهتري در قالب روشهاي الگوريتمي به كار گرفته مي شود را شامل مي شود.
7-توانائي ترجمه اطلاعات جهت اجراي سريعتر يا تحويل روي يك ماشين كوچكتر
وقتي كه برنامه شيء گرا كامل شد. يك محيط كامل و توسعه يافته اغلب ، بلندي است كه به تدريج افول مي كند و پائين مي آيد بيشتر محيط هاي مدرن AI اجازه كاربرد سريعتر و ساده تر را كه اغلب كوچكتر و ارزانتر است را در يك ماشين ترجمه ايجاد مي كنند.
8. يك نمونه هيبريد

بسياري از نمونه هاي مطلوب اصولاً از طريق اشيا، ارتباطات و كنش و واكنش متقابل بين آنها واقع يم شود در شكل زير يك نمونه اتصال به وسيله باطري همراه با يك سوئيچ براي يك لامپ (شكل 364) در نظر گرفته شده است.
لامپ، باطري و سوئيچ ممكن است هر كدام به وسيله كلاسها بيان شوند كه بيانگر ويژگيهاي باطري، سوئيچ و لامپ باشد . مشخصه هاي الكترونيكي شكل 2 ممكن است به عنـــوان موارد بخصوصي از اين كلاس هاي كلي بيان مي شوند. توجه داشته باشيد كه نمونه ها داراي مقادير نمونه اي مربوط به كلاس خاص شيء مربوط به خود مي شوند به عنوان مثال اگر سوئيچ 1 در حالت خاموش قرار گيرد. قسمت كنترل كه مربوط مي شود به لامپ 1 تحت تأثير قرار خواهد گرفت كه اين موارد در شكل زير نشان داده شده اند.
يك قانون ممكن است در اينجا به وجود بيايد كه :
اگر نور وارد AND نشود، سوئيچ AND را بسته و باطري درست است بنابراين بايد به قسمتي كه ممكن است آسيب ديده باشد مراجعه كرد.
در نمايش هيبريد قوانين داراي ويژگيهايي هستند كه بيشتر بيانگر مقدار اهميت كلاسها و اشياء مي باشند.كه در شكل 3 به آن اشاره شده است. اين قانون ممكن است به عنوان بخشي از قانون اوليه سيستم در تلاش براي به جريان انداختن اين مدار باشد كه در جاي ديگر براي راه اندازي سوئيچ كنترل براي حالات متغير است.
9. انتخاب زبان كاربردي

همانگونه كه هوش مصنوعي به مرحله رشد مي رسد وقابليت هاي خود را در طيف وسيعي از مسائل كاربردي به اثبات مي رساند اعتماد به LISP و PROLOG نيز مدنظر مي باشد، ‌موارد مربوط به توسعة نرم افزاري، همانند نياز به تداخلگرها به صورت ساده وآ‌سان همراه با يك كد منطقي تا استفاده از AI در Moduleهاي كوچكتر و يا بزرگتر در برنامه ها و نياز به ايجاد توسعه استاندارد متأثر از مشتريان دولتي و يا گروهي موجب توسعة سيستم هاي AI در انواع زبانهاي مثل C ، , C++ Java و Smalltalk شده است.
كــه زبــانهاي LISP و PROLOG كار خود را در محدودة توسعه و Prototype سازي سيستم هاي AI در صنعت و دانشگاهها دنبال مي كنند.
يـــك اطـــلاعات و دانش كاربردي مربوط به اين زبانها به عنوان بخشي از مهارت هر برنامه نويس AI مي باشد. علاوه بر اين، اين زبانها به عنوان زمينه اي براي بسياري از اين خصوصيات مي باشند كه در ادامه همكاري با زبانهاي برنامه نويسي جديد مي باشند.
احتمالاً بهترين نمونه از اين زبانها Java ميباشد كه متناسب با استفاده اولويت ديناميكي اش، داراي مديريت حافظه اتوماتيك و ديگر خصوصياتي است كه در زبانهاي كه ترجمه شده وجود دارد به نظر مي رسد كه ديگر زبانهاي برنامه نويسي براي رسيدن به حد مطلوب از استانداردهاي اين زبانها استفاده مي كنند.
هم چنانكه اين تكامل صورت مي پذيرد و ادامه مي يابد دانش مربوط به LISP و PROLOG يا Small talk و روش هاي برنامه نويس قادرند تنها از نظر مقدار توسعه يابند.
بنابراين، از اينكه از يكي از اين زبانهاي AI استفاده كنيم يا خود را در برنامه نويسي با زبانهاي C++ و C و Java يا يكي از زبانهاي رقيب پيدا كنيم راضي و قانع خواهيم بود.
منابع و مآخذ
كتاب Artificial intelligence structures & strategies for complex problem solving
نوشته George F.Luger & william A. Stubble field
چاپ Wesley long man Inc, 2000
 

massom11111

عضو جدید
کاربر ممتاز
سلام مهندس
ممنون بنظر خیلی جالب میاد
البته من زیاد تو جریانش قرار نگرفتم
ولی جزء دروس سالهای بعدیمه حتما از مطالبتون استفاده خواهم کرد :)
مهندس درک کامل درس طراحی الگوریتمها برا درک هوش مصنوعی و ژنتیک الگوریتم چقدر لازمه ؟؟؟
 

ramin_samad

عضو جدید
عنوان: کتاب هوش مصنوعی (Artificial Intelligence)
نوع: برنامه نویسی
نوع فایل : PDF
رشته : کامپیوتر
زبان : فارسی
حجم2891(کیلوبایت) یا 2MB
تعداد صفحات:408

از ویژگی های این کتاب :
این کتاب یک کتاب خود آموز می باشد که خواننده بدون نیاز به استاد می تواند نیازهای خو را برطرف کرده
این کتاب در بعضی از دانشگاه ها تدریس می شود

لینک غیرمستقیم دانلود

منبع :WWW.IRANMEET.COM
 

ramin_samad

عضو جدید
عنوان: کتاب مرجع هوش مصنوعی
نوع: کامپیوتر / برنامه نویسی
نوع فایل : PDF
زبان : فارسی
حجم:14000(کیلوبایت)
تعداد صفحات:463

از ویژگی های این کتاب :
اولین EBOOK هوش مصنوعی است که به صورت الکترونیکی عرضه شده
جالب این است که بدانید این کتاب چاپ تابستان 1387 است و قبل از چاپ شدن به صورت الکترونیکی عرضه شده
این کتاب دارای 29 فصل است که تمامی مطالب هوش مصنوعی را در بر می گیرد

لینک غیرمستقیم Download

منبع :WWW.IRANMEET.COM
 

afa

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

promiseid

عضو جدید
برنامه نویسی ژنتیک
مسائل زيادي در هوش مصنوعي و يادگيري ماشين نياز به برنامه هاي کامپيوتري دارند که خروجي هاي دلخواه را با توجه به ورودي هاي خاص ايجاد نمايند. هنگامي که با اين ديد به مسئله نگاه مي شود اين مسائل با جستجوي فضاي ممکن برنامه هاي کامپيوتري جهت يافتن مناسبترين برنامه برابر ميشود. مبحث "برنامه نويسي ژنتيک" راهي جهت يافتن مـناسبترين برنامه مهيا مي کند. در اين روش جمعيتي از برنامه هاي کامپيوتري با استفاده از اصول داروين مبتني بر بقاي مناسبترين به توليد مثل مي پردازند.در اين مقاله فرايند حل مسائل به کمک اين روش با به تصوير کشيدن مثال هائي در زمينه هاي گوناگون ارائه شده است. مثال ها در زمينه يادگيري ماشين يک تابع ،دنباله هاي استقرائي،فرمهاي مفهومي و… آورده شده اند.
 

star_666

عضو جدید
آيا ايده اي براي تعيين اندازه جمعيت و طول كروموزوم در الگوريتم ژنتيك وجود دارد؟
 

Similar threads

بالا