X
تبلیغات
الگوریتم های هوش مصنوعی

الگوریتم های هوش مصنوعی

الگوریتم های هوش مصنوعی

ترجمه: پرهام ايزدپناه
ماهنامه شبکه - آذر ۱۳۸۵ شماره 71

اشاره :

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


‌‌ويژگي‌هاي يك شبكه‌عصبي‌
Robert Callan در كتاب <ماهيت شبكه‌‌هاي عصبي> مجموعه‌اي از ويژگي‌هاي يك شبكه عصبي را معرفي كرده است كه در ادامه بررسي مي‌شوند.

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

براي هدف ما با توجه به كدهاي ضميمه، در اينجا يك نورون مجموعه‌اي از گره‌ها در ساده‌ترين شكل خود است. يعني مجموعه‌اي شامل چهارگره: دو گره براي ورودي، يك گره bias و يك گره شبكه كه مثال در مورد بررسي نورون شامل يك گره Adaline است.


الگويي براي اتصال
اين همان راهي است كه شبكه ساخته شده و داده‌ها در آن جريان مي‌يابد. به عنوان مثال، يك شبكه از نوع (1) Adaline (سرنام Adaptive Linear Neuron) شامل دو گره ورودي، يك گره bias و يك گره Adaline است. گره Adaline  همان گرهي است كه فراخواني توابع اجرايي و يادگيري را برعهده دارد. هيچ محدوديت مشخصي براي تعداد گره‌هايي كه مي‌توانيد در هر نورون داشته باشيد و نيز در نحوه جاري شدن داده‌ها وجود ندارد. داده‌ در ابتدا در گره‌هاي ورودي قرار دارد، اما با بزرگ شدن شبكه مي‌تواند براي پردازش وارد گره‌هاي ديگر شود.


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

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

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


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

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

چگونگي يادگيري شبكه
چگونه يك شبكه چيزي را ياد مي‌گيرد؟ پاسخ ساده اين سؤال، آزمون و خطاست. اما اين كار به اين سادگي‌ها هم نيست. به عنوان نمونه، بخشي از خروجي يك شبكه عصبي فرضي ساده از نوع Adaline به شكل كد 1 است.

كد 1

همانطور كه در اين مثال مي‌بينيد، اين شبكه قبل از رسيدن به پاسخ صحيح، 190 بار تلاش كرده ‌است. اساسا برنامه Adaline دو مقدار را كه هركدام بين 1- و 1 هستند، مقايسه مي‌كند. اين مقادير به صورت تصادفي توليد و در يك فايل ذخيره مي‌شوند. كاري كه اين برنامه انجام مي‌دهد اين است كه اگر اولين عدد داده شده به آن كمتر از عدد دوم باشد، آن‌گاه خروجي آن 1 و در غير اينصورت 1- خواهد بود. به بيان فني، اين شبكه، ورودي‌ها و وزن‌هاي مربوط به هر يك از گره‌هاي شبكه (Nodes) را جمع مي‌كند.
 
سپس حاصل‌ جمع را از طريق تابع انتقال (Transfer Function) به عنوان خروجي گره، برمي‌گرداند. داده‌‌‌هايي نيز كه براي آموزش شبكه به آن داده مي‌شوند، پاسخ‌هاي صحيح براي مسئله توليد مي‌كنند و شبكه خودش را مي‌آزمايد تا ببيند آيا به جواب صحيح رسيده‌است يا خير.

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

كد 2

اين كد مرتبا روي پيوندهاي مربوط به يك گره تكرار مي‌شود، مقدار ورودي وزن‌دار را مي‌گيرد و حاصل جمع نهايي را به متغيري از نوع double به نام total اضافه مي‌‌كند. در اين مرحله، آنچه كه بايد بدانيد اين است كه مقدار nID با ثابت nodevalue كه در كلاس Values ذخيره شده برابر است و اين متغير، اولين مقدار در گره ورودي را (كه در اينجا با آرايه InputLinks و شاخصi ا رجاع داده شده است) مي‌گيرد.

 كد 3

بخش مهم مقدار ورودي وزن‌دار به شكل كد 3 است، كه به معني حاصلضرب مقدار گره در مقدار وزن پيوند است. مقدار وزن پيوند نيز در واقع اولين مقدار در پيوند است كه به صورت كد 4 در تابع Constructor كلاس Adaline Link مقداردهي اوليه شده است.

كد 4

همان‌طور كه مي‌بينيد، اين مقدار يك عدد تصادفي بين 1- و 1 است. اين بدين‌معناست كه اولين فعاليت شبكه براي رسيدن به پاسخ صحيح، چيزي بيش از يك حدس نيست. البته همان‌طور كه در چرخه بالا‌ مي‌بينيد، تابع اجرا چرخه دستورات را تكرار مي‌كند و از مقدار وزن براي محاسبات استفاده مي‌كند و مجموع حاصل را به dTotal اضافه مي‌كند. متغير dTotal سپس از تابع انتقال Transfer‌Function عبور مي‌كند كه اين تابع نيز شامل كدهاي ساده‌اي است. (كد5)

كد 5

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

تابع Learn از قواعد دلتا يا Widrow-Hoff استفاده مي‌كند كه از نظر برنامه‌نويسي به صورت كد 6 است. در اين قسمت از كد، ابتدا مقدار خطاي گره مساوي حاصلضرب مقدار گره در عدد 0.2- قرارداده مي‌شود.
 

كد 6



















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

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

پي‌نوشت:
1 - شبكه‌هاي نوع ADALINE شبكه‌هاي عصبي تك لا‌يه‌اي هستند كه در سال 1960 توسط پروفسور Bernard Widrow و يكي از دانشجويانش به نام Ted Hoff توسعه داده شدند. اين شبكه‌هاي تك لا‌يه شامل چند گره هستند كه هر گره مي‌تواند چند ورودي را پذيرفته و يك خروجي توليد كند. به عنوان مثال يك شبكه Adaline با دو ورودي به شكل زير است:


ماتريس وزن W در اين مثال داراي يك سطر است. به اين ترتيب خروجي شبكه به صورت زير است:
يا:

     
+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 13:13  توسط موسی رجبی  | 

گردآوري و ترجمه: علي حسيني‌
ماهنامه شبکه - آذر ۱۳۸۵ شماره 71

اشاره :

<استدلال> در ميان اهل فن و صاحبان انديشه تعاريف و تفاسير متنوعي دارد. در نگاهي كلي، استفاده از دليل و برهان براي رسيدن به يك نتيجه از فرضياتي منطقي با استفاده از روش‌هاي معين، تعريفي از استدلال تلقي مي‌شود؛ تعريفي كه البته با ديدگاه‌هاي فلسفي و گاه ايده‌آل‌گرايانه از استدلال تفاوت دارد. با اين حال موضوع مهم و اساسي در اينجا بحث در چيستي و چرايي اين ديدگاه‌ها نيست، بلكه در مورد نحوه طراحي سيستم‌هاي با قدرت استدلال، با هر تعريفي، براي رسيدن به مجموعه‌اي از تصميمات منطقي‌ ‌ با استفاده از مفروضات يا به طور دقيق‌تر دانشي است كه در اختيار آن‌ها قرار مي‌گيرد. سيستم‌هايي خبره (expert systems) اساسا براي چنين هدفي طراحي مي‌شوند. در حقيقت به واسطه الگوبرداري اين سيستم‌ها از نظام منطق و استدلال انسان و نيز يكسان بودن منابع دانش مورد استفاده آن‌ها، حاصل كار يك سيستم خبره مي‌تواند تصميماتي باشد كه درحوزه‌ها و عرصه‌هاي مختلف قابل استفاده، مورد اطمينان و تاثيرگذار هستند. بسياري بر اين باورند كه سيستم‌هاي خبره بيشترين پيشرفت را در هوش مصنوعي به وجود آورده‌اند. آن‌چه درادامه مي‌خوانيد نگاهي كوتاه به تعاريف و سازوكار سيستم‌هاي خبره و گذري بر مزايا و محدوديت‌هاي به كارگيري اين سيستم‌ها در علوم و فنون مختلف است. طبيعتاً مباحث كاربردي‌تر و عملي‌تر درباره سيستم‌هاي خبره و بحث درباره نحوه توسعه و پياده‌سازي آن‌ها، نيازمند مقالات جداگانه‌اي است كه در آينده به آن‌ها خواهيم پرداخت.


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

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

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

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

به روند ساخت يك سيستم خبره، knowledge engineering يا مهندسي دانش گفته مي‌شود. يك مهندس دانش بايد اطمينان حاصل كند كه سيستم خبره طراحي شده، تمام دانش مورد نياز براي حل يك مسئله را دارد. طبيعتاً در غيراين‌صورت، تصميم‌هاي سيستم خبره قابل اطمينان نخواهند بود.

ساختار يك سيستم خبره‌
هر سيستم خبره از دو بخش مجزا ساخته شده است: پايگاه دانش و موتور تصميم‌گيري.
پايگاه دانش يك سيستم خبره از هر دو نوع دانش مبتني بر حقايق ‌(factual) و نيز دانش غيرقطعي (heuristic)  استفاده مي‌كند. Factual knowledge، دانش حقيقي يا قطعي نوعي از دانش است كه مي‌توان آن را در حيطه‌هاي مختلف به اشتراك گذاشت و تعميم داد؛ چراكه درستي آن قطعي است.

در سوي ديگر، Heuristic knowledge قرار دارد كه غيرقطعي‌تر و بيشتر مبتني بر برداشت‌هاي شخصي است. هرچه حدس‌ها يا دانش هيورستيك يك سيستم خبره بهتر باشد، سطح خبرگي آن بيشتر خواهد بود و در شرايط ويژه، تصميمات بهتري اتخاذ خواهد كرد.

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

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

شكل 1

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

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

دفتر ماهنامه شبكه در تهران قرار دارد.

تهران در ايران قرار دارد.

سيستم خبره مي‌تواند به قانون زير برسد:

‌ دفتر ماهنامه شبكه در ايران قرار دارد.

استفاده از  منطق فازي
موضوع مهم ديگر در ارتباط با سيستم‌هاي خبره، پيوند و ارتباط آن با ديگر شاخه‌هاي هوش مصنوعي است. به بيان روشن‌تر، برخي از سيستم‌هاي خبره از Fuzzy Logic يا منطق فازي استفاده مي‌كنند. در منطق غيرفازي تنها دو ارزش درست (true) يا نادرست (false) وجود دارد. چنين منطقي نمي‌تواند چندان كامل باشد؛ چراكه فهم و پروسه تصميم‌گيري انسان‌ها در بسياري از موارد، كاملا قطعي نيست و بسته به زمان و مكان آن، تا حدودي درست يا تا حدودي نادرست است. در خلال سال‌هاي 1920 و 1930، Jan Lukasiewicz فيلسوف لهستاني منطقي را مطرح كرد كه در آن ارزش يك قانون مي‌تواند بيشتر از دو مقدار 0 و 1 يا درست و نادرست باشد. سپس پروفسور لطفي‌زاده نشان داد كه منطق Lukasiewicz را مي‌توان به صورت "درجه درستي" مطرح كرد. يعني به جاي اين‌كه بگوييم: "اين منطق درست است يا نادرست؟" بگوييم: "اين منطق چقدر درست يا چقدر نادرست است؟"

از منطق فازي در مواردي استفاده مي‌شود كه با مفاهيم مبهمي چون "سنگيني"، "سرما"، "ارتفاع" و از اين قبيل مواجه شويم. اين پرسش را در نظر بگيريد : "وزن يك شيء 500 كيلوگرم است، آيا اين شيء سنگين است؟" چنين سوالي يك سوال مبهم محسوب مي‌شود؛ چراكه اين سوال مطرح مي‌شود كه "از چه نظر سنگين؟" اگر براي حمل توسط يك انسان بگوييم، بله سنگين است. اگر براي حمل توسط يك اتومبيل مطرح شود، كمي سنگين است، ولي اگر براي حمل توسط يك هواپيما مطرح شود سنگين نيست.

در اينجاست كه با استفاده از منطق فازي مي‌توان يك درجه درستي براي چنين پرسشي در نظر گرفت و بسته به شرايط گفت كه اين شيء كمي سنگين است. يعني در چنين مواردي گفتن اين‌كه اين شيء سنگين نيست
(false) يا سنگين است (true) پاسخ دقيقي نيست.

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

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

از سوي ديگر، به‌كارگيري سيستم‌هاي خبره محدوديت‌هاي خاصي دارد. به عنوان نمونه، اين سيستم‌ها نسبت به آنچه انجام مي‌دهند، هيچ <حسي> ندارند.  چنين سيستم‌هايي نمي‌توانند خبرگي خود را به گستره‌هاي وسيع‌تري تعميم دهند؛ چراكه تنها براي يك منظور خاص طراحي شده‌اند و پايگاه دانش آن‌ها از دانش متخصصان آن حوزه نشات گرفته و از اين‌رو محدود است.

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

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

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

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

چند سيستم خبره مشهور
از نخستين سيستم‌هاي خبره مي‌توان به Dendral اشاره كرد كه در سال 1965 توسط Edward Feigenbaum وJoshun Lederberg پژوهشگران هوش مصنوعي در دانشگاه استنفورد ساخته شد.

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

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

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

سيستم خبره ديگر در اين زمينه Centaur بود كه كار آن بررسي آزمايش‌هاي تنفسي و تشخيص بيماري‌هاي ريوي بود.

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

Marshall Space Flight Center) MSFC) يكي از مراكز وابسته به سازمان فضايي ناسا از سال 1994 در زمينه توسعه نرم‌افزارهاي هوشمند كار مي‌كند كه هدف آن تخمين كمّ و كيف تجهيزات و لوازم مورد نياز براي حمل به فضا است.

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

مركز فضايي MSFC، توسط فناوري ويژه خود موسوم به 2G به ايجاد برنامه‌هاي ويژه كنترل هوشمندانه و سيستم‌هاي مانيتورينگ خطاياب مي‌پردازد. اين فناوري را مي‌توان هم در سيستم‌هاي لينوكسي و هم در سيستم‌هاي سرور مبتني بر ويندوز مورد استفاده قرار داد.

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

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

+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 13:12  توسط موسی رجبی  | 

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

گردآوري، تاليف و ترجمه: اميرپاشا آزادي‌پو
ماهنامه شبکه - آذر ۱۳۸۵ شماره 71

اشاره :

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


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

اين سؤال كه <حريف كامپيوتري شما چه قدر مي‌فهمد؟> امروزه قبل از انجام هر بازي به فكر بازي‌كننده‌ها ميآيد؛ زيرا قرار است قسمتي از وقت و زندگي او معطوف اين بازي شود و اگر حريفش قدرتمند نباشد، عملاً اين وقت هدر رفته ‌است. درست ‌مانند اين است كه يك قهرمان شطرنج با كسي كه اولين بار است اين بازي را انجام مي‌دهد روبه‌رو شود. پس در كنار داشتن گرافيك، صدا و محيط بازي خوب، داشتن هوش‌مصنوعي مناسب نيز براي يك بازي كامپيوتري از محاسن آن بازي به‌حساب مي‌آيد.

در اين مقاله سعي شده ‌است مفاهيم و كاربرد‌هاي ابتدايي هوش‌مصنوعي در بازي‌هاي كامپيوتري شرح داده‌ شود. گفتني‌ است براي تهيه اين مقاله از مطالب سايت‌هاي codeproject و gameai نيز استفاده‌شده است.

عناصر هوش‌مصنوعي به كاررفته در بازي‌هاي كامپيوتري براي رسيدن به جايگاهي كه در حال حاضر در آن قرار دارند، راه زيادي را طي كرده‌اند. در ابتدا، سيستم‌هاي پيشرفته برپايه مجموعه‌اي از قوانين عمل مي‌كردند كه مستقيماً در كدهاي بازي نوشته‌شده بودند يا به‌ صورت متن‌هايي رفتاري كه توسط كدهايي خاص ترجمه مي‌شدند. تمام اين اعمال به‌صورت مشترك برمبناي انتخاب متناسبي از فاكتور‌هاي تصادفي، صورت مي‌گرفت. اين زمان درست همزمان با تولد بازي‌هايي به‌يادماندني و بي‌نظير مانند River Raid ،Donkey Kong ،Boulder-Dash و بسياري از بازي‌هاي جذاب براي كاربران ماشين‌هاي هشت‌بيتي در دهه 1970 بود.

قدم ديگر در پروسه توسعه هوش‌مصنوعي، معرفي روش‌هاي ساده علوم كامپيوتري بود كه از ميان اين روش‌ها مي‌توان به روش Finite State Machine اشاره كرد كه هنوز محبوب است و به ‌صورت محدود كماكان مورد استفاده قرار مي‌گيرد. اساس اين روش، برپايه توصيفِ رفتاريِ دشمناني بود كه در بازي‌ها توسط كامپيوتر و عليه بازي‌كننده كنترل مي‌شدند. با توجه به نياز روزافزون بازي‌كننده‌ها، روند رشد بازي‌ها نيز پيچيده‌تر مي‌شد، و اين به لطف استفاده بيشتر از الگوريتم‌هاي پيشرفته كامپيوتري است. ظهور قلمرو بازي‌هاي ‌RTS (استراتژي‌هاي بي‌درنگ) موجب استفاده گسترده از الگوريتم‌هايي شد كه بهترين مسير را بين دو نقطه از نقشه اين نوع بازي‌ها تعيين مي‌كردند.

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

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

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

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

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

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

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

بازي‌هاي تأثيرگذار در هوش‌مصنوعي
هنگامي كه در مورد انقلاب هوش‌مصنوعي صحبت مي‌شود، بايد به بازي‌هاي مهمي كه در تاريخچه اين انقلاب سهم بسزايي داشته‌اند نيز اشاره شود.

يكي از مهم‌ترين اين بازي‌ها كه هوش‌مصنوعي را در دهه 1990 ميلادي دگرگون ساخت، بي‌شك سري بازي‌هايWarCraft بود كه توسط شركت Blizzard ساخته شد. اين بازي اولين بازي‌اي بود كه الگوريتم‌هاي مسيريابي ‌را در هوش‌مصنوعي به كار مي‌برد. يكي از اين الگوها مقياس‌هاي عالي‌اي بود كه براي صدها واحد مشغول در صحنه‌هاي عظيم جنگي اين بازي طراحي شده‌بود. بازيِ SimCity كه توسط Maxis ساخته شد، اولين بازي‌اي بود كه ثابت كرد كه مي‌شود در يك بازيِ كامپيوتري از فناوري‌هاي حيات مصنوعي استفاده كرد.

يكي ديگر از پيشرفت‌هاي هوش‌مصنوعي در بازي‌هاي كامپيوتري با بازي Black and White به وجود آمد كه توسطLionhead Studios در سال 2001 ساخته شد و در آن براي اولين بار، فناوريِ يادگيريِ شخصيت‌‌هاي هدايت شونده توسط كامپيوتر مورد استفاده قرار مي‌گرفت.

شكل 1

هوش‌مصنوعي در بازي‌هاي تيراندازيِ اول شخص

بازي‌هاي تيراندازيِ اول شخص يا First Person Shooters معمولاً از سيستم هوش‌مصنوعي با ساختار لايه‌لايه استفاده مي‌كنند. لايه‌هايي كه در قسمت زيرين قرار دارند، وظايف ابتدايي را به ‌عهده دارند.

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

سيستم مسيريابي معمولاً برپايه نمايش‌هاي هندسي‌اي است كه دنياي بازي را شرح مي‌دهد. هر راس اين نمودار‌ها نمايانگر محلي منطقي از بازي (مانند اتاقي از يك ساختمان يا قطعه‌اي از ميدان جنگ) محسوب مي‌شود. وقتي به شخصيتي دستور داده مي‌شود كه به نقطه‌اي از نقشه بازي برود، عوامل هوش‌مصنوعي با استفاده از نمودار‌ها، نقاط ثانويه هدايتي ‌‌(Subsequent Navigation Points) را به‌ دست مي‌آورند و با هدايت پي‌درپي اين شخصيت به طرف اين نقاط، نهايتاً  آن را به نقطه هدف مشخص مي‌رسانند. در حين عبور از اين نقاط هدايتي، هوش‌مصنوعي همچنان وظيفه دارد از مسير‌هاي منطقي براي رسيدن به نقطه بعدي استفاده كند و كاراكتر را از موانع متحرك يا ثابتي كه در مسير بين دو نقطه در سر راهش ظاهر مي شوند نيز عبور دهد. در شكل 1، نمايش مسيريابي را در بازي‌هاي RTS در تصويري ساده مي‌بينيد.

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

بازي‌هايي از اين دست اغلب از سيستم كينماتيك معكوس ‌(Inverted Kinematics System) استفاده مي‌كنند. يك سيستم انيميشنيِ IK مي‌تواند به طور مناسب پارامتر‌هاي موقعيت‌يابي محوري يك انيميشن را محاسبه كند. درنتيجه  با وجود اين سيستم، دست يك شخصيت مي‌تواند جسمي را كه در درون آن است نگه‌دارد يا ميز، قفسه، شيئي‌ را در بر مي‌گيرد كه روي آن‌ها قرار دارد. وظايف لايه‌هاي بالايي به كاررفته در هوش‌مصنوعي، استفاده مناسب از نوع رفتاري ا‌ست كه براي هر موقعيت توسط كامپيوتر استفاده مي‌شود. به‌طور مثال، در همان بازيِ جنگي اين لايه‌ها، انتخاب مي‌كنند كه سرباز‌ي از سرباز‌هاي دشمن در يك جا نگهباني كند، وارد نبرد شود، فرار كند يا به نقطه‌اي ديگر از نقشه برود تا دشمنش را پيدا كند.

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

هوش‌مصنوعي در بازي‌هاي استراتژيِ بي‌درنگ
در بازي‌هاي استراتژيِ بي‌درنگ ‌(Real Time Strategy) امكان تشخيص مدل‌ها و لايه‌هاي متعددِ هوش‌مصنوعي وجود دارد. يكي از اساسي‌ترين اين مدل‌ها يك سيستم مؤثرِ راهيابي براي كاراكتر‌ است كه بعضي وقت‌ها، در كسري از زمان، اين سيستم ‌بايد جوابگوي مشكل حركت صدها كاراكتر روي نقشه اين‌گونه بازي‌ها باشد. بايد توجه داشت كه مسير‌يابي اين سيستم چيزي فراتر از مسيريابي ساده‌اي است كه تنها كاراكتري را از نقطه A به Bمي‌رساند؛ زيرا در ازدحامِ نقشه، مهم‌ترين نكته در حركت، تشخيص مواجهاتِ اين واحد‌هاي كوچك در حين عبور بين دو نقطه با هم و متعاقب آن اداره آن‌ها است به نحوي كه به هم برخورد نداشته باشند.
 
اين الگوريتم‌ها معمولاً بر پايه نقشه بازي استوار است كه اين مسئله خود توسط عناصري گرافيكيِ رشته‌مانند و چهارگوش معرفي مي‌شوند. اين رشته‌هاي مستطيل‌شكل توسط تور‌هايي شبكه‌اي، عوامل تصحيح شده از لحاظ اندازه را در محيط تعيين و معرفي مي‌كنند. در سطوح بالاتر سلسله ‌مراتب هوش‌مصنوعي اين بازي‌ها، ماژول‌هايي طراحي شده است كه وظيفه آن‌ها تعيين مسائل اقتصاديِ بازي، توسعه و از همه مهم‌تر، مدلي براي آناليز نقشه بازي، است. اين همان ماجولي است كه نوع زمين هر ناحيه از نقشه و عناصري كه روي آن ساخته مي‌شوند را آناليز مي‌كند. به‌طور مثال، در محلي از نقشه كه دريا قرار دارد، اين ماجول اجازه مي‌دهد ناوگان دريايي ساخته شود. اين ماجول زمان انجام ساختن يك شهر يا ديوار‌هاي حفاظتي و باروها را نيز تعيين مي‌كند.

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

شكل 2

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

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

شكل 3

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

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

با توضيحاتي كه داده شد، تجاربي كه از بازي‌هاي ماشين‌سواري تا به حال كسب كرده‌ايد، كمي ملموس‌تر مي‌شود.
 
به طور مثال، در بازي‌اي مانند Need For Speed كمتر پيش مي‌آيد كه مسافت زيادي از بهترين حريف خود جلوتر باشيد.

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

دو خصيصه مهم ديگر هوش‌مصنوعي در اين نوع بازي‌ها عبارتند از:

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

هماهنگيِ محكمي كه نوع رانندگي كامپيوتر را با مدل فيزيكي طراحي شده بازي تنظيم مي‌كند.

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

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

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

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

محبوب‌ترين الگوريتم‌هاي هوش‌مصنوعي به كار رفته در بازي‌هاي كامپيوتري
در ادامه اين مقاله دو نمونه از محبوب‌ترين الگوريتم‌هاي هوش‌مصنوعي معرفي مي‌شود كه به وفور از آن‌ها در طراحي هوش‌مصنوعي بازي‌هاي كامپيوتري استفاده مي‌شود. با دانستن مطالبي در مورد اين الگوريتم‌ها، شايد شما هم ترغيب شويد با طراحي يكي از آن‌ها، يك بازيِ FPS و RTS ساده بسازيد. اولين الگوريتم‌ از اين دست،
*A نام دارد كه سلسله جست‌وجوهاي سريعي را براي پيدا كردن بهترين مسير بين دو نقطه انجام مي‌دهد. الگوي ديگر ماشين با حالات محدود ‌(Finite State Machine) نام دارد كه بسيار مورد استفاده قرار مي‌گيرد و وظيفه‌اش آماده‌كردن سناريو‌هاي رفتاري براي حريفاني‌ است كه توسط كامپيوتر در بازي كنترل مي‌شوند. در مرحله بعدي اين رفتارها توسط ماژول‌هاي سطوح پايين، مانند ماجول رهيابي، پردازش مي‌شوند.

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

اساس اين الگوريتم برپايه <جست‌وجوي گرافيكي بين‌گرهي> استوار است. اين سيستم از يك ارزيابي غيرمستدل(Heuristic Estimate) بهره گيري مي‌كند. اين الگوريتم اولين بار در سال 1968 همزمان توسط سه رياضيدان به نام‌هاي Peter Hart ،Nils Nilsson و Bertram Raphael شرح داده شد.

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

در بازي‌هاي FPS رئوس عناصر گرافيكي معمولاً محل‌ها يا اتاق‌ها هستند و توسط اين رئوس است كه اين محل‌ها/ اتاق‌ها با هم ارتباط پيدا مي‌كنند.

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

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

شكل 4

با آزمايش روشي كه اين الگوريتم كار مي‌كند، متوجه خواهيم شد كه گرچه اين روش داراي برتري  سادگي است، مشكل جدي‌اي هم دارد. مسيري كه اين الگوريتم در مثال ذكر‌شده پيدا كرده‌است تنها از پنج خانه نقشه بازي تشكيل شده‌ و اين سيستم براي اين كار 81 خانه را مورد آزمايش قرار داده ‌است.
 
حال فرض كنيد كه در نقشه‌اي كه متشكل از 256 خانه عرضي و طولي است، ‌بايد 65536 خانه مورد آزمايش قرار گيرد تا مسير مشخص گردد! در شكل 4 مي‌بينيد كه دايره شاخص شماره 4 توسط يك الگوريتم مسير‌يابي ساده به هدف مورد نظر رسيده‌است.

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

از ديگر استفاده‌هاي اين الگوريتم، مي‌توان به تغيير محدوديت زاويه‌هاي دوربين و نمايش تعداد بيشتري از واحد‌ها در يك زمان، اشاره كرد. همچنين اين الگوريتم  شرايطي را فراهم مي‌كند كه واحد‌ها نتوانند از نقاط غيرقابل عبور نقشه عبور كنند. البته نبايد فراموش كرد كه بهترين استفاده از اين الگوريتم همان راهيابي بين دو نقطه است. در زير شبه‌كد‌ها يا Psudocodeهاي الگوريتم *A را مشاهده مي‌كنيد:

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

‌ بهينه سازي خودِ عمليات جست‌وجوي الگوريتم‌

‌ بهينه سازي ساختار اطلاعاتي‌

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

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

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

شكل 5

الگوريتم ماشين با حالات محدود

الگوريتم‌هاي ماشين با حالات محدود ‌(Finite State Machines) مدل‌هاي رفتاري‌اي هستند كه از موقعيت ‌‌(State)، انتقال اين موقعيت ‌‌(Transition) و ايجاد يك عمل ‌(Action) تشكيل مي‌شود. در يك موقعيت، اطلاعاتي قبلي ذخيره مي‌شود.

به طور مثال، اطلاعات ورودي از شروع سيستم تا زمان حال در اين بخش قرار مي‌گيرد. در مرحله انتقال، اين موقعيت تغيير مي‌كند و بسته به شرايط، انتقال مي‌يابد و در مرحله آخر اين موقعيتِ منتقل‌شده كه خود نماينده يك حالت بوده ‌است، يك عمل متناسب با آن موقعيت را ايجاد مي‌كند. در شكل 5، نمودار حالتي اين الگوريتم را در باز و بسته كردن يك در مشاهده مي‌كنيد.

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

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

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

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

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

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

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

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

در كنترل اتومبيل به اين شيوه،‌ كامپيوتر مي‌داند كه مي‌تواند از روي موانع كوچك‌تر عبور كند؛ بدون آن‌كه مشكلي در هدايت داشته باشد يا مي‌داند كه در حالات برفي و باراني كه جاده  لغزنده است، بايد زودتر از حالت طبيعي تصميم به پيچيدن داشته باشد. اين بازي از مدلي چند لايه به نام Perceptron Model  استفاده مي‌كند. در علم پزشكي اين مدل عصبي-هدايتي كه نورون ‌McCulloch-Pitts هم ناميده مي‌شود، عبارت است شبكه‌اي از نورون‌ها كه ارتباطات سنگين و مهمي بين ورودي عده‌اي از نورون‌هاي با خروجي عده ديگر از نورون‌ها، برقرار مي‌كنند.
 
در واقع اين ارتباطات مانند سيناپس‌هاي پيشرفته‌اي هستند كه بر اساس تجربيات بسيار كوچك، تصميم‌هاي مؤثر و مهمي را اتخاذ مي‌كنند. تصميماتي مانند يادگيري‌هاي پيشرفته. با توضيحي كه در مورد شبكه عصبي مصنوعي در بازيِ فوق داده شد، مي‌بينيم كه شباهت‌هاي بسياري بين اين سيستم و سيستم به كاررفته در بازي‌ ديده مي‌شود.  در شكل 6 يك نمونه ساده مدل Perceptron را مي‌بينيم.

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

‌ مشكلاتي در انتخاب اطلاعات ورودي مناسب براي اين شبكه‌

‌‌ عدم حساسيت اين شبكه به تغييرات منطقي كنش‌هاي بازي و دوباره سازيِ هر شبكه با تغيير هر حالت در بازي.

ساختار مشكل و پيچيده آن و مشكلاتي كه در Debug كردن هر موقعيت به وجود مي‌آورد.

زمان زيادي كه براي طراحيِ چنين شبكه‌اي احتياج است.

حال براي مقابله با مشكلات فوق، چه كاري بايد انجام داد تا بتوان در بازي‌هاي كامپيوتري امروزي، با اين سيستم حداكثر بهره را برد؟

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

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

پارامتر‌هاي پيچيده بايد طوري انتخاب شوند كه امكان ساده‌تر شدن توسط اين سيستم را در مدت زمان كمي داشته باشند. يك قانون كلي در اين بحث مي‌گويد: <اطلاعات ورودي بايد تا جايي كه امكان دارد بيشترين اطلاعات را در مورد دنياي بازي بدهد> اين قانون در مثال بازيِ هواپيمايي اينگونه است كه اطلاعات ورودي هر زمان براي يك حريف كامپيوتري بايد شامل ارتفاع و موقعيت هواپيماي ما، وضعيت جو و آب و هوا، ميزان خسارت هواپيماي ما و كامپيوتر، سرعت و شتاب هواپيماي خود و ما و موارد باشد؟!

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

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

شكل 6

كتابخانه‌هاي هوش‌مصنوعي

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


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

از خصوصيات اين سيستم به‌كارگيري فلسفهِ لايه‌اي است. در زير سه لايه اصلي اين هوش‌مصنوعي معرفي مي‌شود:

‌لايه ادراك:‌(Perception Layer) مسئول آناليز موقعيت‌ها است. به طور مثال در يك بازي RTS دو جزء استاتيك (مثل نوع زمين و قلمرو‌ها) و ديناميك (سپاهيان و كاراكتر‌ها) توسط اين لايه تحليل مي‌شود.

‌‌ لايه تصميم‌گيرنده: ‌(Decision Layer) مسئول تصميم‌گيري‌هاي استراتژيك در مورد موقعيت‌هايي‌ است كه توسط لايه ادراكي دريافت كرده‌است. تصميم‌گيري‌هايي مانند مسير‌يابي، انجام يا عدم انجام جنگ و دفاع كردن.

‌ لايه عملياتي:(Action Layer)  وظيفه انجام كار مناسب را دارد.

از لايه‌هاي فوق شايد بتوان گفت لايه اول مهم‌ترين است؛ زيرا اگر كامپيوتر نتواند درك صحيحي از موقعيت‌هاي يك زمان خاص بازي داشته باشد، ديگر لايه‌ها تصميم‌ها و اعمال نادرستي خواهند داشت. اين لايه در هوش‌مصنوعيِRenderware با نام PathData شناخته مي‌شود. (كه نامي به‌ظاهر اشتباه جلوه مي‌كند؛ زيرا وظايف لايه ادراكي را فقط معطوف به مسير‌يابي مي‌داند).

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

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

موتور بازي Renderware براي دستگاه‌هاي PC ،Playstation و PS2 ،Nintendo و Xbox قابل استفاده است. البته براي هر يك از اين دستگاه‌ها بهينه سازي شده‌است و امكان بهره‌گيري از يك هوش‌مصنوعي بي‌نقص را براي بازي‌هاي آن‌ها فراهم مي‌كند.    

هوش مصنوعيِ Implant 
اين موتور اولين بار در سال 2002 در كنفرانس طراحان بازي‌هاي كامپيوتري ارائه شد و فوراً به يكي از محبوب‌ترين موتور‌هاي بازي‌سازي براي طراحان تبديل شد. بهترين و مهم‌ترين خصوصيت منحصر‌به‌فرد اين هوش‌مصنوعي، به كارگيري يك سيستم پيشرفته با استفاده از الگوريتم‌هاي سلسله‌اي است كه در مسير‌يابي بسيار موفق عمل مي‌كند. در اين سيستم نحوه تصميم‌گيري براي يك عمليات خاص پيرو درختچه‌هاي دودويي است. رابط كاربرپسند اين هوش‌مصنوعي، ميزان استفاده‌ از آن را براي برنامه‌نويسان زياد كرده‌است. به‌عبارت ديگر، ارتباط ساده و مؤثري كه اين هوش‌مصنوعي با برنامه‌هايي مانند 3DStudio Max و Maya برقرار مي‌كند، باعث مي‌شود عمليات اجرايي بازي همزمان با مراحل توليد گرافيكي آن قابل ديدن و تصحيح باشد.

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

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

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

+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 13:10  توسط موسی رجبی  | 

الگوریتم کلونی مورچه‌ها

From دانش‌نامه هوش مصنوعی

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

در دنیای الگوریتمها برای مسئله کوتاهترین مسیر راه حلهای زیادی ارائه شده که یکی از این راه حلهای به نسبت جدید همین الگوریتم کلونی مورچه ها است.

فهرست مندرجات

[مخفی شود]

مقدمه

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

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

الگوریتم کلونی مورچه برای اولین بار توسط دوریگو (Dorigo) و همکارانش به عنوان یک راه حل چند عامله (Multi Agent) برای مسائل مشکل بهینه سازی مثل فروشنده دوره گرد (TSP :Traveling Sales Person) ارائه شد.

عامل هوشند (Intelligent Agent) موجودی است که از طریق حسگر ها قادر به درک پیرامون خود بوده و از طریق تاثیر گذارنده ها می تواند روی محیط تاثیر بگذارد.

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

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

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

جهت علاقه مند شدن شما به این رفتار موریانه ها وتفاوت هوشمندی توده ای و اجتماعی توضیحاتی را ارائه می دهم :

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

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

بهینه سازی مسائل بروش کلونی مورچه(ACO)

همانطور که می دانیم مسئله یافتن کوتاهترین مسیر، یک مسئله بهینه سازیست که گاه حل آن بسیار دشوار است و گاه نیز بسیار زمانبر. بعنوان مثال مسئله فروشنده دوره گرد(TSP). در این مسئله فروشنده دوره گرد باید از یک شهر شروع کرده، به شهرهای دیگر برود و سپس به شهر مبدا بازگردد بطوریکه از هر شهر فقط یکبار عبور کند و کوتاهترین مسیر را نیز طی کرده باشد. اگر تعداد این شهرها n باشد در حالت کلی این مسئله از مرتبه (n-1)! است که برای فقط 21 شهر زمان واقعا زیادی می برد:

روز1013*7/1 = S1016*433/2 = ms10*1018*433/2 = !20

با انجام یک الگوریتم برنامه سازی پویا برای این مسئله ، زمان از مرتبه نمایی بدست می آید که آن هم مناسب نیست. البته الگوریتم های دیگری نیز ارائه شده ولی هیچ کدام کارایی مناسبی ندارند. ACO الگوریتم کامل و مناسبی برای حل مسئله TSP است.

مورچه ها چگونه می توانند کوتاهترین مسیر را پیدا کنند؟

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

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

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

نکه بسیار با اهمیت این است که هر چند احتمال انتخاب مسیر پر فرومون ت توسط مورچه ها بیشتر است ولی این کماکان احتمال است و قطعیت نیست. یعنی اگر مسیر CED پرفرومون تر از CFD باشد به هیچ عنوان نمی شود نتیجه گرفت که همه مورچه ها از مسیرCED عبور خواهند کرد بلکه تنها می توان گفت که مثلا 90% مورچه ها از مسیر کوتاهتر عبور خواهند کرد. اگر فرض کنیم که بجای این احتمال قطعیت وجود می داشت، یعنی هر مورچه فقط و فقط مسیر پرفرومون تر را انتخاب میکرد آنگاه اساسا این روش ممکن نبود به جواب برسد. اگر تصادفا اولین مورچه مسیرCFD(مسیر دورتر) را انتخاب می کرد و ردی از فرومون بر جای می گذاشت آنگاه همه مورچه ها بدنبال او حرکت می کردند و هیچ وقت کوتاهترین مسیر یافته نمی شد. بنابراین تصادف و احتمال نقش عمده ای در ACO بر عهده دارند.

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

مزیتهای ACO

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

کاربردهای ACO

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

  1. مسیر یابی داخل شهری و بین شهری
  2. مسیر یابی بین پست های شبکه های توزیع برق ولتاژ بالا
  3. مسیر یابی شبکه های کامپیوتری

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

در ابتدا مقدمه ای از نحوه مسیر یابی در شبکه های کامپیوتری را توضیح خواهیم داد :

اطلاعات بر روی شبکه بصورت بسته های اطلاعاتی کوچکی (Packet) منتقل می شوند. هر یک از این بسته ها بر روی شبکه در طی مسیر از مبدا تا مقصد باید از گره های زیادی که مسیریاب (Router) نام دارند عبور می کنند. در داخل هر مسیریاب جدولی قرار دارد تا بهترین و کوتاهترین مسیر بعدی تا مقصد از طریق آن مشخص می شود، بنابر این بسته های اطلاعاتی حین گذر از مسیریاب ها با توجه به محتویات این جداول عبور داده می شوند.

روشی بنام ACR : Ant Colony Routering پیشنهاد شده که بر اساس ایده کلونی مورچه به بهینه سازی جداول می پردازید و در واقع به هر مسیری با توجه به بهینگی آن امتیاز می دهد. استفاده از ACR به این منظور دارای برتری نسبت به سایر روش هاست که با طبیعت دینامیک شبکه سازگاری دارد، زیرا به عنوان مثال ممکن است مسیری پر ترافیک شود یا حتی مسیر یابی (Router) از کار افتاده باشد و بدلیل انعطاف پذیری که ACO در برابر این تغییرات دارد همواره بهترین راه حل بعدی را در دسترس قرار می دهد.

+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 13:1  توسط موسی رجبی  | 

 

هوش مصنوعي (Artificial Intelligence) که به اختصار AIخوانده مي شود ، يکي از جذاب ترين شاخه هاي تحقيقاتي فلسفي است.

پيدايش رايانه در صحنه زندگي بشر تحولات عمده اي را به وجود آورد ، حوزه فلسفه نيز از اين تحولات بي نصيب نبوده است. فلاسفه پرسشهاي فلسفي زيادي راجع به تفاوت هاي ذهن انسان با رايانه مطرح کرده اند که همه آنها به طرح بحث هوش مصنوعي انجاميد.

هدف هوش مصنوعي فهم سرشت هوش بشري از راه بررسي ساختار برنامه هاي رايانه اي و نحوه حل مسائل با رايانه است. به اعتقاد متخصصان اين رشته ، اين بررسي مي تواند نحوه عمل و جزييات هوش بشر را نشان دهد.

نخست بايد مقصود متخصصان هوش مصنوعي را از اصطلاح هوش Intelligence روشن کنيم ؛ چراکه نگاه آنان نسبت به مقوله هوش و مفاهيم مرتبط مانند عقل ، ذهن و غيره کاملا متفاوت است. امروزه در ميان دانشهاي موجود ، اصطلاح هوش در روان شناسي بسيار کاربرد دارد و روان شناسان از بهره هوشي افراد و امور مرتبط با آن بحث مي کنند. ولي در هوش مصنوعي اين اصطلاح کاربردي کاملا متفاوت دارد.

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

بلکه چنان که بعدا توضيح خواهيم داد ، به نظر آنان اين دو اصطلاح يک حقيقت قابل اندازه گيري را نشان مي دهند.

ويژگي هاي هوش مصنوعي

هوش مصنوعي براي حل مساله برنامه خاصي را دنبال مي کند. توجه به ويژگي هاي هوش مصنوعي در مقام استفاده از اين نوع برنامه ها سودمند است. 5 ويژگي از ميان آنها اهميت خاصي دارند:

بازنمايي نمادين: ويژگي اول اين است که هوش مصنوعي از نمادهاي عددي در حل مسائل استفاده مي کند. هوش مصنوعي بر پايه دستگاه دوگاني ؛ صفر و يک مسائل را حل مي کند. از اين رو برخي مخالفان گفته اند مهمترين نقص هوش مصنوعي آن است که غير از عدد صفر و يک را نمي فهمد. به تعبير ديگر ، رايانه فقط بله يا نه را مي فهمد و نمي تواند حالات واسطه بين آن دو را بفهمد.در مقابل طرفداران هوش مصنوعي گفته اند هوش طبيعي (هوش انسان) هم بر پايه دستگاه دوگاني پديده ها و امور مختلف را مي فهمد؛ اگر سلولهاي عصبي انسان را بررسي کنيم ، درمي يابيم فهم بشري بر حالت دوگاني استوار شده است و دستگاه عصبي مفاهيم و تصورات را به صورت حالات دوگاني تبديل مي کند. البته نشان دادن نحوه اين تبديل در مفاهيم و ادراکات پيچيده دشوار است. اما بررسي برنامه هاي هوش مصنوعي فهم اين امر دشوار را آسان کرده است.

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

از اين رو، هوش مصنوعي در حل مسائل به روش اکتشافي ؛ يعني به روشي که پيمودن آن رسيدن به نتيجه را تضمين نمي کند ، روي مي آورد.

هوش مصنوعي بر پايه دستگاه دوگاني مسائل را حل مي کند مخالفان مي گويند مهمترين نقص هوش مصنوعي آن است که غير از عدد صفر و يک را نمي فهمد

در روش اکتشافي راههاي متعددي براي حل مساله وجود دارد که اختيار يکي از آنها باز مجالي براي اختيار ديگر راهها باقي مي گذارد و پيمودن يکي از آنها مانع از روي آوردن به بقيه نمي شود. درنتيجه ، برنامه هايي که راه حل تضميني دارند جزو برنامه هاي رايانه اي به شمار نمي آيند.

مثلا برنامه هاي حل معادلات درجه دوم جزو برنامه هاي رايانه اي به شمار نمي آيد ؛ زيرا براي حل آن الگوريتم خاصي وجود دارد.

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

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

بازنمايي معرفت: برنامه هاي هوش مصنوعي با برنامه هاي آماري در بازنمايي معرفت تفاوت دارند ؛ به اين معنا که برنامه هاي نخست از تطابق عمليات استدلالي نمادين رايانه با عالم خارج حکايت مي کنند. مي توانيم اين نکته را با مثال ساده اي توضيح دهيم.

بازنمايي معرفت عنواني براي مجموعه اي از مسائل راجع به معرفت است از قبيل:

1- معرفت مورد نظر در هوش مصنوعي چيست ، چه انواعي و چه ساختاري دارد؟

2- چگونه بايد معرفت را در رايانه بازنمايي کرد؟

3- بازنمايي چه نوع معرفتي را آشکار مي سازد؟ و چه چيزي مورد تاکيد قرار مي گيرد؟

4- معرفت را بايدچگونه به دست آوردوچگونه بايدتغييرداد؟

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

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

اطلاعات متناقض: هوش مصنوعي مي تواند درصورتي که با اطلاعات متناقض روبه رو شود حل مناسبي براي مساله پيدا کند. هوش مصنوعي در چنين موردي بهترين راه را براي حل مساله و رفع تناقض انتخاب کند.

دو فرضيه در هوش مصنوعي

در هوش مصنوعي فرضيه هاي بسياري مورد بحث قرار مي گيرد. در ميان اين فرضيه 2 فرضيه در مقايسه با بقيه کليدي ترند. فرضيه نخست نسبت به فرضيه دوم معتدل تر و ادعايي حداقلي دربر دارد. اين دو فرضيه به ترتيب عبارتند از:

1- فرضيه دستگاه نمادها: مفاد اين فرضيه اين است که: «رايانه را مي توانيم به نحوي برنامه ريزي کنيم که بينديشد». تقرير ديگر از فرضيه فوق اين است که: «رايانه مي تواند بينديشد.»

2- فرضيه قوي دستگاه نمادها: مفاد اين فرضيه هم چنين است :«تنها رايانه مي تواند فکر کند»

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


+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 12:57  توسط موسی رجبی  | 

ایا رايانه مي تواند فکر کند؟

هوش مصنوعي (Artificial Intelligence) که به اختصار AIخوانده مي شود ، يکي از جذاب ترين شاخه هاي تحقيقاتي فلسفي است.

پيدايش رايانه در صحنه زندگي بشر تحولات عمده اي را به وجود آورد ، حوزه فلسفه نيز از اين تحولات بي نصيب نبوده است. فلاسفه پرسشهاي فلسفي زيادي راجع به تفاوت هاي ذهن انسان با رايانه مطرح کرده اند که همه آنها به طرح بحث هوش مصنوعي انجاميد.

هدف هوش مصنوعي فهم سرشت هوش بشري از راه بررسي ساختار برنامه هاي رايانه اي و نحوه حل مسائل با رايانه است. به اعتقاد متخصصان اين رشته ، اين بررسي مي تواند نحوه عمل و جزييات هوش بشر را نشان دهد.

نخست بايد مقصود متخصصان هوش مصنوعي را از اصطلاح هوش Intelligence روشن کنيم ؛ چراکه نگاه آنان نسبت به مقوله هوش و مفاهيم مرتبط مانند عقل ، ذهن و غيره کاملا متفاوت است. امروزه در ميان دانشهاي موجود ، اصطلاح هوش در روان شناسي بسيار کاربرد دارد و روان شناسان از بهره هوشي افراد و امور مرتبط با آن بحث مي کنند. ولي در هوش مصنوعي اين اصطلاح کاربردي کاملا متفاوت دارد.

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

بلکه چنان که بعدا توضيح خواهيم داد ، به نظر آنان اين دو اصطلاح يک حقيقت قابل اندازه گيري را نشان مي دهند.

ويژگي هاي هوش مصنوعي

هوش مصنوعي براي حل مساله برنامه خاصي را دنبال مي کند. توجه به ويژگي هاي هوش مصنوعي در مقام استفاده از اين نوع برنامه ها سودمند است. 5 ويژگي از ميان آنها اهميت خاصي دارند:

بازنمايي نمادين: ويژگي اول اين است که هوش مصنوعي از نمادهاي عددي در حل مسائل استفاده مي کند. هوش مصنوعي بر پايه دستگاه دوگاني ؛ صفر و يک مسائل را حل مي کند. از اين رو برخي مخالفان گفته اند مهمترين نقص هوش مصنوعي آن است که غير از عدد صفر و يک را نمي فهمد. به تعبير ديگر ، رايانه فقط بله يا نه را مي فهمد و نمي تواند حالات واسطه بين آن دو را بفهمد.در مقابل طرفداران هوش مصنوعي گفته اند هوش طبيعي (هوش انسان) هم بر پايه دستگاه دوگاني پديده ها و امور مختلف را مي فهمد؛ اگر سلولهاي عصبي انسان را بررسي کنيم ، درمي يابيم فهم بشري بر حالت دوگاني استوار شده است و دستگاه عصبي مفاهيم و تصورات را به صورت حالات دوگاني تبديل مي کند. البته نشان دادن نحوه اين تبديل در مفاهيم و ادراکات پيچيده دشوار است. اما بررسي برنامه هاي هوش مصنوعي فهم اين امر دشوار را آسان کرده است.

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

از اين رو، هوش مصنوعي در حل مسائل به روش اکتشافي ؛ يعني به روشي که پيمودن آن رسيدن به نتيجه را تضمين نمي کند ، روي مي آورد.

هوش مصنوعي بر پايه دستگاه دوگاني مسائل را حل مي کند مخالفان مي گويند مهمترين نقص هوش مصنوعي آن است که غير از عدد صفر و يک را نمي فهمد

در روش اکتشافي راههاي متعددي براي حل مساله وجود دارد که اختيار يکي از آنها باز مجالي براي اختيار ديگر راهها باقي مي گذارد و پيمودن يکي از آنها مانع از روي آوردن به بقيه نمي شود. درنتيجه ، برنامه هايي که راه حل تضميني دارند جزو برنامه هاي رايانه اي به شمار نمي آيند.

مثلا برنامه هاي حل معادلات درجه دوم جزو برنامه هاي رايانه اي به شمار نمي آيد ؛ زيرا براي حل آن الگوريتم خاصي وجود دارد.

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

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

بازنمايي معرفت: برنامه هاي هوش مصنوعي با برنامه هاي آماري در بازنمايي معرفت تفاوت دارند ؛ به اين معنا که برنامه هاي نخست از تطابق عمليات استدلالي نمادين رايانه با عالم خارج حکايت مي کنند. مي توانيم اين نکته را با مثال ساده اي توضيح دهيم.

بازنمايي معرفت عنواني براي مجموعه اي از مسائل راجع به معرفت است از قبيل:

1- معرفت مورد نظر در هوش مصنوعي چيست ، چه انواعي و چه ساختاري دارد؟

2- چگونه بايد معرفت را در رايانه بازنمايي کرد؟

3- بازنمايي چه نوع معرفتي را آشکار مي سازد؟ و چه چيزي مورد تاکيد قرار مي گيرد؟

4- معرفت را بايدچگونه به دست آوردوچگونه بايدتغييرداد؟

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

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

اطلاعات متناقض: هوش مصنوعي مي تواند درصورتي که با اطلاعات متناقض روبه رو شود حل مناسبي براي مساله پيدا کند. هوش مصنوعي در چنين موردي بهترين راه را براي حل مساله و رفع تناقض انتخاب کند.

دو فرضيه در هوش مصنوعي

در هوش مصنوعي فرضيه هاي بسياري مورد بحث قرار مي گيرد. در ميان اين فرضيه 2 فرضيه در مقايسه با بقيه کليدي ترند. فرضيه نخست نسبت به فرضيه دوم معتدل تر و ادعايي حداقلي دربر دارد. اين دو فرضيه به ترتيب عبارتند از:

1- فرضيه دستگاه نمادها: مفاد اين فرضيه اين است که: «رايانه را مي توانيم به نحوي برنامه ريزي کنيم که بينديشد». تقرير ديگر از فرضيه فوق اين است که: «رايانه مي تواند بينديشد.»

2- فرضيه قوي دستگاه نمادها: مفاد اين فرضيه هم چنين است :«تنها رايانه مي تواند فکر کند»

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

نويسنده : دکتر عليرضا قائمي نيا


هر قطره اشک امضاي خداست , پاي چشمهايي که آسمان در آنها خلاصه شده
+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 12:56  توسط موسی رجبی  | 

پرواز با بال ژنتيك در دنياي جداول سودوكو

کيوان تيرداد
ماهنامه شبکه - بهمن ۱۳۸۵ شماره 73

اشاره :

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


1- صورت مسئله

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

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

1- در هر سطر هيچ عدد تكراري وجود نداشته باشد.
2- در هر ستون هيچ عدد تكراري نبايد وجود داشته باشد.
3- در هر جدول 3*3 طبق شكل نيز نبايد هيچ عدد تكراري وجود داشته باشد.

در  جدول 1 يكي از جداول حل شده سودوكو را مي‌بينيد كه  شروط  مورد نظر در آن صادق است، اما در حقيقت شكل آغازين مسئله مانند جدول 2 است كه بايد حل شود. اگر به حل يك نمونه جدول سودوكو تمايل داريد، مي‌توانيد جدول 2 را حل كنيد.

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

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

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

2- حل مسئله

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

2-1- تعيين كروموزم

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

در مسئله ما نيز جدول سودوكو را در قالب يك آرايه يك‌بعدي مي‌توانيم تصور كنيم كه اعداد متناظر با هر خانه به ترتيب در كنار هم قرار گرفته‌اند و در مراحل بعد با تعيين يك نقطه شكست در اين آرايه، مي‌توانيم عمل تركيب را براي به دست آوردن حالات جديد انجام دهيم، اما در همين ابتدا مي‌توانيم از اندكي ذكاوت برنامه‌نويسي خود استفاده كنيم و به جاي اين‌كه جدول سودوكو را يك آرايه يك بعدي با 81 خانه در نظر بگيريم، همان آرايه دو بعدي 9*9 در نظر بگيريم و فقط شكست را تركيبي از سطر و ستون فرض كنيم.

مثلا‌ً اگر دو كروموزم به شكل فرضي زير باشند، با اين فرض كه نقطه شكست در سطر بعد از ستون 1 باشد، حاصل تركيب به فرم شكل 1 خواهد بود. (براي واضح بودن شكل فرض كرديم هر جدول 4 *4 خانه است.)

2-2 - ساختن جمعيت آغازين يا نسل اول

کد 1

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

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

کد 2

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

در اينجا ذكر يك نكته لازم است كه با توجه به اين‌كه نيازمند تعداد بسيار زيادي عدد بين 0 تا 9 به صورت تصادفي هستيم و با توجه به اين‌كه اين اعداد در كسر بسيار كوچكي از زمان براي كامپيوتر توليد مي‌شوند، نمي‌توانيم از توابعي مانند RND كه عدد تصادفي ايجاد مي‌كنند، استفاده كنيم؛ چراكه هسته يا سيد توليد عدد تصادفي در اين توابع در بهترين حالت ساعت (زمان) اجراي تابع است كه براي ما مناسب نيست.

به همين منظور، مي‌توانيم از RngCryptoServiceProvider از كلا‌س System.Security.Cryptography استفاده كنيم. (كد 1)

2-3- ساختن تابع از ارزش

در ادامه بايد تابعي ايجاد كنيم كه بتوانيم توسط آن به هر نمونه عددي متناسب با ميزان خوب بودن آن را اختصاص دهيم. اين تابع را كه RANK مي‌ناميم، بدين‌صورت تعريف مي‌كنيم: به ازاي هر سطر يا ستون يا هر مربع 3 *3 كه شرط جدول سودوكو را داشته باشد، يك واحد به جواب تابع RANK اضافه مي‌كنيم.

کد 3

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

بايد توجه داشت كه خروجي تابع RANK از نظر برنامه‌نويسي آرايه‌اي است يك‌بعدي به طول تعداد نمونه‌هايي كه قرار است ارزشيابي شوند. مثلا‌ً اگر بخواهيم جمعيت پنجاه‌گانه اوليه را ارزشيابي كنيم، خروجي تابع ما آرايه‌اي يك بعدي با طول پنجاه است كه ارزش نمونه صفر در خانه شماره صفر و به همين ترتيب تا ارزش نمونه 49 در خانه شماره 49 قرار مي‌گيرد. (كلا‌ً پنجاه نمونه). (در VB  آرايه‌ها از شماره صفر آغاز مي‌شوند).

2-4- تركيب نمونه‌ها و ساختن جواب جديد

کد 4

در ادامه بايد هر بار دو نمونه را انتخاب كنيم و از تركيب هر دو نمونه دو جواب جديد به دست آورديم. اين عمل را در اين برنامه پنج هزار بار انجام داديم. يعني از تركيب تصادفي دو نمونه تصادفي از ميان پنجاه نمونه مزبور، ده هزار جواب جديد ايجاد كرديم.

بايد توجه داشت كه نبايد يك نمونه با خودش تركيب شود؛ چراكه دو جواب عيناً مثل خودش توليد مي‌كند. در نهايت اگر بخواهيم به طور خلا‌صه بيان كنيم، با انتخاب دو عدد تصادفي بين صفر تا 49 دو نمونه را انتخاب مي‌كنيم.

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

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

کد 5

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

مسئله‌اي که مي‌خواهيم در اين مقاله حل کنيم، بدين صورت است که فرض کنيد يک جدول سودوکوي خالي داريد و از شما مي‌خواهند مثلاً پنجاه راه حل معرفي کنيد. يعني به پنجاه جدول که خاصيت سودوکو داشته باشد. توجه کنيد که در مسئله ما همه خانه‌ها خالي هستند.

مطالب گفته شده را در برنامه در قالب تابع Produce نوشتم. تابعي كه آرايه مجموعه آغازين (مجموعه پنجاه‌تايي) و مجموعه جواب بعدي (مجموعه ده هزارتايي) و دو عدد تصادفي نقطه شكست و آدرس ذخيره كردن جواب‌ها در مجموعه بعدي را دريافت مي‌كند دو عمل تركيب و جهش را انجام مي‌دهد و در نهايت آرايه‌اي ده‌هزارتايي به عنوان جواب برمي‌گرداند. (كد 5)

2-5 - ارزشيابي مجموعه جواب

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

2-6- ساختن نسل بعد

کد 6

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

در اين برنامه براي انجام اين كار بدين‌صورت عمل كرديم كه اگر عناصر آرايه ارزش مجموعه والد همه داراي يك مقدار بودند، عمل نخبه‌گرايي را انجام نمي‌دهيم، در غيراين‌صورت، از ميان والد نسل قبلي ده والدي را انتخاب مي‌كنيم كه داراي مقدار تابع ارزش بيشتري بودند و در مجموعه والد نسل بعد قرار مي‌دهيم. (كد 6)

کد 7

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

2-7- ادامه، ادامه و ادامه ...

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

3 - حواشي برنامه

3-1- مدت زمان اجرا

بديهي است در هر اجرا، جواب‌هاي مختلفي به دست مي‌آيد و البته مدت زمان متفاوتي طول مي‌كشد، اما اجراي برنامه با مفسر زبان VB2005 روي يك كامپيوتر +Athlon 64 3000 با 512MB رم حدود ده دقيقه طول كشيد. لذا توقع اجرا در يك چشم به هم زدن را نداشته باشيد. چون همان‌طور كه مي‌دانيد، فضاي حالت مسئله بسيار بزرگ است. به عنوان تفريح مي‌توانيد در حين اجراي برنامه خود نگاهي به راندمان CPU و حجم حافظه مصرفي داشته باشيد.

3-2- كنكاش در كد

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

3-3- از نوشتن كد تا توضيح كد

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

+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 12:49  توسط موسی رجبی  | 

دكتر حميد رضا جعفريه
نگارمعتمدي
الهه ملايي

چكيده

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

مقدمه
توجه به كاربرد تكنيك هاي هوش مصنوعي و ابزارهاي مدل سازي در حوزه كسب و كار به طور فزاينده اي در حال افزايش است. در اين راستا سيستم هاي خبره جايگاه ويژه اي يافته اند. در چند دهه گذشته دو عنوان شبكه هاي عصبي و الگوريتم هاي ژنتيك از موضوعاتي بوده اند كه توجه بسياري از دانشگاهيان را به خود جلب كرده اند . اين دو به عنوان ابزاري نيرومند در حل مسائلي كه ديگر توسط متدلوژي ها و روش هاي سنتي گذشته قابل حل نبودند، شناخته شده و مورد استفاده قرارگرفته اند. اين روزها استفاده از آنها به زندگي اجتماعي ما نيز تسري يافته تا جايي كه كاربرد آنها در تصميم گيري ها نقش حياتي يافته است . اين مقاله شواهدي را مبتني برامكان استفاده اخلاقي از شبكه هاي عصبي و الگوريتم ها ي ژنتيك كه به منجر به تصميم گيريهاي موفقيت آميز در ارتباط با مسائل مرتبط با كسب و كار مي شود ارائه مي كند . براي اين منظور لازم است كه بررسي تطبيقي اي در رابطه با تلاشهاي ديگر محققان در قالب ادبيات موضوع صورت گيرد . به همين دليل ، در تحقيق ما بر نقش محققان عملياتي در حوزه كاربرد شبكه هاي عصبي و الگوريتم هاي ژنتيك تأكيد شده است . همچنين در كنار ايجاد چنين پايگاهي براي محققان ، به سوالات اساسي زير نيز پاسخ داده شده است :
-1 آيا كاربردهاي سيستم هاي مبتني بر هوش مصنوعي مي تواند از فرايندهاي تصميم گيري شركت شما پشتيباني كند ؟
-2 آيا اسناد ودلايل و مدارك معتبري براي اثبات اين ادعا وجود دارد ؟
-3 آيا اينها تنها يك تئوري و ايده دانشگاهي است يا داراي قابليت كاربرد و تعميم نيز هست؟
به عبارت ديگر ، با درنظر گرفتن مطالعات مشابه در رابطه با استفاده از سيستم هاي خبره در كسب و كار، نويسندگان و محققان در آرزوي دستيابي به فرصتي جهت بحث مقايسه اي در باره اين سه متدلوژي هوشمند هستند (متاكسيوس و پساراس 2003 ) . يكي از مهم ترين و بحث‌برانگيزترين تحقيقات ، بررسي صورت گرفته توسط لايبوتز (2001) است كه نتيجه آن تحت عنوان «سيستمهاي خبره و كاربرد آنها» مطرح شد.
ساختار اين مقاله به صورت زير است‌: در ابتدا مروري بر پايه و اساس شبكه هاي عصبي و الگوريتم هاي ژنتيك خواهيم داشت و سپس به بازنگري جامعي بر كاربرد شبكه هاي عصبي و الگوريتم هاي ژنتيك در حوزه كسب و كار خواهيم پرداخت و نهايتا آن را با نتايج و پيشنهاداتي براي تحقيقات كاربردي آينده به پايان خواهيم رساند .

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

امروزه شبكه هاي عصبي در كاربردهاي مختلفي از قبيل طبقه بندي داده ها و تشخيص الگو از طريق فرايند يادگيري كه خود شامل مسائلي مانند تشخيص خط و شناسايي گفتار وپردازش تصوير است به كار مي روند .به مثابه سيستم هاي بيولوژيكي ، آموزش شامل تنظيم پيوندهاي بين سيناپس‌ها كه درهر نورون وجود دارند است. به عبارت ديگر‌، اطلاعات آموخته شده به شكل ارزشهاي عددي به‌نام «وزن» كه به هر واحد پردازش شبكه اختصاص داده مي‌شود ، ذخيره مي شوند .به طور كلي ، شبكه هاي عصبي مي توانند بين :
روشهاي اتصال نورون ها، انواع روشهاي ويژه محاسبه عمليات نورون ها، روش انتقال الگوي عمليات از خلال شبكه و روشهاي يادگيري آنها كه شامل نرخ يادگيري است، تمايز قائل شوند . با در نظر گرفتن ارتباطات بين نورون ها ، مي توان بين شبكه هاي لايه دار و بدون لايه تمايز قايل شد . شبكه هاي لايه دار گروهي ازنورون ها هستند كه در لايه هايي مجتمع گرديده اند كه بين لايه ورودي و خروجي - كه تنها پيوند خارجي دارند - يك يا چند لايه پنهان وجود دارد . داده هاي ورودي از لايه ورودي به وسيله لايه هاي پنهان (لايه مياني ) به لايه خروجي منتقل مي‌شوند . سيگنالها ي جاري در شبكه هاي لايه دار به سمت جلو حركت مي كنند كه در اصطلاح فني به آنها پيش خور گفته مي شود در حالي كه شبكه هاي بدون لايه داراي گره هاي اضافي بازخور هستند كه از تقسيمات درست لايه ها جلوگيري مي كنند .
ساختار پيوندها و تماسها و تعداد لايه‌ها و نورون ها تعيين كننده معماري شبكه است كه بايستي قبل از استفاده از شبكه‌هاي عصبي تنظيم شود . همان طور كه در شكل 2 نمايش داده شده است ، اگرچه در موارد مشخصي مي توان با موفقيت از شبكه هاي عصبي تك لايه استفاده كرد اما رسم بر اين است كه شبكه هاي عصبي حداقل داراي 3 لايه باشند ( لايه ورودي ،لايه پنهان يا لايه مياني و لايه خروجي ) .
قبل از آنكه شبكه آموزش داده شود‌، اوزان اختصاصي كوچك و به صورت تصادفي ارزش گذاري مي شوند . در خلال روند آموزش ، اوزان شبكه به شكل تدريجي تعديل مي شود تا جايي كه محرز شود كه كاملاً روابط فرا گرفته شده است . اين شكل از يادگيري ، يادگيري با سرپرست ناميده مي شود . وقتي يك الگو در لايه ورودي به‌كار گرفته مي شود تا آن جا جلو مي رود كه ستانده نهايي در لايه خروجي محاسبه شود . ستانده شبكه با نتايج مطلوب مورد انتظار مدل مقايسه و خطاهاي موجود محاسبه مي‌شود .اين خطاها مجدداً به عنوان بازخورد به شبكه بازمي گردد تا تغييرات لازم در اوزان پيوندها براي كاهش خطا صورت گيرد .مجموعه اي از مثالهاي آموزشي داده _ ستانده مكرراً ارائه مي شود. تا جايي كه مجموع امتيازات خطا به سطح قابل قبولي كاهش يابد . در اين جايگاه م‌ توان آن شبكه را به عنوان شبكه اي آموزش ديده در نظر گرفت . اما در روش ديگري كه يادگيري بدون سرپرست ناميده مي شود‌، شبكه عصبي بايد بدون كمك گرفتن از جهان ، بتوانند كار آموزش را انجام دهد . واقعيت آن است كه در عمل ازروش يادگيري باسرپرست و يا حداكثر از روشهاي تركيبي استفاده مي شود و فرايند آموزش بدون سرپرست به شكل خالص تنها وعده‌اي است كه شايد بتواند در آينده تحقق يابد . در حال حاضر و در كاربردهاي پيشرفته ، از روش آموزش بدون سرپرست براي ايجاد تنظيمات اوليه برروي سيگنال هاي ورودي شبكه هاي عصبي استفاده مي شود و باقي مراحل آموزش به روش با سرپرست ادامه مي يابد .

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

فناوري الگوريتم ژنتيك
الگوريتم هاي ژنتيك روش قدرتمندي را براي توسعه اكتشافي مسائل بهينه سازي تركيبي مقياس بزرگ فراهم آورده است . انگيزه اصلي مطرح كردن الگوريتم ژنتيك مي تواند اين گونه عنوان شودكه «تكامل تدريجي» به شكل قابل ملاحظه اي در توسعه انواع وگونه هاي پيچيده از طريق مكانيزم هاي نسبتاً ساده تكميلي نمود يافته است . حال سوال اساسي اين است : پذيرش كدام ايده از تئوري تكامل تدريجي مي تواند به ما در حل مسائل اين قلمرو كمك كند ؟ اين سوال با توجه به غناي پديده تكامل تدريجي جوابهاي متفاوتي دارد. هالند و دي جانگ (1975) از نخستين كساني هستندكه با معرفي مفهوم الگوريتم ژنتيك به عنوان يك تكنيك جستجوي عمومي - كه از تكامل تدريجي بيولوژيك در قالب بقاي افراد اصلح و مبادله ساختارمند و تصادفي اطلاعات الگوبرداري مي كند- درصدد پاسخگويي به اين سوال برآمدند .
يك الگوريتم ژنتيك مسئله را به صورت مجموعه اي از رشته ها كه شامل ذرات ريزهستند كد گذاري مي كند ، سپس براي تحريك فرايند تكامل تدريجي ،تغييراتي را بر روي رشته ها ا عمال مي‌دارد. در مقايسه با الگوريتم هاي جستجوي محلي ، در جستجوي عمومي كه تنها يك راه حل قابل قبول وجود دارد ، الگوريتم هاي ژنتيك جامعه اي از افراد را در نظر مي‌گيرند . كـــار با مجموعه اي از افراد، امكان مطالعه ساختارها و ويژگيهاي اصلي افراد متفاوت را كه منجر به شناسايي و كشف راه حلهاي كارآمد تر مي شود، فراهم مي‌سازد . در طي مطالعه ، الگوريتم ژنتيك رشته هاي متناسب با ارزش را برمي گزيند و آن دسته از رشته‌هايي را كه تنــاسب كمتري با جمعيت مورد بررسي دارند حذف مي‌كنند .

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

بازاريابي
«انجمن بازاريابي آمريكا» از ديدگاه مديريتي، بازاريابي را بدين گونه تعريف مي كند : بازاريابي يك فرايند اجتماعي و مديريتي است كه به‌وسيله آن، افراد و گروهها ، نيازها و خواسته ها ي خود را از طريق توليد ، عرضه و مبادله كالاهاي مفيد و با ارزش با ديگران ، تأمين مي كنند . به طور كلي ، بازاريابي دانشي ناشناخته است كه با ويژگيهايي از قبيل عدم اطمينان بالا ، ساختار گمشده علّـي ودانشي ناكامل و گسترده قابل شناسايي است .بسياري از وظايف تصميم گيري و حل مسـئله به صورت بدون ساختار يا نيمه ساختار يافته انجام مي شود . به همين دلايل توسعه كاربرد شبكه هاي عصبي و الگوريتم هاي ژنتيك در بازاريابي نسبت به ساير حوزه هاي علم دشوارتر است .
در سال 1991 ، كاري و ماتين هو به بحث در رابطه با نقش هوش مصنوعي در بازاريابي پرداختند و جايگاه يابي رقابتي را به‌وسيله متدلوژي هدف گرا مورد تجزيه و تحليل قرار دادند . اليس و همكارانش در سال 1991 گزارشي از پيشرفتهاي كاربرد مدل هاي شبكه عصبي در مواجهه با استراتژي قيمت گذاري كششي ارائه كردند در حالي‌كه پراكتر در سال 1992 چگونگي كاربرد تكنولوژي شبكه هاي عصبي در يادگيري مدل هاي داده بازاريابي و نقش آنها را در ساختن سيستم هاي پشتيباني از تصميمات بازاريابي به نمايش گذاشت . در سال 1993 كاري و ماتين هو از تكنولوژي شبكه هاي عصبي در مدل سازي واكنش مصرف كننده به محرك تبليغات استفاده كردند . راي و همكارانش در سال 1994 شبكه هاي عصبي را در كمّي سازي فاكتورهاي موثر در كيفيت روابط خريدارو فروشنده مورد استفاده قرار دادند . براي اين منظور شبكه اي با دو عنصر خروجي كيفيت روابط (رضايت از روابط و اعتماد ) و پنج ورودي ( گرايش فروش فروشنده ، مشتري گرايي ، تخصص، اخلاقيات ، و دوام روابط ) شكل گرفت . در مقايسه با رگرسيون هاي چند متغيره، تكنيك شبكه هاي عصبي به نتايج آماري قابل قبول تري دست يافت .
از سوي ديگر ، هارلي و همكاران (1994) استفاده از الگوريتم هاي ژنتيك را در حل مسائل بهينه سازي بازاريابي مورد آزمايش قرار دادند . بر اساس مطالعه آنها ، كاربردهاي بالقوه الگوريتم هاي ژنتيك در بازاريابي مي تواند شامل موارد زير باشد :
1) رفتار مصرف كننده
_ يادگيري مدل هاي انتخاب مصرف كننده
_ پردازش اطلاعات مصرف كننده
_ تاثير گروههاي مرجع

2) بخش بندي،انتخاب بازار هدف، جايگاه يابي
_ بهينه سازي ساختارهاي محصول – بازار
_ تجزيه و تحليل فاكتورهاي كليدي خريد
_ جايگاه يابي محصول

3) مديريت عناصر آميخته بازاريابي
_ بهينه سازي چرخه حيات محصول
_ طراحي محصول
_ استراتژي تبليغات و برنامه ريزي رسانه‌اي
_ مديريت فروش
گرين و اسميت (1987) يك سيستم ژنتيك را براي يادگيري مدل هاي انتخاب مصرف كننده مطرح ساختند و تنگ و هولاك (1992 ) چارچوبي مفهومي را در پيوند مفاهيم بازاريابي با مكانيزم تكامل تدريجي داروين ارائه كردند . در سال 1992 بالاك ريشمن و جاكوب يك الگوريتم ژنتيك مبتني بر سيستم پشتيباني از تصميم گيري براي طراحي محصول ارائه كردند . از سوي ديگرو در حركتي نوين وناگوپال و بيتز (1994) ازاشتراك شبكه هاي عصبي و تكنيكهاي آماري در تحقيقات بازاريابي استفاده كردند. درنهايت ، مي توان گزارشي از پيشرفتهاي موجود در اين زمينه رابه شكل زير ارائه كرد :
_ STRATEX _ يك سيستم دانشي با هدف پشتيباني از انتخاب بخشهاي بازار (بورچ و هارتويگسن ، 1991)
_ ADDUCE _ سيستمي در توجيه واكنش مصرف كننده به تبليغات (بارك ، 1991)
_ COMSTRAT _ سيستمي براي تصميمات استراتژيك بازاريابي با تاكيد ويژه بر جايگـاه يابي رقابتي ( ماتين هو و همكاران 1993‌)
_ MARSTRA _ سيستم هوش شبكه اي براي توسعه استراتژي هاي بازاريابي و ارزيابي فاكتورهاي بازاريابي استراتژيك (‌لي، 2000)
_ GLOSTRA _ سيستم هوش شبكه اي براي توسعه و بهبود استراتژي هاي بازاريابي جهاني و بازاريابي اينترنتي ( لي و ديويس‌، 2001 )

 

بانكداري و حوزه هاي مالي
از كاربردهاي مهم و مطرح شبكه هاي عصبي و الگوريتم هاي ژنتيك در بانكداري و حوزه مسائل مالي مي توان به اين موارد اشاره كرد : كاربردهاي اعتباري ، تجزيه و تحليل هاي مالي ، سرمايه گذاري مالي ، و تجزيه و تحليل بازار مبادله سهام . محققان بسياري به بررسي كاربردهاي شبكه هاي عصبي و الگوريتم هاي ژنتيك در بانكداري و مالي پرداخته اند . ازآن جمله ، در سال 1993 ، تفتي و نيكبخت به بحث در ارتباط با استفاده از شبكه هاي عصبي توسط سازمانها وشركتهاي مالي در جهت اهداف متفاوت امتيازبندي اعتباري پرداختند .تان و دي هاردجو (2001) از طريق افزايش زمان و دوره پيش بيني مدل به توسعه يك تحقيق ابتدايي در استفاده از شبكه هاي عصبي براي پيش بيني استرس هاي مالي در اتحاديه هاي اعتباري استراليا پرداختند . دستاورد حاصل شده در مقايسه با نتايج به دست آمده از متوسط انحراف از ميانگين، نتايج قابل قبولي بود . همچنين ديويس و همكاران نيز در 1996 به بررسي نگرشهاي سيستم‌هاي خودپرداز براساس تجزيه و تحليل شبكه‌هاي عصبي پرداختند .
ازسوي ديگر، شناسايي كاربردهاي متنوع الگوريتم هاي ژنتيك از سوي افراد مختلف به صورت زير ارائه شده است : انتخاب استراتژي هاي بازار انحصاري چند جانبه ( ماركز ، 1989 ) ، توسعه استراتژي‌هاي سرمايه گذاري مالي (باور‌‌، 1994 ) ،جستجو براي يافتن قوانين تكنيكي براي اعمال آنها در بازارسرمايه ( كارجالايننن‌، 1994 ) ، تجزيه و تحليل ريسك در بانكداري ( وارتو ،1998 ) . علاوه بر اين، در سال 1999 كارجالايننن و آلن از الگوريتم‌هاي ژنتيك در پيدا كردن قوانين تكنيكي تجاري استفاده كردند. در همين زمان نيز آندرا و همكارانش (1999) از الگوريتم هاي ژنتيك در تجــزيه و تحليل فني در بازار سهام مادريد استفاده كردند .
از ديگر سيستمهاي مالي مبتني بر شبكه‌هاي عصبي و الگوريتم هاي ژنتيك مي توان به موارد زير اشاره كرد :
_ KABAL _ سيستم دانشي براي تجزيه و تحليل مالي در بانكداري (هارت ويگسن ، 1990 )
_ CREDEX _ سيستمي براي ارزيابي اعتبارات ( پينسون ، 1990 )
_ FINEVA _ سيستم دانشي چند معياري پشتيباني از تصميم گيري براي ارزيابي عملكرد و قابليت حيات شركت ( زوپوني ديس ، 1996 )

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

ساير حوزه هاي تجاري
تا اينجا درباره كاربردهاي مختلف شبكه هاي عصبي و الگوريتم هاي ژنتيك در بخشهاي كليدي تجارت صحبت كرديم : بازاريابي ، بانكداري و مالي ، پيش بيني . قطعاً حوزه هاي ديگري از تجارت و كسب و كارنيز وجود دارد كه در اندازه هاي متفاوت مي توانند از مزاياي استفاده از شبكه هاي عصبي و الگوريتم هاي ژنتيك منتفع شوند . به عنوان مثال مي توان به كاربرد شبكه هاي عصبي در صنعت هتلداري ( لاو ، 1998) ، ارزيابي داراييها (لنك و همكاران 1997 ) و پيش بيني تورم (آيكن ، 1999) اشاره كرد. علاوه بر اين ، كاملاً مشهود است كه بخشهايي ( مانند توليد ، صنايع سنگين ، انرژي ، ساخت و ساز ) وجود دارند كه از نظر ما دور مانده اند .

مزاياي استفاده از اين فناوريهاي هوش مصنوعي
با بررسي اجماعي نظريات و تحقيقات موجود مي توان مزاياي استفاده از فناوريهاي هوش مصنوعي و الگوريتم هاي ژنتيك را در قالب گزاره هاي زير خلاصه كرد :
_ ارائه خدمات بهتر به مشتري
_ تقليل زمان انجام وتكميل وظايف
_ افزايش توليد
_ استفاده اثربخش تر از منابع
_ سازگاري و ثبات بيشتر در تصميم گيري

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

منابع

-1 جكسون . تي و بيل . آر . آشنايي با شبكه‌هاي عصبي ، ترجمه دكتر محمود البرزي – تهران : موسسة انتشارات علمي دانشگاه صنعتي شريف ، چاپ دوم ، 1383
-2 كاتلر ، فيليپ . مديريت بازاريابي ، ترجمه بهمن فروزنده – تهران : آتروپات ،1382
-3 قمي ، عليرضا " شبكه هاي عصبي مصنوعي "‌، نشريه دنياي كامپيوتر و ارتباطات – شماره 12 ، صفحات 66 تا 69
-4 سعيدي ، مسعود " شبكه هاي عصبي (2) " ، نشريه شبكه _ شماره 52 ، اسفند 1383 ، صفحه 210 تا 211
-5 مماني ، حامد ، نرگس پور اصغري حقي و ساعد علي ضمير ، " شبكه هاي عصبي و كاربرد آن در بهينه سازي " ، نشريه صنايع _ شماره 30
-6 نورزاد ، غلامرضا " بيولوژي سلولي مولکولي " ،انتشارات نوردانش ، تهران ، 1376 ، چاپ اول

7- Metaxiotis , Kostas & John Psarras (2004) "The Contribution of Neural networks and genetic algoritms to business decision support "Management decision , vol 42 ,no .2, Emerald group publishing limited , pp. 229.242

8- Curry , B & L. Moutinho (1993) "Neural Network in marketing : Modelling consumer Responses to Advertising Stimuli "European Journal of marketing , vol 27 , no . 7 , MCB university press , pp 5. 20

9- Wray , B , A. palmer & D. Bejou (1994) " Using Neural Network Analysis to evaluate Buyer – Seller Relationships " European Journal of Marketing , vol 28 , no. 10 , MCB university press , pp 32.48

10- Venugopal .V & W. Beats ( 1994 ) " Neural networks and Statistical Techniques in marketing research " Marketing intelligence & planning , vol 12 , no. 7 , MCB university press , pp 30 . 38

11- Davies , F , L . Moutinho & B . Curry (‌‌1996 ) " ATM user attitudes : a neural network analysis " , marketing intelligence & planning , vol 14 , no . 2 , MCB university press , pp 26 . 32

_ دكتر حميدرضا جعفريه: دكتراي حرفه اي از دانشگاه علوم پزشكي يزد
_ _ نگار معتمدي: دانشجوي كارشناسي ارشد بازاريابي دانشگاه آزاد اسلامي واحد علوم و تحقيقات تهران
_ _ _ الهه ملايي: دانشجوي كارشناسي ارشد بازاريابي دانشگاه آزاد اسلامي واحد علوم و تحقيقات تهران

+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 12:45  توسط موسی رجبی  | 

 
 
 

  


اشاره :

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


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

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

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

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

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

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

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

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

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

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

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

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

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

1011011010000101011111110

‌يا

1264196352478923455548216

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

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

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

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

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


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

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

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

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

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

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

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

+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 12:44  توسط موسی رجبی  | 

الگوریتم های هوش مصنوعی
خلاصه: ACO یا Ant Colony Oprimization یک راه حل برای مسئله های با فضای حالت بزرگ یا NP است که تقریبا همانند الگوریتمهای Genetic است ولی در عمل نسبت به آن بهتر است. آنچه در ادامه می آید قسمتی از یک مقاله در مورد کاربردهای Data Mining و ACO است. مورچه ها حشره های مستقلی هستند که فعالیت اشتراکی دارند به ظاهر یک از مورچه فعال در یک کلونی مستقل از دیگری فعالیت می کند ولی در واقع کلیه مورچه ها در قالب یک سیستم جهت حل یک مسئله پیچیده با هم همکاری می کنند . مسئله مهم دررابطه مورچه ها و به طور کلی حشرات مسئله وابستگی بقا است. مورچه ها غذا را جستجو می کنند و آن را به شکل مناسب نگهدار و انبار می کنند حل این مسئله نیاز به برنامه ریزی پیشرفته دارد مورچه ها این عملیات را بدون هر گونه کنترل مرکزی و نظارت متمر کز انجام می دهند به همین دلیل به حشرات به طور کلی گروه هوشمند می گویند.

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

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


2- مشخصات و ماهیت الگوریتم های ACO
چنانچه بتوان ساختار مسئله را به صورت یک گراف نمایش داد آنگاه می توان از الگوریتم های ACO برای یافتن کوتاه ترین مسیر در گراف که همانا پاسخ مسئله است استفاده کرد. هر مورچه بصورت تکاملی اقدام به تغییر یا ساخت بخشی از پاسخ مسئله می نماید ، علکرد کلی مورچه ها وابسته به یک تابع احتمالی و یک تابع اکتشافی وابسته به مسئله است. ساختار و ماهیت الگوریتم های ACO  بصورت زیر است 2 :
ایجاد یک متد برای ارزیابی پاسخهای تولید شده . این متد بر اساس ساختار مسئله تعریف می شود.
ارائه یک تابع اکتشافی H) وابسته به مسئله ،این تابع میزان کیفیت item های قابل اضافه کردن به پاسخ مسئله را ارزیابی می کند .
یک روتین جهت بهمگام سازی میزان فرومون مسیرها(P)
ارائه یک تابع احتمالی که به کمک آن بتوان مسیرها را جهت تولید پاسخ جستجو کرد .در این تابع از تابع اکتشافی و میزان فرومون موجود در مسیرها استفاده می شود

+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 12:38  توسط موسی رجبی  | 

هوش مصنوعي

پيش نياز: طراحي الگوريتم ها

نوع واحد : نظري

تعداد واحد : 3

سرفصل مطالب:

  1. هوش مصنوعي چيست؟مباني و تاريخچه هوش مصنوعي و مرزهاي دانش در هوش مصنوعي
  2. عاملين ( agents ) هوشمند ، ساختار و عملكرد عاملين هوشمند ، محيط ها.
  3. حل مسئله ، حل مسئله از طريق جستجو. فرموله كردن مسائل ، چند مثال جستجو براي جواب ، روشهاي جستجو
  4. روشهاي جستجوي آگاهانه ( Informed ). جستجوي best-first ، توابع Heuristic ، جستجوي حافظه محدود ، ساير روشهاي جستجوي بهبود يافته
  5. عاملين مبتني بر دانش ، عامليني كه منطقي استدلال مي كنند ، نمايش منطق ، منطق گزاره اي ، استدلال
  6. منطق مرتبه اول ، استنتاج در اين منطق ، قوانين استنتاج ، استنتاج زنجيره اي به جلو و به عقب
  7. برنامه ريزي ( Planning ) ، از حل مسئله به برنامه ريزي ، نمايشهاي ساده براي برنامه ريزي ، مهندسي دانش براي برنامه ريزي
  8. عدم قطعيت ( Uncertainty ) ، نحوه عمل كردن در شرايط عدم قطعيت ، كاربرد و نحوه استحصال احتمالات
  9. معرفي برخي كاربردها در سيستم هاي خبره ، پردازش زبان طبيعي ، بينائي ماشين و رباتيك

مراجع:

 

1. Russell and Norwing, “Artificial Intelligence: A Modern Approach”, Prentice-Hall, 1995.

2. E. Rich, ”Artificail Intelligence”, McGraw-Hill, 2nd Edition, 1992.

3. I. Bratko,” Prolog Programming for AI”, Addison Wesley, 1986.

4. N. J. Nilsson, Principles of Artificial Intelligence, Springer-Verlag, 1980.

5. L. Sterling and E. Shapiro, Art of Prolog MIT Press,1986.

6. I. Bratko, Prolog Programming for AI, Addison-Wesley, 1986.

  

 

+ نوشته شده در  سه شنبه شانزدهم بهمن 1386ساعت 12:17  توسط موسی رجبی  | 

گرایش نرم افزار


الف: دروس عمومی

انگلیسی پیشرفته

 ب: دروس اصلی

معماری کامپیوتر پیشرفته

سیستم های عامل پیشرفته

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

ج: دروس تخصصی اجباری

سمینار کارشناسی ارشد پایان نامه 1 پایان نامه 2

 د: دروس تخصصی انتخابی

مهندسی نرم افزار پیشرفته سیستم های خبره و مهندسی دانش سیستم های توزیع شده
شبکه های کامپیوتری پیشرفته مباحث پیشرفته در مهندسی نرم افزار طراحی نرم افزارهای مطمئن
روش های محاسبات عددی پیشرفته مباحث ویژه توصیف و وارسی برنامه ها
الگوریتم های بهینه سازی     

د: دروس جبرانی

معماری کامپیوتر اطول طراحی سیستم های عامل ساختمان داده ها و الگوریتم ها
ریاضیات مهندسی نظریه زبان ها و ماشین ها   

  

گرایش هوش مصنوعی :


الف: دروس عمومی

انگلیسی پیشرفته

 ب: دروس اصلی

هوش مصنوعی پیشرفته

شبکه های عصبی

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

ج: دروس تخصصی اجباری

سمینار کارشناسی ارشد پایان نامه 1 پایان نامه 2

 د: دروس تخصصی انتخابی

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

د: دروس جبرانی

سیگنال ها و سیستم کنترل خطی هوش مصنوعی

  

گرایش -دکترا-مهندسی نرم افزار


  

الف: دروس عمومی

ب: پایه

 ج: دروس اصلی

د: دروس اختیاری

هـ: دروس تخصصی اجباری

 آمادگی امتحان جامع امتحان جامع دکترا رساله دکترا 1
رساله دکترا  2  رساله دکترا  3  رساله دکترا  4

و: دروس تخصصی انتخابی

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

 گرایش -دکترا-مهندسی هوش مصنوعی

   


الف: دروس عمومی

ب: پایه

 ج: دروس اصلی

د: دروس اختیاری

هـ: دروس تخصصی اجباری

 آمادگی امتحان جامع امتحان جامع دکترا رساله دکترا 1
رساله دکترا  2  رساله دکترا  3  رساله دکترا  4

و: دروس تخصصی انتخابی

پردازش تکاملی پیشرفته پردازش مورفولوژیکی تصاویر شیوه اخذ دانش
سنجش از راه دور مباحث ویژه در نظریه یادگیری  

 
+ نوشته شده در  دوشنبه پانزدهم بهمن 1386ساعت 11:0  توسط موسی رجبی  | 

درس زبان انگلیسی (عمومی و تخصصی)  شامل 25 تست می شود و برای تمامی رشته ها ضریب 1 دارد.
درسرياضيات (آمار و احتمال - رياضيات مهندسي - محاسبات عددي  ساختمان گسسته)  که شامل 24 تست
می شود و برای تمامی رشته ها ضریب 2 دارد.
(ساختمان داده - مدارهاي منطقي - معماري كامپيوتر  سيستم عامل - نظريه زبانها و ماشينها) 30 تست
، تمامی داوطلبان  باید پاسخگوی این دروس باشند و ضریب 4 دارد.
دروس تخصصي سخت افزار (مدارهاي الكتريكي - VLSI  الكترونيك ديجيتال - انتقال داده( 25 تست
، فقط داوطلبان رشتۀ سخت افزار باید پاسخگو باشند و ضریب 2 دارد.
دروس تخصصي نرم افزار (طراحي الگوريتم - كامپايلر - زبانهاي برنامه سازي - پايگاههاي داده). 25 تست
، داوطلبان رشته های نرم افزار و فناوری اطلاعات باید پاسخگو باشند و ضریب 2 دارد.
 دروس تخصصي هوش مصنوعي (مدارهاي الكتريكي - طراحي الگوريتمها  ی هوش مصنوعي) ، شامل 25 تست که ضریب 2 دارد.

منابع پيشنهادي براي مطالعه کنکور ارشد كامپيوتر: 

     1- ساختمان داده
الف) كتاب ارشد ساختمان داده و الگوريتم‌ها تاليف مهندس رهنمون، انتشارات پوران پژوهش

ب) Data structure in C++ . By E. Horowitz

ج) Data structure and algorithm. By A.Aho

2- نظريه زبان‌ها و ماشين‌ها

الف) كتاب ارشد نظريه‌ زبان ها و ماشين ها تاليف مهندس سهرابي و مهندس مقصودي، انتشارات پوران پژوهش

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

ج) Element of the Theory of computation. By sudkamp

3- مدارهاي منطقي

الف) كتاب ارشد مدار منطقي، تاليف مهندس يوسفي انتشارات پوران پژوهش ( کتاب تست این منبع هم موجود است --> تست های طبقه بندی شده مدار منطقی)

ب) Digital Design. By Mano

ج) Digital logic circuit Analysis and Design. By Nelson

4- معماري كامپيوتر

الف) كتاب ارشد معماري كامپيوتر تأليف مهندس يوسفي انتشارات پوران پژوهش ( کتاب تست این منبع هم موجود است --> سوالات طبقه بندی شده معماری کامپیوتر)

ب) Computer system Architecture. By Mano

5- سيستم‌ عامل

الف) كتاب ارشد سيستم عامل، تاليف دكتر ابراهيمي مقدم، انتشارات پوران پژوهش

ب) Operating System : Design and Implementation. By Tanebaum

ج) Operating System : Internals and design Principles. By Stallings

د) Operating System :By silberschatz

6- ساختمان گسسته

الف) كتاب ارشد ساختمان گسسته، گردآوری شده توسط شهاب بهجتي، انتشارات پوران پژوهش

ب) رياضيات گسسته و تركيباتي از ديدگاه كاربردي تاليف رالف گريمالدي ترجمه دكتر علی عميدي - ناشر: مرکز نشر دانشگاهی

ج) Descrete Mathematics. By Johnwonbaugh

7- رياضي مهندسي

الف) كتاب ارشد رياضي مهندسي گردآوری شده توسط فرزين حاجي ‌جمشيدي، انتشارات پوران پژوهش

ب) مجموعه گزينه‌هاي چهار جوابي طبقه بندي شده رياضي كارشناسي ارشد:ریاضی مهندسی، تاليف دكتر مسعود نيكوكار

8- آمار و احتمال مهندسي

الف)كتاب ارشد آمار و احتمال، تاليف دكتر هژبر انتشارات پوران پژوهش

ب)مجموعه گزينه‌هاي چهار جوابی طبقه بندي شده رياضي كارشناسي ارشد:آمار و احتمال مهندسی تأليف دكتر مسعود نيكوكار

ج)آمار رياضي والدپول ترجمه دكتر وحيدي

9- محاسبات عددي

الف) Numeical Methods for Mathematics, science and Engineering. By Mathews

ب) محاسبات عددي تاليف دكتر قلي‌زاده

ج) روش‌هاي محسابات عددي ترجمه دكتر فائزه توتونيان

د) آناليز عددي و روش‌هاي كامپيوتري نوشتۀ رالف پنینگتون ترجمه دكتر منصور نيكخواه بهرامی - ناشر: دانشگاه تهران

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

10 - پايگاه‌هاي داده

الف) كتاب ارشد پايگاه داده، تاليف مهندس سهرابي انتشارات پوران پژوهش

ب) Database Management systems. By C.G. Date

ج) Database system Concepts. By Silberschatz

11- زبان‌هاي برنامه سازي

الف) Programing Languages : Design and Implementation. By Prat

12- کامپايلر

الف) اصول طراحي كامپايلرها تاليف آهو، اولمن

13- طراحي الگوريتم ها

الف) Algorithm design. By Horowitz
ب) طراحي الگوريتم‌ها تاليف دكتر محمود نقيب‌زاده

14- مدارهاي الکتريکي
الف) مدارهاي الكتريكي ترجمه دكتر جبه‌دار مارالاني

ب) مدارهاي الكتريكي نوشته ويليام هيت

15- هوش مصنوعي
الف)
Artificial Intelligence: A modern approach. By Russell
ب) هوش مصنوعي تاليف دكتر فهيمي

16- زبان انگلیسی (عمومی)

504 واژۀ کاملاً ضروری تالیف Murray Bromberg

 

+ نوشته شده در  دوشنبه پانزدهم بهمن 1386ساعت 10:58  توسط موسی رجبی  | 


namespace Lex
{
/*
* Class: Nfa2Dfa
*/
using System;
using System.Text;
using System.Collections;
using BitSet;

class Nfa2Dfa
{
/*
* Constants
*/
private const int NOT_IN_DSTATES = -1;

/*
* Function: make_dfa
* Description: High-level access function to module.
*/
//public void make_dfa(Gen l, Spec s)
public static void MakeDFA(Spec s)
{
make_dtrans(s);
free_nfa_states(s);
#if OLD_DUMP_DEBUG
Console.Error.WriteLine(s.dfa_states.Count
+ " DFA states in original machine.");
#endif
free_dfa_states(s);
}

/*
* Function: make_dtrans
* Description: Creates uncompressed CDTrans transition table.
*/
//private void make_dtrans()
private static void make_dtrans(Spec s)
{
Dfa dfa;
int nextstate;

Console.Error.WriteLine("Working on DFA states.");

/* Reference passing type and initializations. */
s.InitUnmarkedDFA();

/* Allocate mapping array. */
int nstates = s.state_rules.Length;
s.state_dtrans = new int[nstates];

for (int istate = 0; istate < nstates; istate++)
{
/* Create start state and initialize fields. */

Bunch bunch = new Bunch(s.state_rules[istate]);

bunch.e_closure();
add_to_dstates(s, bunch);

s.state_dtrans[istate] = s.dtrans_list.Count;

/* Main loop of DTrans creation. */
while (null != (dfa = s.GetNextUnmarkedDFA()))
{
Console.Error.Write(".");
#if DEBUG
Utility.assert(!dfa.IsMarked());
#endif
/* Get first unmarked node, then mark it. */
dfa.SetMarked();

/* Allocate new DTrans, then initialize fields. */
DTrans dt = new DTrans(s, dfa);

/* Set dt array for each character transition. */
for (int i = 0; i < s.dtrans_ncols; i++)
{
/* Create new dfa set by attempting character transition. */
bunch.move(dfa, i);
if (!bunch.IsEmpty())
bunch.e_closure();
#if DEBUG
Utility.assert((null == bunch.GetNFASet()
&& null == bunch.GetNFABit())
|| (null != bunch.GetNFASet()
&& null != bunch.GetNFABit()));
#endif
/* Create new state or set state to empty. */
if (bunch.IsEmpty())
{
nextstate = DTrans.F;
}
else
{
nextstate = in_dstates(s, bunch);

if (nextstate == NOT_IN_DSTATES)
nextstate = add_to_dstates(s, bunch);
}
#if DEBUG
Utility.assert(nextstate < s.dfa_states.Count);
#endif
dt.SetDTrans(i, nextstate);
}
#if DEBUG
Utility.assert(s.dtrans_list.Count == dfa.GetLabel());
#endif
#if DEBUG
StringBuilder sb1 = new StringBuilder(Lex.MAXSTR);
sb1.Append("Current count = "+s.dtrans_list.Count+"\n");
for (int i1 = 0; i1 < dt.GetDTransLength(); i1++)
sb1.Append(dt.GetDTrans(i1)+",");
sb1.Append("end\n");
Console.Error.Write(sb1.ToString());
#endif
s.dtrans_list.Add(dt);
}
}
Console.Error.WriteLine("");
}

/*
* Function: free_dfa_states
*/
//private void free_dfa_states()
private static void free_dfa_states(Spec s)
{
s.dfa_states = null;
s.dfa_sets = null;
}

/*
* Function: free_nfa_states
*/
private static void free_nfa_states(Spec s)
{
/* UNDONE: Remove references to nfas from within dfas. */
/* UNDONE: Don't free CAccepts. */
s.nfa_states = null;
s.nfa_start = null;
s.state_rules = null;
}

/*
* function: add_to_dstates
* Description: Takes as input a CBunch with details of
* a dfa state that needs to be created.
* 1) Allocates a new dfa state and saves it in the appropriate Spec list
* 2) Initializes the fields of the dfa state with the information in the CBunch.
* 3) Returns index of new dfa.
*/
private static int add_to_dstates(Spec s, Bunch bunch)
{
Dfa dfa;

#if DEBUG
Utility.assert(null != bunch.GetNFASet());
Utility.assert(null != bunch.GetNFABit());
Utility.assert(null != bunch.GetAccept() || Spec.NONE == bunch.GetAnchor());
#endif

/* Allocate, passing Spec so dfa label can be set. */
dfa = Alloc.NewDfa(s);

/* Initialize fields, including the mark field. */
dfa.SetNFASet(new ArrayList(bunch.GetNFASet()));
dfa.SetNFABit(new BitSet(bunch.GetNFABit()));
dfa.SetAccept(bunch.GetAccept());
dfa.SetAnchor(bunch.GetAnchor());
dfa.ClearMarked();

#if OLD_DUMP_DEBUG
Console.Error.WriteLine("[Created new dfa_state #"+dfa.GetLabel()+"]");
dfa.dump();
#endif

/* Register dfa state using BitSet in spec Hashtable. */
s.dfa_sets[dfa.GetNFABit()] = dfa;

#if OLD_DUMP_DEBUG
Console.Error.Write("Registering set : ");
Print_Set(dfa.GetNFASet());
Console.Error.WriteLine("");
#endif

return dfa.GetLabel();
}

/*
* Function: in_dstates
*/
private static int in_dstates(Spec s, Bunch bunch)
{
Dfa dfa;

#if OLD_DEBUG
Console.Error.Write("Looking for set : ");
Print_Set(bunch.GetNFASet());
bunch.dump();
#endif

Object o = s.dfa_sets[bunch.GetNFABit()];

if (null != o)
{
dfa = (Dfa) o;
#if OLD_DUMP_DEBUG
Console.Error.WriteLine(" FOUND!");
#endif
return dfa.GetLabel();
}

#if OLD_DUMP_DEBUG
Console.Error.WriteLine(" NOT FOUND!");
#endif
return NOT_IN_DSTATES;
}

#if OLD_DUMP_DEBUG
/*
* function: Print_Set
*/
public static void Print_Set(ArrayList nfa_set)
{
int size;
int elem;

size = nfa_set.Count;

if (size == 0)
{
Console.Error.Write("empty ");
}

for (elem = 0; elem < size; ++elem)
{
Nfa nfa = (Nfa) nfa_set[elem];
Console.Error.Write(nfa.GetLabel() + " ");
}
}
#endif
}
}
+ نوشته شده در  دوشنبه پانزدهم بهمن 1386ساعت 10:51  توسط موسی رجبی  | 

خلاصه: ACO یا Ant Colony Oprimization یک راه حل برای مسئله های با فضای حالت بزرگ یا NP است که تقریبا همانند الگوریتمهای Genetic است ولی در عمل نسبت به آن بهتر است. آنچه در ادامه می آید قسمتی از یک مقاله در مورد کاربردهای Data Mining و ACO است. مورچه ها حشره های مستقلی هستند که فعالیت اشتراکی دارند به ظاهر یک از مورچه فعال در یک کلونی مستقل از دیگری فعالیت می کند ولی در واقع کلیه مورچه ها در قالب یک سیستم جهت حل یک مسئله پیچیده با هم همکاری می کنند . مسئله مهم دررابطه مورچه ها و به طور کلی حشرات مسئله وابستگی بقا است. مورچه ها غذا را جستجو می کنند و آن را به شکل مناسب نگهدار و انبار می کنند حل این مسئله نیاز به برنامه ریزی پیشرفته دارد مورچه ها این عملیات را بدون هر گونه کنترل مرکزی و نظارت متمر کز انجام می دهند به همین دلیل به حشرات به طور کلی گروه هوشمند می گویند.

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

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


2- مشخصات و ماهیت الگوریتم های ACO
چنانچه بتوان ساختار مسئله را به صورت یک گراف نمایش داد آنگاه می توان از الگوریتم های ACO برای یافتن کوتاه ترین مسیر در گراف که همانا پاسخ مسئله است استفاده کرد. هر مورچه بصورت تکاملی اقدام به تغییر یا ساخت بخشی از پاسخ مسئله می نماید ، علکرد کلی مورچه ها وابسته به یک تابع احتمالی و یک تابع اکتشافی وابسته به مسئله است. ساختار و ماهیت الگوریتم های ACO  بصورت زیر است 2 :
ایجاد یک متد برای ارزیابی پاسخهای تولید شده . این متد بر اساس ساختار مسئله تعریف می شود.
ارائه یک تابع اکتشافی H) وابسته به مسئله ،این تابع میزان کیفیت item های قابل اضافه کردن به پاسخ مسئله را ارزیابی می کند .
یک روتین جهت بهمگام سازی میزان فرومون مسیرها(P)
ارائه یک تابع احتمالی که به کمک آن بتوان مسیرها را جهت تولید پاسخ جستجو کرد .در این تابع از تابع اکتشافی و میزان فرومون موجود در مسیرها استفاده می شود

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 13:31  توسط موسی رجبی  | 

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


هوش مصنوعي ماهيتاً يك برنامه و يا به‌شكل ساده‌تر يك الگوريتم است. اما هر برنامه يا الگوريتمي باهوش نيست. به‌عنوان مثال برنامه‌اي را در نظر بگيريد كه بازي X – O را پياده‌سازي مي‌كند.

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

O X X
X O
O O


حالات ممكن صفحه را در حين اجراي بازي در نظر بگيريد. اين حالات محدود و قابل پيش‌بيني هستند و تعداد آن‌ها 19683 حالت است (براي محاسبه، براي هر يك از 9 تا خانه جدول مي‌توان سه حالت خالي، X و O را در نظر گرفت پس تعداد كل حالات 9 3 خواهد بود).

مي‌توان برنامه‌اي نوشت كه تمام اين حالات را در نظر مي‌گيرد و در ازاي هر حالت خاص، رفتاري هوشمندانه را انجام مي‌دهد. شايد عدد 9 3 به نظرتان بزرگ بيابيد. اما حقيقت اين است كه با در نظر گرفتن قوانين بازي مي‌توان اين حالات را خلاصه‌تر كرد. نكته‌ي مهم در اين برنامه، محدود بودن حالات ممكن است. به‌همين خاطر مي‌توان برنامه‌اي اين بازي را به گونه‌اي نوشت كه هيچگاه بازنده نباشد. (در نظر بگيريد كه نوشتن چنين برنامه‌اي براي بازي شطرنج تقريباً غيرممكن است).


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


یکی از کاربردهای مهم هوش مصنوعی
در طراحی روبات‌های انسان نمای هوشمند می‌با
شد



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

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

در حقيقت دستورهايي كه كامپيوتر در قالب الگوريتم‌هاي هوش انجام مي‌دهد، چنين معنايي خواهند داشت:

- هوشمندانه رفتار كن.

- استنتاج كن.

- ياد بگير.

- خلاقيت داشته باش.

- يك اشتباه را دوبار تكرار نكن.

- از تجربه‌هايت درس بگير.

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

آن‌چه امروزه در زمينه‌ي هوش مصنوعي بر روي آن كار شده و برنامه‌هاي حاصل از اين فعاليت‌ها، توانسته‌اند تنها جنبه‌هاي محدودي از آن‌چه به آن «هوش» مي‌گوييم را پياده‌سازي كنند.

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


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

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 13:25  توسط موسی رجبی  | 


مقاله




A New Algorithm for Minimum Spanning Tree
 Using Depth-First Search (DFS) In an Undirected Graph

الگوریتمی جدید برای درخت پوشا با کم‌ترین هزینه با استفاده از جستجوی ژرفایی در گراف غیرجهت‌دار

این الگوریتم جدید برای مسأله‌ي درخت پوشا با کم‌ترین هزینه در هر گراف غیر جهت‌دار ارائه شده است. در این الگوریتم از هیچ‌گونه الگوریتم Sort یا صف اولویت (Priority Queue) یا پشته‌ی دودویی (Binary Heap) استفاده نشده است.
این الگوریتم بر پایه‌ی جستجوی ژرفایی (DFS) و حذف سنگین‌ترین یال دیده شده دایره در DFS است. این الگوریتم در بدترین حالت، برای گرافی با راس و  یال زمان  را می‌گیرد (در مورد نماد O در زنگ تفریح مر بوط به پیچیدگی الگوریتم‌ها توضیح داده شده است) که در آن:

 





معرفي


 

مشهورترین الگوریتم‌ها برای حل مسأله‌ي «درخت پوشا با کم‌ترین هزینه»، «الگوریتم کروسکال» (Kruskal) و «الگوریتم پریم» (Prim) می‌باشند. این الگوریتم‌ها یک روش ابتکاری برای بهینه‌سازی ارائه دادند که به آن Greedy Strategy  (یا همان حریصانه كه در زنگ تفریح‌های نوروزی در مورد آن توضیح لازم داده شده است) می‌گویند. در هر مرحله از الگوریتم، یکی از چندین انتخاب‌ها باید ساخته شود.

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

با استفاده از «پشته‌ي فیبوناچی» (Fibonacci Heap) می‌توان سرعت الگوریتم پریم (Prim) را افزایش داد تا در مدت  اجرا شود.

این الگوریتم که ارائه شده (DHEA)، استراتژی مشابهی دارد که از DFS پیروی می‌کند و آن این است که گراف را به‌صورت ژرفایی جستجو می‌کند. هنگامی که دایره دیده شد سنگین‌ترین یال در دایره حذف می‌شود. این فرایند تا زمانی ادامه پیدا می‌کند که جستجوی ژرفایی پایان یابد. این الگوریتم زمان    را می‌گیرد جایی که k تعداد یال‌های بازگشت (Back Edges) در DFS است. بر حسب خصوصیات گراف:

 

در نتيجه این الگوریتم می‌تواند برای گراف‌هایی که اختلاف تعداد رؤوس و یال‌های آن‌ها کوچک است، مناسب باشد.



الگوريتم


 

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


با عرض سلام و خسته نباشید (به مناسبت پایان امتحانات!!) به کاربران گرامی !

دوستان عزیز ،

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

منتظر نظرات شما هستیم !

پیشاپیش از همکاری صمیمانه ی شما سپاس گذاریم !

موفق باشید !

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 13:23  توسط موسی رجبی  | 

مقدمه
یک ساختار درختی درهم عبارت است از ساختاری خود متعادل‌کننده برای جستجوی باینری داده‌ها که برخوردار از قابلیت‌های جدیدی می‌باشد که دسترسی به اطلاعات جدیدا دسترسی یافته را سهولت می‌بخشد.
این ساختار کارهایی مبنایی نظیر Iinsertion، Look-up و حذف زمان صرف شده در را به اجرا در می‌آورد.
«ساختارهای درختی درهم» بهتر از «ساختارهای درختی»، جستجوی اطلاعات دیگر اعمال غیریکنواخت متوالی در زمان نامشخص بودن «الگوی توالی» به اجرا در می آورند. این ساختار را «دانیل اسلیتور» و «رابرت تارجان» ابداع كردند.
تمام کارهای معمول درون یک ساختار درختی جستجوی باینری با یک عمل مبنایی تلفیق می‌شوند که Splaying نام دارد یعنی این‌که یک مؤلفه‌ي معین، درخت را طوری آرایش مجدد می‌دهد که درون ریشه‌ي ساختار قرار بگیرد.
یک راه انجام این‌کار این است که نخست یک جستجو در ساختار درختی برای اطلاعات خواسته شده صورت می‌پذیرد و شکلی از دوران صورت مي‌گيرد تا آن مؤلفه به بالای ساختار آورده شود.
متناوبا یک الگوریتم از پایین به بالا می‌تواند با جستجو تلفیق شده و ساختار درختی را مجددا سازمان‌دهی کند.


مزایا و معایب
 مزايا
«بازده مناسب» این ساختار درختی بستگی دارد به ویژگی خود متعادل کنندگی و در واقع خود بهبوددهندگی آن. بدین‌صورت که نودهایی‌ که بیش‌ترین میزان دسترسی را دارند به ریشه نزدیک‌تر می‌شوند تا با سرعت بیش‌تری بتوان به آن‌ها دست یافت.
این مزیتی است برای تمام نرم‌افزارهایی که با این ساختار ارتباط می‌بایند و به‌خصوص حافظه‌ي Cach کم‌تری مصرف می‌کند.
اما باید توجه داشت برای مواردی که دسترسی به‌صورت «یکپارچه» نمی‌باشد بازده سازه‌ي درختی درهم خیلی «کارامدتر» است.
ساختارهای درختی درهم هم‌چنین از مزیت «ساختار ساده‌تر» نسبت به ساختارهای جستجوی باینری خود متعادل‌کننده‌ي دیگر نظیر: Red-Black یا AVL برخوردارند و «کارامدتر» هستند.
این ساختارها بی‌نیاز از Book Keeping Data می‌باشند از این‌رو «حافظه‌ي کم‌تری» را اشغال می‌كنند. اما سازه‌های دیگر از ویژگی «جبران بدترین زمان ممکن» برخوردارند و در عمل برای «دسترسی یکنواخت» کارامدتر هستند.
به عکس دیگر انواع ساختار‌های درختی خود متعادل‌کننده، این ساختارها با نودهای دربردارنده‌ي «کلیدهای هویت» خوب کار می‌کنند. حتی با کلیدهای هویت، بازده به‌صورت هرزرفته خواهد بود. همه‌ي فعالیت‌های ساختار درختی با نظم نودهای هویت درون ساختار کار می کنند که یک ویژگی مشابه با الگوریتم‌های ترتیب‌دهی پایدار می‌باشد.
می‌توان «نسخه‌ای ماندگار» از ساختار درست کرد که پس از ارتقا بتوان از آن به نسخه‌های قبلی و بعدی دست پیدا کرد.

 معايب
از بدترین مسائل مربوط به الگوریتم ساختار درختی درهم می‌توان به دسترسی متوالی مؤلفه‌های ساختار به ترتیب مرتب شده اشاره نمود. این ویژگی سبب «عدم تعادل ساختاری» می‌شود
علت آن است كه سبب می‌شود در هر نوبت عمل به‌میزان n تعداد دسترسی صورت پذیرد.
دسترسی مجدد منجر به فعال شدن عملی می‌شود که به تعداد  زمان می‌برد تا ساختار را مجددا به تعادل برساند.
«تأخیر فراوانی» در اثر این پروسه صورت می‌پذیرد. اما پژوهش‌های انجام شده‌ نشان داده‌اند که «متعادل‌سازی تصادفی» ساختار درختی می‌تواند جلوی اثر «عدم تعادل» را بگیرد که حاصل آن بازدهی برابر با بازده الگوریتم‌های خود متعادل می‌باشد.

با عرض سلام و خسته نباشید (به مناسبت پایان امتحانات!!) به کاربران گرامی !

دوستان عزیز ،

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

منتظر نظرات شما هستیم !

پیشاپیش از همکاری صمیمانه ی شما سپاس گذاریم !

موفق باشید !

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 13:14  توسط موسی رجبی  | 

روش کروسکل یک روش برای یافتن «درخت مینیمال» است. برای اینکار، همه‌ي اندازه‌ي وزنها را ردیف کرده سپس هرکدام که تولید دور نمیکرد را به مجموعه‌ي «درخت مینیمال» اضافه میکنیم.

یعنی از کاربر، تعداد مشخصی عدد بهعنوان «وزن یالها» میگیریم. سپس با یک روش ساده مثل «روش حبابی»، این اعداد را از کوچک به بزرگ مرتب میکنیم.

آنگاه بسته به اینکه «روش گرافیکی» یا غیر آن باشد ایجاد دور را بهازای اضافه کردن هر «وزن یال» به مجموعه‌ي درخت بررسی میکنیم. اگر تولید دور نکرد آن را اضافه و گرنه حذف میکنیم. این کار را تا پایان همه‌ي وزنها میتوان ادامه داد.
 

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 13:13  توسط موسی رجبی  | 

 اين نوع از الگوريتم مشابه برنامه‌نويسى پويا (Dynamic)، بيش‌تر براى حل مسائل بهينه‌سازى به‌كار مى‌روند. با اين اختلاف كه در برنامه‌سازى پويا از يك رابطه‌ي بازگشتى براى حل زيرمسأله‌ها استفاده مى‌كنند. در روش حريصانه (Greedy)، تقسيم مسأله‌ها به زيرمسأله‌ها انجام نمى‌گيرد و روش تكرارشونده را به‌كار مى‌برند.
در روش حريصانه (Greedy) در هر لحظه، با توجه به عناصر داده‌اى مفروض، عنصرى را كه داراى ويژگى بهترين يا بهينه است (مانند: كوتاه‌ترين مسير، بالاترين ارزش، كم‌ترين سرمايه‌گذارى، بيش‌ترين سود و ...) انتخاب مى‌كنند بدون اين‌كه انتخاب‌هاى قبلى ما بعدى را در نظر بگيرد ولى انتخاب‌هاى بهينه‌ي محلى همواره منجر به راه‌حل بهينه‌ي سراسرى نمى‌شود. اين روش انتخاب، منجر به ارائه يك الگوريتم ساده و كارامد مى‌شود.
تعيين درخت‌هاى پوشالى مينيمم با استفاده از الگوريتم‌هاى «پرايم»، «كراسكال» محاسبه كوتاه‌ترين مسير تك‌منبع با كاربرد الگوريتم «دايجسترا»، مسأله‌ي زمان‌بندى مانند: بهينه‌سازى زمان انتظار و سرويس به كاربران براى دسترسى به ديسك گردان‌ها در يك شبكه‌ي رايانه‌اى، تعيين حداكثر بهره براى مشتريان در يك زمان معين و مسأله‌ي كوله‌پشتى (كسرى، صفر و يك) (Knapsack) با استفاده از روش حريصانه (Greedy) قابل اجرا هستند.

 

مسأله‌ي كوله پشتى

(Knapsack )



الگوريتم‌هاي ژنتيك (Genetic)
 

اخيراً دانشمندان رشته‌ي رايانه از نظريه‌ي تاريخى «داروين» براى حل مسائل علمى پيچيده استفاده مى‌كنند تا بتوانند عمليات هوشمندانه را پيش ببرند. سه عامل اصلى نظريه‌ي «داروين» عبارتند از:


- تنوع

مشخصات والدين متفاوت با يكديگر تركيب شده تا بتوانند موجودى را با خصوصيات برتر به وجود آورند.


- تصادف

عاملى است كه تغييراتى را در موجود فرزند ايجاد مى كند.


- انتخاب

محيط، موجوداتى را گزينش مى كند كه داراى شايستگى بالاترى از لحاظ ادامه حيات و توليد مثل باشند.
 

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

روش انتخاب ژنتيكى در طول ميليون‌ها سال، طبيعتى را پديد آورده كه براساس «اصل بقاى برتر» و «جهش سازنده» قادر به حل پيچيده‌ترين مسائل از جمله: ساختارهاى پروتئينى برپايه‌ي بهترين جانشين «آمينواسيدها» عمل مى‌كند.




با عرض سلام و خسته نباشید (به مناسبت پایان امتحانات!!) به کاربران گرامی !

دوستان عزیز ،

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

منتظر نظرات شما هستیم !

پیشاپیش از همکاری صمیمانه ی شما سپاس گذاریم !

موفق باشید !

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 13:5  توسط موسی رجبی  | 

نماد

 

اگر براي دو تابع  و  داشته باشيم:
 



و

در اين صورت:
 




در حقيقت مجموعه‌ي  اشتراك دو مجموعه ي  و  مي‌باشد.
اين نماد در حقيقت اصلي‌ترين «نماد پيچيدگي الگوريتم»هاست زيرا در حقيقت مي‌توانيم بگوييم اگر:
 



در اين صورت رشد توابع   به يك اندازه است.
براي درك اين مفهوم به توابع زير توجه كنيد
ياداوري - به ياد داشته باشيد كه خيلي وقت‌ها نماد O به‌جاي  به‌كار مي‌رود!

اگر:




باشد در اين‌صورت:

:



                                         
                              
و اگر:



باشد در اين‌صورت:


:



                                                 

مي‌دانيم كه اگر:
 


باشد در اين‌صورت هر دو رابطه‌ي بالا برقرار است.
حال m را براي ماكزيمم  بگيريد در اين‌صورت داريم‌:


:

مفهوم اين رابطه چيست؟ اين رابطه بيان مي‌دارد كه از جايي به بعد  بين ضرايبي از  قرار دارد. در حقيقت نرخ رشد  مشابه  است.

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 13:3  توسط موسی رجبی  | 

نماد


گوييم تابع  عضو مجموعه ي  است اگر ثابت‌هاي مثبت  وجود داشته باشند به‌طوري كه به‌ازاي هر  داشته باشيم:
 



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



و


در اين صورت:




زيرا كافي است كه قرار دهيد:





در اين صورت به ازاي هر   داريم:


 



+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 13:2  توسط موسی رجبی  | 

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

اكنون سال‌ها از ماجرا گذشته است و آن دانش‌اموزان - كه از تعداد مساوي پسر و دختر تشكيل شده‌اند - تصميم به ازدواج گرفته‌اند.

مي‌دانيم ازدواج يك امر «دو طرفه» است و ممكن است پسري، دختري را بيش از ساير دختران براي ازدواج مناسب بداند ولي آن دختر، پسر ديگري را به او ترجيح دهد.

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

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

اين فهرست‌ها را «فهرست علاقمندي» مي‌ناميم.

2 - دخترها و پسرها بايد به‌گونه‌اي ازدواج كنند كه هيچ دو زوجي مانند ( A,A') و (B,B') نباشد و فهرست علاقمندي  A و B' بالاتر از A' باشد و فهرست علاقمندي B' هم بالاتر از B باشد (در چنين صورتي هم A و هم B' يكديگر را به زوج خود ترجيح مي‌دهند و دو ازدواج به طلاق مي‌انجامد).



حال شما پيشنهاد كنيد كه اين‌ها چگونه بايد همسر خود را انتخاب كنند تا شرايط فوق برقرار باشد؟
+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 12:58  توسط موسی رجبی  | 

 

 

مقدمه

امنظور از تحليل پيچيدگي يا كارايي (در اين‌جا منظور «كارايي زماني» است). اين است كه بدانيم از بين دو الگوريتم كه براي حل يك مسأله‌ي خاص طراحي شده‌اند كدام‌يك جواب را سريع‌تر به‌دست خواهد آورد.
دليل چنين كاري نسبتاً واضح است چون اصولاً هدف ما از به‌كار گيري كامپيوترها «سرعت در انجام محاسبات» بوده است. بنابراين «تحليل زماني» الگوريتم‌هايي كه براي حل مسائل طراحي مي‌كنيم ما را در «به‌كارگيري بهتر از ماشين محاسبه‌‌گر ياري خواهد كرد.
صورت مسأله در تحليل الگوريتم‌ها به‌دست آوردن تابعي برحسب اندازه‌ي ورودي براي اندازه‌گيري زمان اجراي الگوريتم مي‌باشد.

 

 

تعريف چند نماد جديد

در طول اين قسمت بد نيست كه صورت مسأله‌ي اصلي را از ياد ببريد! در اين‌جا چند نماد كلي را براساس توابع رياضي تعريف مي كنيم:

يك تابع يك متغيره‌ي   به هر عضو مجموعه‌ي A يك عضو از مجموعه‌ي B را متناظر مي‌كند:
 




توجه كنيد كه هريك از نمادهايي كه در ادامه‌ي اين بخش تعريف مي‌كنيم يك «مجموعه از توابع» را معرف مي‌كنند.

 

 

نماد O

گوييم تابع  عضو مجموعه‌ي  است اگر و تنها اگر ثابت‌هاي مثبت  وجود داشته باشند به‌طوري كه به‌ازاي هر  داشته باشيم:


 

به‌طور مثال اگر  و  باشد در اين صورت:




زيرا اگر قرار دهيم:
 

 



در اين صورت به‌ازاي هر   داريم:
 

 


+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 12:56  توسط موسی رجبی  | 

سؤالي كه در زمينه‌ي علم كامپيوتر وجود دارد اين است كه آيا مي‌توان گفت كامپيوترها توانايي يادگيري هم دارند يا آن‌كه در حقيقت فقط پياده‌سازي يادگرفته‌هاي نويسنده‌ي برنامه‌هاي آن‌ها هستند و برحسب شرايط محيطي خود چيز جديدي نمي‌آموزند؟

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

اما امروزه بعضي برنامه‌ها به‌گونه‌اي طراحي مي‌گردند كه خود كامپيوتر بتواند جزويات كاري خود را تعيين كند و با تغييرات محيطي سازگار گردد.

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

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 12:52  توسط موسی رجبی  | 

بهينه سازي مسائل بروش کلوني مورچه(ACO) :

همانطور که مي دانيم مسئله يافتن کوتاهترين مسير، يک مسئله بهينه سازيست که گاه حل آن بسيار دشوار است و گاه نيز بسيار زمانبر. بعنوان مثال مسئله فروشنده دوره گرد(TSP). در اين مسئله فروشنده دوره گرد بايد از يک شهر شروع کرده، به شهرهاي ديگر برود و سپس به شهر مبدا بازگردد بطوريکه از هر شهر فقط يکبار عبور کند و کوتاهترين مسير را نيز طي کرده باشد. اگر تعداد اين شهرها n باشد در حالت کلي اين مسئله از مرتبه (n-1)! است که براي فقط 21 شهر زمان واقعا زيادي مي برد:

روز1013*7/1 =  S1016*433/2 = ms10*1018*433/2 = !20

با انجام يک الگوريتم برنامه سازي پويا براي اين مسئله ، زمان از مرتبه نمايي بدست مي آيد که آن هم مناسب نيست. البته الگوريتم هاي ديگري نيز ارائه شده ولي هيچ کدام کارايي مناسبي ندارند. ACO الگوريتم کامل و مناسبي براي حل مسئله TSP است.

 

مورچه ها چگونه مي توانند کوتاهترين مسير را پيدا کنند؟

مورچه ها هنگام راه رفتن از خود ردي از ماده شيميايي فرومون(Pheromone) بجاي مي گذارند البته اين ماده بزودي تبخير مي شد ولي در کوتاه مدت بعنوان رد مورچه بر سطح زمين باقي مي ماند. يک رفتار پايه اي ساده در مورچه هاي وجود دارد :

آنها هنگام انتخاب بين دو مسير بصورت احتمالاتي( Statistical)  مسيري را انتخاب مي کنند که فرومون بيشتري داشته باشد يا بعبارت ديگر مورچه هاي بيشتري قبلا از آن عبور کرده باشند. حال دقت کنيد که همين يک تمهيد ساده چگونه منجر به پيدا کردن کوتاهترين مسير خواهد شد :

همانطور که در شکل 1-1 مي بينيم مورچه هاي روي مسير AB در حرکت اند (در دو جهت مخالف) اگر در مسير مورچه ها مانعي قرار ديهم(شکل 2-1) مورچه ها دو راه براي انتخاب کردن دارند. اولين مورچه ازA  مي آيد و بهC  مي رسد، در مسير هيچ فروموني نمي بيند بنابر اين براي مسير چپ و راست احتمال يکسان مي دهد و بطور تصادفي و احتمالاتي مسير CED را انتخاب مي کند. اولين مورچه اي که مورچه اول را دنبال مي کند زودتر از مورچه اولي که از مسير CFD رفته به مقصد مي رسد. مورچه ها در حال برگشت و به مرور زمان يک اثر بيشتر فرومون را روي CED حس مي کنند و آنرا بطور احتمالي و تصادفي ( نه حتما و قطعا)  انتخاب مي کنند. در نهايت مسير CED بعنوان مسير کوتاهتر برگزيده مي شود. در حقيقت چون طول مسير CED کوتاهتر است زمان رفت و برگشت از آن هم کمتر مي شود و در نتيجه مورچه هاي بيشتري نسبت به مسير ديگر آنرا طي خواهند کرد چون فرومون بيشتري در آن وجود دارد.

نکه بسيار با اهميت اين است که هر چند احتمال انتخاب مسير پر فرومون ت توسط مورچه ها بيشتر است ولي اين کماکان احتمال است و قطعيت نيست. يعني اگر مسير CED پرفرومون تر از CFD باشد به هيچ عنوان نمي شود نتيجه گرفت که همه مورچه ها از مسيرCED  عبور خواهند کرد بلکه تنها مي توان گفت که مثلا 90% مورچه ها از مسير کوتاهتر عبور خواهند کرد. اگر فرض کنيم که بجاي اين احتمال قطعيت وجود مي داشت، يعني هر مورچه فقط و فقط مسير پرفرومون تر را انتخاب ميکرد آنگاه اساسا اين روش ممکن نبود به جواب برسد. اگر تصادفا اولين مورچه مسيرCFD(مسير دورتر) را انتخاب مي کرد و ردي از فرومون بر جاي مي گذاشت آنگاه همه مورچه ها بدنبال او حرکت مي کردند و هيچ وقت کوتاهترين مسير يافته نمي شد. بنابراين تصادف و احتمال نقش عمده اي در ACO بر عهده دارند.

نکته ديگر مسئله تبخير شدن فرومون بر جاي گذاشته شده است. برفرض اگر مانع در مسير  AB برداشته شود و فرومون تبخير نشود مورچه ها همان مسير قبلي را طي خواهند کرد. ولي در حقيقت اين طور نيست. تبخير شدن فرومون و احتمال به مورچه ها امکان پيدا کردن مسير کوتاهتر جديد را مي دهند.

 کلونی مورچه 1

1-1

کلونی مورچه2

2-1

 

 کلونی مورچه 3

3-1

 

کلونی مورچه 4

4-1

مزيتهاي ACO :

همانطور که گقته شد «تبخير شدن فرومون» و «احتمال-تصادف» به مورچه ها امکان پيدا کردن کوتاهترين مسير را مي دهند. اين دو ويژگي باعث ايجاد انعطاف در حل هرگونه مسئله بهينه سازي مي شوند. مثلا در گراف شهرهاي مسئله فروشنده دوره گرد، اگر يکي از يالها (يا گره ها) حذف شود الگوريتم اين توانايي را دارد تا به سرعت مسير بهينه را با توجه به شرايط جديد پيدا کند. به اين ترتيب که اگر يال (يا گره اي) حذف شود ديگر لازم نيست که الگوريتم از ابتدا مسئله را حل کند بلکه از جايي که مسئله حل  شده تا محل حذف يال (يا گره) هنوز بهترين مسير را داريم، از اين به بعد مورچه ها مي توانند پس از مدت کوتاهي مسير بهينه(کوتاهترين) را بيابند.

 

کاربردهاي ACO :

از کاربردهاي  ACO مي توان به بهينه کردن هر مسئله اي که نياز به يافتن کوتاهترين مسير دارد ، اشاره نمود :

1.        مسير يابي داخل شهري و بين شهري

2.       مسير يابي بين پست هاي شبکه هاي توزيع برق ولتاژ بالا

3.       مسير يابي شبکه هاي کامپيوتري

 

مسير يابي شبکه هاي کامپيوتري با استفاده از ACO :

در ابتدا مقدمه اي از نحوه مسير يابي در شبکه هاي کامپيوتري را توضيح خواهيم داد :

اطلاعات بر روي شبکه بصورت بسته هاي اطلاعاتي کوچکي (Packet) منتقل مي شوند. هر يک از اين بسته ها بر روي شبکه در طي مسير از مبدا تا مقصد بايد از گره هاي زيادي که مسيرياب (Router) نام دارند عبور مي کنند. در داخل هر مسيرياب جدولي قرار دارد تا بهترين و کوتاهترين مسير بعدي تا مقصد از طريق آن مشخص مي شود، بنابر اين بسته هاي اطلاعاتي حين گذر از مسيرياب ها با توجه به محتويات اين جداول عبور داده مي شوند.

روشي بنام ACR : Ant Colony Routering پيشنهاد شده که بر اساس ايده کلوني مورچه به بهينه سازي جداول مي پردازيد و در واقع به هر مسيري با توجه به بهينگي آن امتياز مي دهد. استفاده از ACR به اين منظور داراي برتري نسبت به ساير روش هاست که با طبيعت ديناميک شبکه سازگاري دارد، زيرا به عنوان مثال ممکن است مسيري پر ترافيک شود يا حتي مسير يابي (Router) از کار افتاده باشد و بدليل انعطاف پذيري که ACO در برابر اين تغييرات دارد همواره بهترين راه حل بعدي را در دسترس قرار مي دهد.

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 12:7  توسط موسی رجبی  | 

مقدمه :

انسان هميشه براي الهام گرفتن به جهان زنده پيرامون خود نگريسته است. يکي از بهترين طرح هاي شناخته شده، طرح پرواز انسان است که ابتدا لئورناردو داوينچي(1519-1452) طرحي از يک ماشين پرنده را بر اساس ساختمان بدن خفاش رسم نمود. چهار صد سال بعد کلمان آدر ماشين پرنده اي ساخت که داراي موتور بود و بجاي بال از ملخ استفاده مي کرد.

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

الگوريتم کلوني مورچه براي اولين بار توسط دوريگو (Dorigo) و همکارانش به عنوان يک راه حل چند عامله (Multi Agent) براي مسائل مشکل بهينه سازي مثل فروشنده دوره گرد     (TSP :Traveling Sales Person) ارائه شد.

عامل هوشند(Intelligent Agent) موجودي است که از طريق حسگر ها قادر به درک پيرامون خود بوده و از طريق تاثير گذارنده ها مي تواند روي محيط تاثير بگذارد.

الگوريتم کلوني مورچه الهام گرفته شده از مطالعات و مشاهدات روي کلوني مورچه هاست. اين مطالعات نشان داده که مورچه ها حشراتي اجتماعي هستند که در کلوني ها زندگي مي کنند و رفتار آنها بيشتر در جهت بقاء کلوني است تا درجهت بقاء يک جزء از آن. يکي از مهمترين و جالبترين رفتار مورچه ها، رفتار آنها براي يافتن غذا است و بويژه چگونگي پيدا کردن کوتاهترين مسير ميان منابع غذايي و آشيانه. اين نوع رفتار مورچه ها داراي نوعي هوشمندي توده اي  است که اخيرا مورد توجه دانشمندان قرار گرفته است.بايد تفاوت هوشمندي توده اي(کلوني) و هوشمندي اجتماعي را روشن کنيم.

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

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

جهت علاقه مند شدن شما به اين رفتار موريانه ها وتفاوت هوشمندي توده اي و اجتماعي توضيحاتي را ارائه مي دهم :

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

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

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 12:6  توسط موسی رجبی  | 

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

الگوریتمهای ژنتیک معمولاً به عنوان یک شبیه‌ساز کامپیوتر که در آن جمعیت یک  نمونهٔ انتزاعی (کروموزوم ها) از نامزدهای راه‌حل یک مسأله بهینه‌سازی به راه حل بهتری منجر شود، پیاده‌سازی می‌شوند.همانطور که قبلا گفتیم، به طور سنتی  راه‌حل ها به شکل رشته‌هایی از ۰ و ۱ بودند، اما امروزه به گونه‌های    دیگری هم پیاده‌سازی شده‌اند. فرضيه با جمعيتي كاملاً تصادفي منحصر بفرد آغاز می‌‌شود و  در نسل ها ادامه می‌‌يابد. در هر نسل گنجايش تمام جمعيت ارزيابي می‌‌شود،  چندين فرد منحصر در فرايندي تصادفي از نسل جاري انتخاب می‌‌شوند    (بر اساس  شايستگي ها) و براي شكل دادن نسل جديد، اصلاح می‌‌شوند (كسر   يا دوباره تركيب می‌‌شوند) و در تكرار بعدي الگوريتم به نسل جاري تبديل می‌‌شود.

عملگر های یک GA

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

معرفی الگوریتم ژنتیک : یکی از روشهای تصادفی بهینه یابی است, توسط جان  هالند در سال 1967 ابداع شده است. الگوریتم های ژنتیک یک گروه از الگوریتم های  تصادفی هستند که از تکامل طبیعی در سیستم های بیولوژیک الهام گرفته شده اند. این نوع الگوریتم اولین بار در اواسط دهه ی هفتاد توسط جان هلند معرفی شدند. از  زمان معرفی این نوع الگوریتم ها در زمینه های متنوعی چون مهندسی ، اقتصاد ، بیولوژی و علوم کامپیوتر بکار گرفته شده اند.  بعدها این روش با تلاشهای گلدبرگ 1989, گسترش یافته و امروزه نیز بواسطه توانایی های خویش , جای مناسبی در میان دیگر روشها دارد. فرایند بهینه یابی در الگوریتم ژنتیک براساس یک روند تصادفی- هدایت شده استوار می باشد. این روش , بر مبنای نظریه تکامل تدریجی و ایده های بنیادین داروین  پایه گذاری شده است.در این روش , ابتدا برای تعدادی ثابت که جمعیت نامیده می شود مجموعه ای از پارامترهای هدف بصورت اتفاقی تولید می شود ,  پس از اجرای برنامه شبیه ساز عددی را که معرف انحراف معیار و یا برازش آن مجموعه از اطلاعات است را به آن عضو از جمعیت مذکور نسبت می دهیم .

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

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

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

بصورت متداول سه معیار بعنوان معیار توقف شمرده می شود: I. زمان اجرای الگوریتم  II. تعداد نسلهایی که ایجاد می شوند III. همگرایی معیار خطا

زمانبندی با کمک الگوریتم ژنتیک و مسایل بهینه سازی: مثلا یکی از مثایلی   که در این زمینه می شه مطرح کرد : زمانبندی حضور 5  مهندس در کارخانه به اینصورت که هر کدام از اونها مثلا 3 روز در هفته حضور دارن و این کارخونه 3 قسمت داره که همیشه باید فعال باشه. راههای ممکن را چطوری می شه     بدست اورد؟  در حل مسایل الگوریتم ژنتیک راه حل های اولیه تصادفی به دست    می یان وراه حل های بعدی از پیوند این راه حل ها  حاصل می شن. برای هر  کدام از جواب های  اولیه تابع مناسب را حساب می کنیم .سپس بعضی از این جواب ها را تصادفی انتخاب  می کنیم (البته با توجه به تابع مناسب)و....که البته توضیح های کامل تری در  زمینه زمانبندی در لینک زیر وجود دارد . اطلا عات http://www.sapco.ir/Departments/IT/ECommerce/conference/10.PDF    درزمینه مدل الگوریتم ژنتیک برای مساله تخصیص منابع محدود چند  معیاره فازی   فکر می کنم خیلی مفید باشه .

+ نوشته شده در  یکشنبه چهاردهم بهمن 1386ساعت 12:0  توسط موسی رجبی  | 

مطالب جدیدتر