بایگانی برچسب برای: ;kjvg jvnn

گذری بر سیستم‌های خبره‌ (Expert Systems)

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

سیستم خبره چیست؟

در یك تعریف كلی می‌توان گفت سیستم‌های خبره، برنامه‌های كامپیوتری‌ای هستند كه نحوه تفكر یك متخصص در یك زمینه خاص را شبیه‌سازی می‌كنند. در واقع این نرم‌افزارها، الگوهای منطقی‌ای را كه یك متخصص بر اساس آن‌ها تصمیم‌گیری می‌كند، شناسایی می‌نمایند و سپس بر اساس آن الگوها، مانند انسان‌ها تصمیم‌گیری می‌كنند.
یكی از اهداف هوش مصنوعی، فهم هوش انسانی با شبیه‌سازی آن توسط برنامه‌های كامپیوتری است. البته بدیهی است كه “هوش‌”‌ را می‌توان به بسیاری از مهارت‌های مبتنی بر فهم، از جمله توانایی تصمیم‌گیری، یادگیری و فهم زبان تعمیم داد و از این‌رو واژه‌ای كلی محسوب می‌شود.
بیشتر دستاوردهای هوش مصنوعی در زمینه تصمیم‌گیری و حل مسئله بوده است كه اصلی‌ترین موضوع سیستم‌های خبره را شامل می‌شوند. به آن نوع از برنامه‌های هوش مصنوعی كه به سطحی از خبرگی می‌رسند كه می‌توانند به جای یك متخصص در یك زمینه خاص تصمیم‌گیری كنند، expert systems یا سیستم‌های خبره گفته می‌شود. این سیستم‌ها برنامه‌هایی هستند كه پایگاه دانش آن‌ها انباشته از اطلاعاتی است كه انسان‌ها هنگام تصمیم‌گیری درباره یك موضوع خاص، براساس آن‌ها تصمیم می‌گیرند. روی این موضوع باید تأكید كرد كه هیچ‌یك از سیستم‌های خبره‌ای كه تا‌كنون طراحی و برنامه‌نویسی شده‌اند، همه‌منظوره نبوده‌اند و تنها در یك زمینه محدود قادر به شبیه‌سازی فرآیند تصمیم‌گیری انسان هستند.
به محدوده اطلاعاتی از الگوهای خبرگی انسان كه به یك سیستم خبره منتقل می‌شود، task domain گفته می‌شود. این محدوده، سطح خبرگی یك  سیستم خبره را مشخص می‌كند و نشان می‌دهد ‌كه آن سیستم خبره برای چه كارهایی طراحی شده است. سیستم خبره با این task ها یا وظایف می‌تواند كارهایی چون برنامه‌ریزی، زمانبندی، و طراحی را در یك حیطه تعریف شده انجام دهد.
به روند ساخت یك سیستم خبره، knowledge engineering یا مهندسی دانش گفته می‌شود. یك مهندس دانش باید اطمینان حاصل كند كه سیستم خبره طراحی شده، تمام دانش مورد نیاز برای حل یك مسئله را دارد. طبیعتاً در غیراین‌صورت، تصمیم‌های سیستم خبره قابل اطمینان نخواهند بود.

ساختار یك سیستم خبره‌

هر سیستم خبره از دو بخش مجزا ساخته شده است: پایگاه دانش و موتور تصمیم‌گیری.
پایگاه دانش یك سیستم خبره از هر دو نوع دانش مبتنی بر حقایق ‌(factual) و نیز دانش غیرقطعی (heuristic)  استفاده می‌كند. Factual knowledge، دانش حقیقی یا قطعی نوعی از دانش است كه می‌توان آن را در حیطه‌های مختلف به اشتراك گذاشت و تعمیم داد؛ چراكه درستی آن قطعی است.
در سوی دیگر، Heuristic knowledge قرار دارد كه غیرقطعی‌تر و بیشتر مبتنی بر برداشت‌های شخصی است. هرچه حدس‌ها یا دانش هیورستیك یك سیستم خبره بهتر باشد، سطح خبرگی آن بیشتر خواهد بود و در شرایط ویژه، تصمیمات بهتری اتخاذ خواهد كرد.
دانش مبتنی بر ساختار Heuristic در سیستم‌های خبره اهمیت زیادی دارد این نوع دانش می‌تواند به تسریع فرآیند حل یك مسئله كمك كند. البته یك مشكل عمده در ارتباط با به كارگیری دانشHeuristic آن است كه نمی‌توان در حل همه مسائل از این نوع دانش استفاده كرد. به عنوان نمونه جلوگیری از حمل سموم خطرناك از طریق خطوط هوایی با استفاده از روش Heuristic امكانپذیر نیست.
اطلاعات این بخش از سیستم خبره از طریق مصاحبه با افراد متخصص در این زمینه تامین می‌شود. مهندس دانش یا مصاحبه‌كننده، پس از سازمان‌دهی اطلاعات جمع‌آوری‌شده از متخصصان یا مصاحبه شوندگان، آ‌ن‌ها را به قوانین قابل فهم برای كامپیوتر به صورت (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 به ایجاد برنامه‌های ویژه كنترل هوشمندانه و سیستم‌های مانیتورینگ خطایاب می‌پردازد. این فناوری را می‌توان هم در سیستم‌های لینوكسی و هم در سیستم‌های سرور مبتنی بر ویندوز مورد استفاده قرار داد.
آنچه در نهایت می‌توان گفت آن است كه یكی از مزیت‌های سیستم‌های خبره این است كه می‌توانند در كنار متخصصان انسانی مورد استفاده قرار بگیرند كه ماحصل آن تصمیمی مبتنی بر تخصص انسانی و دقت ماشینی است. این فناوری از دید تجاری نیز برای توسعه‌دهندگان آن سودآور است.
هم‌اكنون شركت‌های بسیاری به فروش سیستم‌های خبره و پشتیبانی از مشتریان محصولات خود می‌پردازند. درآمد یك شركت كوچك فعال در زمینه فروش چنین محصولاتی می‌تواند سالانه بالغ بر پنج تا بیست میلیون دلار باشد. بازار فروش و پشتیبانی سیستم‌های خبره در سراسر جهان نیز سالانه به صدها میلیون دلار می‌رسد.

خبرگی

خبرگی(Expertise) دانشی است تخصصی که برای رسیدن به آن نیاز به مطالعه مفاهیم تخصصی یا دوره‌های ویژه وجود دارد.

سیستم‌های خبره

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

نکته

سیستم‌های خبره برا حل مسائلی بکار می‌روند که:1. الگوریتم خاصی برا حل آن مسائل وجود ندارند.

2. دانش صریح برای حل آن مسائل وجود دارد.

بنابراین اگر سیستمی با استفاده از روش‌های علم آماراقدام به پیش‌بینی دمای‌هوای فردا کند، در حوزه سیستم‌های خبره قرار نمی‌‌گیرد.اما اگر سیستمی بااستفاده از این قاعده که«در این فصل سال دمای‌هوا معمولا ثابت می‌باشد» و این واقعیت که «دمای امروز 25 درجه سانتی گراد می‌باشد» به این نتیجه دست یابد که «دمای فردا 25 درجه خواهد بود» در حوزه سیستم‌های خبره قرا خواهد گرفت.

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

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

بیان خبرگی در قالب دانش یا بازنمایی دانش

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

اجزای اصلی سیستم خبره

یک سیستم خبره دارای اجزای زیر می‌باشد:

پایگاه دانش

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

به کسی که دانش خبره را کد کرده و وارد پایگاه دانش می‌کند مهندس دانش (Knowledge engineer) گفته می‌شود.

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

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

موتور استنتاج

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

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

حافظه کاری

حافظه‌ای برای ذخیره پاسخ سوال‌های مربوط به سیستم می‌باشد.

امکانات کسب دانش

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

امکانات توضیح

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

اگر د ارتباط با سیستم سوال و جوابهایی مطرح شود و سیستم به ما یک سری راهکار پیشنهاد کند و توضیحی در زمینه اینکه چرا چنین سوالی پرسیده می‌شود؟(Why) و چگونه به این نتیجه رسیده‌ایم؟(How) را در ناحیه‌ای ذخیره نماییم، امکانات توضیح را تشکیل می‌دهد.

بخش ارتباط با کاربر

مربوط به بخشی است که بطور مستقیم با کاربر در ارتباط است.

کاربردهای سیستم های خبره

1- جایگزینی برای فرد خبره(سیستم اینترنتی در زمینه مشاور محصولات یک شرکت)

  • تداوم کار در صورت عدم دسترسی به فرد خبره
  • کاهش هزینه
  • احساساتی نبودن سیستم و خستگی ناپذیری آن

2- کمک و دستیار( برنامه‌های MS Project یا Autocad یا Pspicee برنامه‌هایی هستند که دانشی برای انجام عملیاتی برای کمک به افرادی خاص را دارند)

سیستم خبره قسمت 1
سیستم خبره قسمت 2
سیستم خبره قسمت 3
سیستم خبره قسمت 4
سیستم خبره قسمت 5
سیستم خبره قسمت 6

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

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

مقدمه

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

البته همیشه هم قوی‌ترین‌ها برنده نبوده‌اند. مثلاً دایناسورها با وجود جثه عظیم و قوی‌تر بودن در طی روندی کاملاً طبیعی بازیِ بقا و ادامه نسل را واگذار کردند در حالی که موجوداتی بسیار ضعیف‌تر از آنها حیات خویش را ادامه دادند. ظاهراً طبیعت، بهترین‌ها را تنها بر اساس هیکل انتخاب نمی‌کند! در واقع درست‌تر آنست که بگوییم طبیعت مناسب ترین‌ها (Fittest) را انتخاب می‌کند نه بهترین‌ها.

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

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

الف) معرفی جواب‌های مسئله به عنوان کروموزوم

ب) معرفی تابع برازندگی (فیت نس)

ج) جمع‌آوری اولین جمعیت

د) معرفی عملگرهای انتخاب

ه) معرفی عملگرهای تولید مثل

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

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

بدین ترتیب می‌توان دید که طبیعت با بهره‌گیری از یک روش بسیار ساده (حذف تدریجی گونه‌های نامناسب و در عین حال تکثیر بالاتر گونه‌های بهینه)، توانسته‌است دائماً هر نسل را از لحاظ خصوصیات مختلف ارتقاء بخشد.

البته آنچه در بالا ذکر شد به تنهایی توصیف کننده آنچه واقعاً در قالب تکامل در طبیعت اتفاق می‌افتد نیست. بهینه‌سازی و تکامل تدریجی به خودی خود نمی‌تواند طبیعت را در دسترسی به بهترین نمونه‌ها یاری دهد. اجازه دهید تا این مسئله را با یک مثال شرح دهیم:

پس از اختراع اتومبیل به تدریج و در طی سال‌ها اتومبیل‌های بهتری با سرعت‌های بالاتر و قابلیت‌های بیشتر نسبت به نمونه‌های اولیه تولید شدند. طبیعیست که این نمونه‌های متأخر حاصل تلاش مهندسان طراح جهت بهینه‌سازی طراحی‌های قبلی بوده‌اند. اما دقت کنید که بهینه‌سازی یک اتومبیل، تنها یک «اتومبیل بهتر» را نتیجه می‌دهد.

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

پاسخ اینست که گرچه اختراع هواپیما قطعاً تحت تأثیر دستاوردهای‌های صنعت اتومبیل بوده‌است؛ اما به هیچ وجه نمی‌توان گفت که هواپیما صرفاً حاصل بهینه‌سازی اتومبیل یا فضاپیما حاصل بهینه‌سازی هواپیماست. در طبیعت هم عیناً همین روند حکم‌فرماست. گونه‌های متکامل‌تری وجود دارند که نمی‌توان گفت صرفاً حاصل تکامل تدریجی گونه قبلی هستند.

در این میان آنچه شاید بتواند تا حدودی ما را در فهم این مسئله یاری کند مفهومیست به نام تصادف یا جهش.

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

در واقع می‌توان تکامل طبیعی را به این‌صورت خلاصه کرد: جستجوی کورکورانه (تصادف یا Blind Search) + بقای قوی‌تر.

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

روش‌های کلاسیک ریاضیات دارای دو اشکال اساسی هستند. اغلب این روش‌ها نقطه بهینه محلی (Local Optima) را بعنوان نقطه بهینه کلی در نظر می‌گیرند و نیز هر یک از این روش‌ها تنها برای مسئله خاصی کاربرد دارند. این دو نکته را با مثال‌های ساده‌ای روشن می‌کنیم.

به شکل زیر توجه کنید. این منحنی دارای دو نقطه ماکزیمم می‌باشد؛ که یکی از آنها تنها ماکزیمم محلی است. حال اگر از روش‌های بهینه‌سازی ریاضی استفاده کنیم مجبوریم تا در یک بازه بسیار کوچک مقدار ماکزیمم تابع را بیابیم. مثلاً از نقطه ۱ شروع کنیم و تابع را ماکزیمم کنیم. بدیهی است اگر از نقطه ۱ شروع کنیم تنها به مقدار ماکزیمم محلی دست خواهیم یافت و الگوریتم ما پس از آن متوقف خواهد شد. اما در روش‌های هوشمند، به ویژه الگوریتم ژنتیک به دلیل خصلت تصادفی آنها حتی اگر هم از نقطه ۱ شروع کنیم باز ممکن است در میان راه نقطه A به صورت تصادفی انتخاب شود که در این صورت ما شانس دست‌یابی به نقطه بهینه کلی (Global Optima) را خواهیم داشت.

بهینه محلی و بهینه کلی

 

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

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

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

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

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

برای هر فرد، یک جفت والد انتخاب می‌شود. انتخاب‌ها به گونه‌ای‌اند که مناسبترین عناصر انتخاب شوند تا حتی ضعیفترین عناصر هم شانس انتخاب داشته باشند تا از نزدیک شدن به جواب محلی جلوگیری شود. چندین الگوی انتخاب وجود دارد: چرخ منگنه‌دار (رولت)، انتخاب مسابقه‌ای (Tournament) ،… .

معمولاً الگوریتم‌های ژنتیک یک عدد احتمال اتصال دارد که بین ۰٫۶ و ۱ است که احتمال به وجود آمدن فرزند را نشان می‌دهد. ارگانیسم‌ها با این احتمال دوباره با هم ترکیب می‌شوند. اتصال ۲ کروموزوم فرزند ایجاد می‌کند، که به نسل بعدی اضافه می‌شوند. این کارها انجام می‌شوند تا این که کاندیدهای مناسبی برای جواب، در نسل بعدی پیدا شوند. مرحله بعدی تغییر دادن فرزندان جدید است. الگوریتم‌های ژنتیک یک احتمال تغییر کوچک و ثابت دارند که معمولاً درجه‌ای در حدود ۰٫۰۱ یا کمتر دارد. بر اساس این احتمال، کروموزوم‌های فرزند به طور تصادفی تغییر می‌کنند یا جهش می‌یابند، مخصوصاً با جهش بیت‌ها در کروموزوم ساختمان داده‌مان.

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

شرایط خاتمه الگوریتم‌های ژنتیک عبارتند از:

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

روش‌های نمایش

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

خاصیت هر سه روش این است که آنها تعریف سازنده‌ای را که تغییرات تصادفی در آنها ایجاد می‌کنند را آسان می‌کنند: ۰ را به ۱ و برعکس، اضافه یا کم کردن ارزش یک عدد یا تبدیل یک به صفر یا برعکس. یک روش دیگر که توسط John Koza توسعه یافت، برنامه‌نویسی ژنتیک است؛ که برنامه‌ها را به عنوان شاخه‌های داده در ساختار درخت نشان می‌دهد. در این روش تغییرات تصادفی می‌توانند با عوض کردن عملگرها یا تغییر دادن ارزش یک گره داده شده در درخت، یا عوض کردن یک زیر درخت با دیگری به وجود آیند.

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

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

شبه کد

 1 Genetic Algorithm
 2 begin
 3 Choose initial population
 4 repeat
 5 Evaluate the individual fitness of a certain proportion of the population
 6 Select pairs of best-ranking individuals to reproduce
 7 Apply crossover operator
 8 Apply mutation operator
 9 until terminating condition
10 end

شمای کلی شبه کد شمای کلی شبه کد

 

ایده اصلی

در دهه هفتاد میلادی دانشمندی از دانشگاه میشیگان به نام جان هلند ایده استفاده از الگوریتم ژنتیک را در بهینه‌سازی‌های مهندسی مطرح کرد. ایده اساسی این الگوریتم انتقال خصوصیات موروثی توسط ژن‌هاست. فرض کنید مجموعه خصوصیات انسان توسط کروموزوم‌های او به نسل بعدی منتقل می‌شوند. هر ژن در این کروموزوم‌ها نماینده یک خصوصیت است. بعنوان مثال ژن ۱ می‌تواند رنگ چشم باشد، ژن ۲ طول قد، ژن ۳ رنگ مو و الی آخر. حال اگر این کروموزوم به تمامی، به نسل بعد انتقال یابد، تمامی خصوصیات نسل بعدی شبیه به خصوصیات نسل قبل خواهد بود. بدیهیست که در عمل چنین اتفاقی رخ نمی‌دهد. در واقع بصورت همزمان دو اتفاق برای کروموزوم‌ها می‌افتد. اتفاق اول جهش (Mutation) است.

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

روش‌های انتخاب

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

انتخاب Elitist

مناسب‌ترین عضو هر اجتماع انتخاب می‌شود.

انتخاب Roulette

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

انتخاب Scaling

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

انتخاب Tournament

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

بعضی از روش‌های دیگر عبارتند از:

  • Hierarchical Selection
  • Steady-State Selection
  • Rank Selection

مثال عملی

در این مثال می‌خواهیم مسئلهٔ ۸ وزیر را بوسیلهٔ این الگوریتم حل کنیم. هدف مشخص کردن چیدمانی از ۸ وزیر در صفحهٔ شطرنج است به نحوی که هیچ‌یک همدیگر را تهدید نکند. ابتدا باید نسل اولیه را تولید کنیم. صفحه شطرنج ۸ در ۸ را در نظر بگیرید. ستونها را با اعداد ۰ تا ۷ و سطرها را هم از ۰ تا ۷ مشخص می‌کنیم. برای تولید حالات (کروموزومها) اولیه بصورت تصادفی وزیرها را در ستونهای مختلف قرار می‌دهیم. باید در نظر داشت که وجود نسل اولیه با شرایط بهتر سرعت رسیدن به جواب را افزایش می‌دهد (اصالت نژاد) به همین خاطر وزیر i ام را در خانهٔ تصادفی در ستون i ام قرار می‌دهیم (به جای اینکه هر مهره‌ای بتواند در هر خانه خالی قرار بگیرد). با اینکار حداقل از برخورد ستونی وزیرها جلوگیری می‌شود.

توضیح بیشتر اینکه مثلاً وزیر اول را بطور تصادفی درخانه‌های ستون اول که با ۰ مشخص شده قرار می‌دهیم تا به آخر. i=۰٬۱، … ۷ حال باید این حالت را به نحوی کمی مدل کرد. چون در هر ستون یک وزیر قرار دادیم هر حالت را بوسیلهٔ رشته اعدادی که عدد k ام در این رشته شمارهٔ سطر وزیر موجود در ستون i ام را نشان می‌دهد. یعنی یک حالت که انتخاب کردیم می‌تواند بصورت زیر باشد: ۶۷۲۰۳۴۲۲ که ۶ شمارهٔ سطر ۶ است که وزیر اول که شمارهٔ ستونش ۰ است می‌باشد تا آخر. فرض کنید ۴ حالت زیر به تصادف تولید شده‌اند. این چهار حالت را بعنوان کروموزومهای اولیه بکار می‌گیریم.

  1. ) ۶۷۲۰۳۴۲۰
  2. ) ۷۰۰۶۳۳۵۴
  3. ) ۱۷۵۲۲۰۶۳
  4. )۴۳۶۰۲۴۷۱

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

  1. )۶۷۲۰۳۴۲۰ ← ۶
  2. )۷۰۰۶۳۳۵۴ ← ۸
  3. )۱۷۵۲۲۰۶۳ ← ۲
  4. )۴۳۶۰۲۴۷۱ ← ۴

پس احتمالها بصورت زیر است:

{\displaystyle p(3)>p(4)>p(1)>p(2)}

در اینجا کروموزومهایی را انتخاب می‌کنیم که برازندگی کمتری دارند. پس کروموزوم ۳ برای crossover با کروموزومهای ۴ و ۱ انتخاب می‌شود. نقطهٔ ترکیب را بین ارقام ۶ و ۷ در نظر می‌گیریم.

۴ و ۳:

  1. )۱۷۵۲۲۰۷۱
  2. )۴۳۶۰۲۴۶۳

۱ و ۳:

  1. )۱۷۵۲۲۰۲۰
  2. )۶۷۲۰۳۴۶۳

حال نوبت به جهش می‌رسد. در جهش باید یکی از ژن‌ها تغییر کند.

فرض کنید از بین کروموزومهای ۵ تا ۸ کروموزوم شمارهٔ ۷ و از بین ژن چهارم از ۲ به ۳ جهش یابد. پس نسل ما شامل کروموزومهای زیر با امتیازات نشان داده شده می‌باشد: (امتیازات تعداد برخوردها می‌باشد)

  1. )۶۷۲۰۳۴۲۰ ← ۶
  2. )۷۰۰۶۳۳۵۴ ← ۸
  3. )۱۷۵۲۲۰۶۳ ← ۲
  4. )۴۳۶۰۲۴۷۱ ← ۴
  5. )۱۷۵۲۲۰۷۱ ← ۶
  6. )۴۳۶۰۲۴۶۳ ← ۴
  7. )۱۷۵۳۲۰۲۰ ← ۴
  8. )۶۷۲۰۳۴۶۳ ← ۵

کروموزوم ۳ کاندیدای خوبی برای ترکیب با ۶ و ۷ می‌باشد. (فرض در این مرحله جهشی صورت نگیرد و نقطهٔ اتصال بین ژنهای ۱ و ۲ باشد)

  1. )۶۷۲۰۳۴۲۰ ← ۶
  2. )۷۰۰۶۳۳۵۴ ← ۸
  3. )۱۷۵۲۲۰۶۳ ← ۲
  4. )۴۳۶۰۲۴۷۱ ← ۴
  5. )۱۷۵۲۲۰۷۱ ← ۶
  6. )۴۳۶۰۲۴۶۳ ← ۴
  7. )۱۷۵۳۲۰۳۰ ← ۴
  8. )۶۷۲۰۳۴۶۳ ← ۵
  9. )۱۳۶۰۲۴۶۳ ← ۲
  10. )۴۷۵۲۲۰۶۳ ← ۲
  11. )۱۷۵۲۲۰۲۰ ← ۴
  12. )۱۷۵۲۲۰۶۳ ← ۲

کروموزومهای از ۹ تا ۱۲ را نسل جدید می‌گوییم. بطور مشخص کروموزوم‌های تولید شده در نسل جدید به جواب مسئله نزدیکتر شده‌اند. با ادامهٔ همین روند پس از چند مرحله به جواب مورد نظر خواهیم رسید.

نحوهٔ اجرای الگوریتم ژنتیکی

الگوریتم ژنتیک قسمت 1
الگوریتم ژنتیک قسمت 2

چکیده

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

مقدمه

Steganography در یونانی به معنای پوشیده شده یا نوشتن مخفیانه است. هدف  steganography این است که پیغامی را در یک پیغام دیگر ِ بی خطر به روشی ذخیره کند که دشمن پی به وجود پیغام اولی در پیغام دوم نبرد. جوهر های نامرئی یکی از عمومی ترین ابزارها برای steganography هستند استگانوگرافی موضوعی است که به ندرت از طریق هواخواهان امنیتی فناوری اطلاعات مورد توجه قرار گرفته است. در حقیقت  پنهان نگاری (نهان نگاری) پروسه ای است که در طی آن یک داده را در دیگر شکل های دیگر داده ای مثل فایل های عکس یا متن مخفی می کنند. معروف ترین و رایج ترین متد مخفی کردن داده در فایلها بکارگیری تصاویر گرافیکی به عنوان مکان‌هایی مخفی می باشد.

تاریخچه

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

استگانوگرافی چیست؟

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

تفاوت پنهان نگاری(steganogrphy) و رمزنگاری(Cryptography)

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

شمای کلی استگانوگرافی

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

انواع مختلف استگانوگرافی

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

تشریح تکنیک هایSteganography

فرمول کلی برای تابع Steganography این چنین است: شی ای که قراراست اطلاعات در آن نگهداری شود + اطلاعاتی که باید مخفی شوند + الگوریتم مورد نظر = شی مورد نظر که اطلاعات در آن مخفی شده اند. فایلی که برای مخفی کردن اطلاعات به کار می رود، می تواند یک تصویر، فایل صوتی و یا یک فایل ویدئویی باشد. درعین حال دو روش معمول برای Steganography وجود دارد که عبارتند از : Injection,LSB.

LSB‎ : وقتی فایلی ساخته می شود،‌ معمولاً بعضی از بایت های آن یا قابل استفاده نیستند و یا کم اهمیت هستند. این بایت ها می توانند تغییرداده شوند، بدون اینکه لطمه قابل توجهی به فایل وارد شود. این خاصیت کمک می کند تا بتوان اطلاعاتی را در این بایت ها قرار داد، بدون اینکه کسی متوجه این موضوع گردد. روش LSB بر روی فایل های تصویری که دارای رزولوشن وتعداد رنگ های بالایی است و بر روی فایل های صوتی که دارای تعداد زیادی صدای مختلف است، ‌به خوبی کارمی کند. ضمناً این روش حجم فایل را افزایش نمی دهد.

Injection‎ : روشی ساده است که برمبنای آن، ‌اطلاعاتی که قراراست مخفی شوند را در یک فایل تزریق می کنند. مهمترین مسأله در این روش،‌ افزایش حجم فایل است

Steganography در فرمت های مختلف:

Steganography در تصاویر

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

Steganography درصوت

برای این منظور نیز از روشی مشابه روش LSB استفاده می کنند. البته مشکل استفاده از بیت های کم ارزش در یک فایل صوتی، این است که تغییرات در این بیت ها نیز برای گوش انسان قابل تشخیص است . در حقیقت Spread Spectrum روش دیگری برای مخفی نمودن اطلاعات در یک فایل صوتی است. دراین روش، یک نویز به طور تصادفی در سراسر فایل پخش می شود و اطلاعات در کنار این نویزها قرارداده می شوند. Echo data hiding نیز روش دیگری برای مخفی نمودن اطلاعات در یک فایل صوتی است. این روش از اکو (پژواک) در فایل استفاده می کند تا بتواند اطلاعات را مخفی نماید. دراین وضعیت با اضافه کردن صداهای اضافی به بخش های اکو، می توان اطلاعات را در این قسمت ها مخفی نمود.

Steganography در ویدئو

برای این کار ، معمولاً از روش DCT استفاده می شود. این تکنیک شبیه تکنیک LSB است. یک فایل ویدئویی از تعدادی تصاویر پشت سرهم تشکیل شده است که این تصاویر به نام فریم شناخته می شوند. بنابراین کافی است که اطلاعات خود را درهر فریم یک فایل ویدئویی ، ‌به روش LSB مخفی نماییم.

تشریح تکنیک LSB بر روی یک فایل تصویری

هر فایل تصویری صرفاً یک فایل دودویی است که حاوی رنگ یا شدت نور هر پیکسل برحسب عددی دودویی است. تصاویر معمولاً از فرمت ۸ بیتی یا ۲۴ بیتی استفاده می کنند. در فرمت ۸ بیتی، تنها قادر به استفاده از ۲۵۶ رنگ برای هرپیکسل هستیم ( از این ۸ بیت، هر بیت می تواند یکی از مقادیر ۰ یا ۱ را برگزیند که در مجموع ۲ به توان ۸، ‌یعنی ۲۵۶ رنگ مختلف داریم). درفرمت ۲۴ بیتی نیز هرپیکسل از۲ به توان ۲۴ بیت رنگ می تواند استفاده کند. در این فرمت، هرپیکسل از۳ بایت ۸ بیتی استفاده می کند. هر بایت نشان دهنده شدت روشنایی یکی از سه رنگ اصلی آبی، قرمز و سبز است. به عنوان نمونه،‌رنگ ها در فرمت html بر اساس فرمت ۲۴ بیتی است، ‌که هر رنگ، کدی بر مبنای ۱۶ دارد که از ۶ کاراکتر تشکیل شده است.دو کاراکتر اول، مربوط به رنگ قرمز، دو کاراکتر دوم مربوط به رنگ آبی و دو کاراکتر سوم، مربوط به رنگ سبز است . برای نمونه برای ساختن رنگ نارنجی، باید مقادیر شدت روشنایی رنگ های قرمز، ‌سبز و آبی ، به ترتیب ۱۰۰% و۵۰% و۰ باشد که در html با #FF7FOO قابل تعریف است.

همچنین اندازه یک تصویر، به تعداد پیکسل ها در تصویر بستگی دارد. برای نمونه، برای تصویری با رزولوشن ۴۸۰× ۶۴۰ که از فرمت ۸ بیتی استفاده می کند،‌ اندازه تصویر باید حدود ۶۴۰*۴۸۰*Byte=307KB باشد. به عنوان مثالی دیگر، تصویری با رزولوشن ۱۰۲۴*۷۶۸ که ازفرمت ۲۴ بیتی استفاده می کند، اندازه تصویر باید حدود ۱۰۲۴*۷۶۸*۳Byte=2.36MB باشد. البته این اعداد درصورتی صادق هستند که هیچ فشردگی بر روی فایل اعمال نشده باشد. لازم به ذکراست، ‌فرمت های تصویری GIF وBMP ، 8 بیتی بوده و از روش Lossless (روشی در گرافیک برای فشرده سازی تصاویراست که درآن تمام اطلاعات تصویرحفظ می شود و فقط از تعداد محدودی ازاطلاعات استفاده می شود و در برنامههای خاصی، اطلاعات حفظ شده قابل بازیابی است بنابراین از کیفیت تصویر نیز کاسته نمی شود) استفاده می کنند.

درمقابل، فرمت JPEG ازروش Lossy(دراین روش بخشی ازاطلاعات تصویر برای همیشه ازبین می رود)استفاده می کند. در Steganographyاز فرمت های GIF وBMP به دلیل ویژگی هایی که دارند، استفاده می شوند. ساده ترین راه برای پیاده سازی Steganography استفاده ازبیت های کم ارزش هرپیکسل یا همان روش(Least significant bit insertion) است. برای این منظور اطلاعات را به دو صورت دودویی درآورده و در بیت های کم ارزش پیکسل های تصویر قرار می دهیم . البته ما خواهان این هستیم که تصویر مورد نظر نیز زیاد تغییری نداشته باشد. بنابراین اگر از فرمت ۲۴ بیتی برای این کار استفاده کنیم، چشم انسان قادر به شناسایی این تغییر در تصویر نیست. فرض کنید که سه پیکسل مجاور هم داریم که به صورت زیر کد شده اند: سبز آبی قرمز ۱۱۰۰۱۰۰۱ ۰۰۰۰۱۱۰۱ ۱۰۰۱۰۱۰۱ پیکسل ۱ ۱۱۰۰۱۰۱۰ ۰۰۰۰۱۱۱۱ ۱۰۰۱۰۱۱۰ پیکسل ۲ ۱۱۰۰۱۰۱۱ ۰۰۰۱۰۰۰۰ ۱۰۰۱۱۱۱۱ پیکسل ۳ حال فرض کنید که می خواهیم ۹ بیت اطلاعات ۱۰۱۱۰۱۱۰۱را در این پیکسل ها مخفی نماییم (فرض میشود که این ۹ بیت اطلاعات رمزنگاری شده، یک پیام باشند). حال اگر ازروش LSB استفاده شود و این ۹ بیت در بیت های کم ارزش بایت های این سه پیکسل قرارداده شوند،‌ جدول زیر را خواهیم داشت . سبز آبی قرمز ۱۱۰۰۱۰۰۱ ۰۰۰۰۱۱۰۰ ۱۰۰۱۰۱۰۱ پیکسل ۱ ۱۱۰۰۱۰۱۱ ۰۰۰۰۱۱۱۰ ۱۰۰۱۰۱۱۱ پیکسل ۲ ۱۱۰۰۱۰۱۱ ۰۰۰۱۰۰۰۰ ۱۰۰۱۱۱۱۱ پیکسل ۳ ملاحظه می شود که فقط ۴ بیت تغییر داده شده اند و این لطمه زیادی به تصویر وارد نمی کند، به طوری که چشم اصلاً قادر به تشخیص این تغییرات نیست. به عنوان مثال، تغییربیت رنگ آبی از ۱۱۱۱۱۱۱۱ به ۱۱۱۱۱۱۱۰ اصلاًبرای چشم قابل تشخیص نیست. ناگفته نماند تصاویر سیاه وسفید نیز برای Steganography بسیار مناسب هستند. حال شاید خواهان مخفی کردن یک متن در یک تصویر باشیم. در این وضعیت هر کاراکتر، یک بایت( ۸ بیت)فضا اشغال می کند. از آنجا که این بیت ها را باید درون پیکسل های تصویری قرار دهیم، می بایست این هشت بیت را به بسته های ۱ بیتی تقسیم نماییم و هر بیت را در بیت های سطح پایین یکی ازسه رنگ اصلی پیکسل ها،‌ قرار دهیم با این شیوه، کلمات تمامی زبان هایی را که با ساختار ASCII یا UTF-8 سازگارند، می توان درون تصاویر جاسازی نمود.

پیاده سازی تکنیک LSB

برای این کار معمولاً از فرمت BMF 24 بیتی استفاده می شود. در واقع در این روش معمولاً از دو بیت کم ارزش هر یک از بایت های پیکسل استفاده می شود. این کار به این دلیل است که در یک تصویر، تعداد زیادی کاراکتر را بتوان جا داد همچنین متنی را که قرار است در تصویر مخفی شود، به کد ASCII تبدیل می کنند. سپس هر کاراکتر را به بسته های ۲ بیتی تقسیم می کنند، یعنی هر کاراکتر از ۴ بسته ۲ بیتی تشکیل می شود. سپس این بسته های ۲ بیتی را در دو بیت کم ارزش هر یک از بایت های یک پیکسل،‌ پخش می کنند. یعنی برای هر کاراکتر، ما احتیاج به ۴ بایت از اطلاعات تصویر داریم، که ۳ بایت آن از یک پیکسل بدست می آید و بایت چهارم هم از پیکسل دیگر گرفته می شود. برای راحتی کار، معمولاً بسته های ۲ بیتی را در اولین پیکسل جا سازی می کنند و به همین ترتیب پیش می روند تا تمام متن در تصویر جاسازی گردد. استخراج اطلاعات پنهان شده برای استخراج متون مخفی شده در تصویر عملیات زیر را به ترتیب انجام می دهیم: استخراج بیت های استفاده شده ادغام بیت ها و تبدیل آنها به بایت تبدیل بایت ها به کاراکتر مشاهده کامل متن جا سازی شده

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

نتیجه گیری:

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

 

 

 

از مهم‌ترین تکنیک‌های عملی داده‌کاوی که کاربرد زیادی در علوم مختلف دارد، می توان به «خوشه بندی k-میانگین» (K-means Clustering)  اشاره کرد، که با توجه به بار محاسباتی زیاد آن، استفاده از کامپیوتر در انجام این فرآیند، کمک شایانی به کاربران می‌کند. در این راستا زبان برنامه‌نویسی و محاسباتی R قابلیت انجام این گونه محاسبات را دارد و به محققین در تحلیل خوشه‌بندی تفکیکی بر مبنای روش K-میانگین، کمک شایانی می‌کند. در این متن به بررسی روش خوشه‌بندی با استفاده از دستورات مربوط به این زبان برنامه‌نویسی می‌پردازیم و با البته با مفاهیم اولیه خوشه‌بندی k-میانگین نیز آشنا می‌شویم.

خوشه‌بندی k-میانگین

روش‌‌ها و الگوریتم‌های متعددی برای تبدیل اشیاء به گروه‌های همشکل یا مشابه وجود دارد. الگوریتم k-میانگین یکی از ساده‌ترین و محبوب‌ترین الگوریتم‌هایی است که در «داده‌کاوی» (Data Mining) بخصوص در حوزه «یادگیری نظارت نشده» (Unsupervised Learning) به کار می‌رود.

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

الگوریتم خوشه‌بندی k-میانگین از گروه روش‌های خوشه‌بندی تفکیکی (Partitioning Clustering) محسوب می‌شود و درجه پیچیدگی محاسباتی آن برابر با O(ndk+1) است، به شرطی که n تعداد اشیاء، d بعد ویژگی‌ها و k تعداد خوشه‌ها باشد. همچنین پیچیدگی زمانی برای این الگوریتم برابر با O(nkdi) است، که البته منظور از i‌ تعداد تکرارهای الگوریتم برای رسیدن به جواب بهینه است.

در خوشه‌بندی k-میانگین از بهینه‌سازی یک تابع هدف (Object Function) استفاده می‌شود. پاسخ‌های حاصل از خوشه‌بندی در این روش، ممکن است به کمک کمینه‌سازی (Minimization) یا بیشینه‌سازی (Maximization) تابع هدف صورت گیرد. به این معنی که اگر ملاک «میزان فاصله» (Distance Measure) بین اشیاء باشد، تابع هدف براساس کمینه‌سازی خواهد بود پاسخ عملیات خوشه‌بندی، پیدا کردن خوشه‌هایی است که فاصله بین اشیاء هر خوشه کمینه باشد. در مقابل، اگر از تابع مشابهت (Dissimilarity Function) برای اندازه‌گیری مشابهت اشیاء استفاده شود، تابع هدف را طوری انتخاب می‌کنند که پاسخ خوشه‌بندی مقدار آن را در هر خوشه بیشینه کند.

خوشه‌بندی k-میانگین روش‌‌ها و الگوریتم‌های متعددی برای تبدیل اشیاء به گروه‌های همشکل یا مشابه وجود دارد. الگوریتم k-میانگین یکی از ساده‌ترین و محبوب‌ترین الگوریتم‌هایی است که در «داده‌کاوی» (Data Mining) بخصوص در حوزه «یادگیری نظارت نشده» (Unsupervised Learning) به کار می‌رود. معمولا در حالت چند متغیره، باید از ویژگی‌های مختلف اشیا به منظور طبقه‌بندی و خوشه‌ کردن آن‌ها استفاده کرد. به این ترتیب با داده‌های چند بعدی سروکار داریم که معمولا به هر بعد از آن، ویژگی یا خصوصیت گفته می‌شود. با توجه به این موضوع، استفاده از توابع فاصله مختلف در این جا مطرح می‌شود. ممکن است بعضی از ویژگی‌های اشیا کمی و بعضی دیگر کیفی باشند. به هر حال آنچه اهمیت دارد روشی برای اندازه‌گیری میزان شباهت یا عدم شباهت بین اشیاء است که باید در روش‌های خوشه‌بندی لحاظ شود. الگوریتم خوشه‌بندی k-میانگین از گروه روش‌های خوشه‌بندی تفکیکی (Partitioning Clustering) محسوب می‌شود و درجه پیچیدگی محاسباتی آن برابر با O ( n d k + 1 ) است، به شرطی که n تعداد اشیاء، d بعد ویژگی‌ها و k تعداد خوشه‌ها باشد. همچنین پیچیدگی زمانی برای این الگوریتم برابر با O ( n k d i ) است، که البته منظور از i‌ تعداد تکرارهای الگوریتم برای رسیدن به جواب بهینه است. در خوشه‌بندی k-میانگین از بهینه‌سازی یک تابع هدف (Object Function) استفاده می‌شود. پاسخ‌های حاصل از خوشه‌بندی در این روش، ممکن است به کمک کمینه‌سازی (Minimization) یا بیشینه‌سازی (Maximization) تابع هدف صورت گیرد. به این معنی که اگر ملاک «میزان فاصله» (Distance Measure) بین اشیاء باشد، تابع هدف براساس کمینه‌سازی خواهد بود پاسخ عملیات خوشه‌بندی، پیدا کردن خوشه‌هایی است که فاصله بین اشیاء هر خوشه کمینه باشد. در مقابل، اگر از تابع مشابهت (Dissimilarity Function) برای اندازه‌گیری مشابهت اشیاء استفاده شود، تابع هدف را طوری انتخاب می‌کنند که پاسخ خوشه‌بندی مقدار آن را در هر خوشه بیشینه کند. معمولا زمانی که هدف کمینه‌سازی باشد، تابع هدف را «تابع هزینه» (Cost Function) نیز می‌نامند. روش خوشه بندی k-میانگین، توسط «مک‌کوئین» (McQueen) جامعه شناس و ریاضیدان در سال ۱۹۶۵ ابداع و توسط دیگر دانشمندان توسعه و بهینه شد. برای مثال در سال 1957 نسخه‌ دیگری از این الگوریتم به عنوان الگوریتم استاندارد خوشه‌بندی k-میانگین، توسط «لوید» (Lloyd) در آزمایشگاه‌های بل (Bell Labs) برای کدگذاری پالس‌ها ایجاد شد که بعدها در سال 1982 منتشر گردید. این نسخه از الگوریتم خوشه‌بندی، امروزه در بیشتر نرم‌افزارهای رایانه‌ای که عمل خوشه‌بندی k-میانگین را انجام می‌دهند به صورت استاندارد اجرا می‌شود. در سال 1956 «فورجی» (W.Forgy) به طور مستقل همین روش را ارائه کرد و به همین علت گاهی این الگوریتم را با نام لوید-فورجی می‌شناسند. همچنین روش هارتیگان- ونگ (Hartigan-Wong) که در سال ۱۹۷۹ معرفی شد یکی از روش‌هایی است که در تحقیقات و بررسی‌های داده‌کاوی مورد استفاده قرار می‌گیرد. تفاوت در این الگوریتم‌ها در مرحله آغازین و شرط همگرایی الگوریتم‌ها است ولی در بقیه مراحل و محاسبات مانند یکدیگر عمل می‌کنند. به همین علت همگی را الگوریتم‌های خوشه‌بندی k-میانگین می‌نامند. روش خوشه‌بندی k-میانگین فرض کنید مشاهدات ( x 1 , x 2 , … , x n ) که دارای d بعد هستند را باید به k بخش یا خوشه تقسیم کنیم. این بخش‌ها یا خوشه‌ها را با مجموعه‌ای به نام S = { S 1 , S 2 , … , S k } می‌شناسیم. اعضای خوشه‌ها باید به شکلی از مشاهدات انتخاب شوند که تابع «مجموع مربعات درون خوشه‌ها» (within-cluster sum of squares- WCSS) که در حالت یک بعدی شبیه واریانس است، کمینه شود. بنابراین، تابع هدف در این الگوریتم به صورت زیر نوشته می‌شود. a r g m i n S k ∑ i = 1 ∑ x ∈ S i ∥ x − μ i ∥ 2 = a r g m i n S k ∑ i = 1 | S i | Var S i در اینجا منظور از μ i میانگین خوشه S i و | S i | تعداد اعضای خوشه iام است. البته می‌توان نشان داد که کمینه کردن این مقدار به معنی بیشینه‌سازی میانگین مربعات فاصله بین نقاط در خوشه‌های مختلف (between-Cluster sum of Squares- BCSS) است زیرا طبق قانون واریانس کل، با کم شدن مقدار WCSS، مقدار BCSS افزایش می‌یابد، زیرا واریانس کل ثابت است. در ادامه به بررسی روش خوشه بندی k-میانگین به روش لوید-فورجی (استاندارد) و هارتیگان-ونگ می‌پردازیم. خوشه‌بندی k-میانگین با الگوریتم لوید (Lloyd’s Algorithm) به عنوان یک الگوریتم استاندارد برای خوشه‌بندی k-میانگین از الگوریتم لوید بخصوص در زمینه علوم کامپیوتر، استفاده می‌شود. ابتدا به علائمی که در این رابطه به کار می‌رود، اشاره می‌کنیم. m ( i ) j : میانگین مقدارهای مربوط به خوشه jام در تکرار iام از الگوریتم را با این نماد نشان می‌دهیم. S ( i ) j : مجموعه اعضای خوشه jام در تکرار iام الگوریتم. الگوریتم لوید را با توجه به نمادهای بالا می‌توان به دو بخش تفکیک کرد. ۱- بخش مقدار دهی ( A s s i g n m e n t S t e p )، ۲- بخش به روز رسانی (Update Step). حال به بررسی مراحل اجرای این الگوریتم می‌پردازیم. در اینجا فرض بر این است که نقاط مرکزی اولیه یعنی m ( 1 ) 1 , m ( 1 ) 2 , ⋯ , m ( 1 ) k داده شده‌اند. بخش مقدار دهی: هر مشاهده یا شی را به نزدیکترین خوشه نسبت می‌دهیم. به این معنی که فاصله اقلیدسی هر مشاهده از مراکز، اندازه گرفته شده سپس آن مشاهده عضو خوشه‌ای خواهد شد که کمترین فاصله اقلیدسی را با مرکز آن خوشه دارد. این قانون را به زبان ریاضی به صورت S ( t ) i = { x p : ∥ ∥ x p − m ( t ) i ∥ ∥ 2 ≤ ∥ ∥ x p − m ( t ) j ∥ ∥ 2 ∀ j , 1 ≤ j ≤ k } می‌نویسیم. بخش به روز رسانی: میانگین خوشه‌های جدید محاسبه می‌شود. در این حالت داریم: m ( t + 1 ) i = 1 | S ( t ) i | ∑ x j ∈ S ( t ) i x j توجه داشته باشید که منظور از | S ( t ) i | تعداد اعضای خوشه iام است. الگوریتم زمانی متوقف می‌شود که مقدار برچسب عضویت مشاهدات تغییری نکند. البته در چنین حالتی هیچ تضمینی برای رسیدن به جواب بهینه (با کمترین مقدار برای تابع هزینه) وجود ندارد. کاملا مشخص است که در رابطه بالا،‌ فاصله اقلیدسی بین هر نقطه و مرکز خوشه ملاک قرار گرفته است. از این جهت از میانگین و فاصله اقلیدسی استفاده شده که مجموع فاصله اقلیدسی نقاط از میانگینشان کمترین مقدار ممکن نسبت به هر نقطه دیگر است. نکته: ممکن است فاصله اقلیدسی یک مشاهده از دو مرکز یا بیشتر، برابر باشد ولی در این حالت آن شئ فقط به یکی از این خوشه‌ها تعلق خواهد گرفت. تصویر زیر یک مثال برای همگرایی الگوریتم لوید محسوب می‌شود که مراحل اجرا در آن دیده می‌شود. همانطور که مشخص است الگوریتم با طی ۱۴ مرحله به همگرایی می‌رسد و دیگر میانگین خوشه‌ها تغییری نمی‌یابد. البته ممکن است که این نقاط نتیجه تابع هزینه را بطور کلی (Global) کمینه نکنند زیرا روش k-میانگین بهینه‌سازی محلی (Local Optimization) را به کمک مشتق‌گیری و محاسبه نقاط اکستریمم اجرا می‌کند. K-means_convergence همگرایی الگوریتم k-میانگین نکته: به نقاط مرکزی هر خوشه مرکز (Centroid) گفته می‌شود. ممکن است این نقطه یکی از مشاهدات یا غیر از آن‌ها باشد. مشخص است که در الگوریتم لوید، k مشاهده به عنوان مرکز خوشه‌ها (Centroids) در مرحله اول انتخاب شده‌اند ولی در مراحل بعدی، مقدار میانگین هر خوشه نقش مرکز را بازی می‌کند. خوشه‌بندی k-میانگین با الگوریتم هارتیگان-ونگ (Hartigan-Wong) یکی از روش‌های پیشرفته و البته با هزینه محاسباتی زیاد در خوشه‌بندی k-میانگین، الگوریتم هارتیگان-ونگ است. برای آشنایی با این الگوریتم بهتر است ابتدا در مورد نمادهایی که در ادامه خواهید دید توضیحی ارائه شود. ϕ ( S j ) : از این نماد برای نمایش «تابع هزینه» برای خوشه S j استفاده می‌کنیم. این تابع در خوشه‌بندی k-میانگین برابر است با: ϕ ( S i ) = ∑ x ∈ S j ( x − μ j ) 2 S j : از آنجایی که هدف از این الگوریتم، تفکیک اشیاء به k گروه مختلف است، گروه‌ها یا خوشه‌ها در مجموعه‌ای با نام S قرار دارند و داریم، S = { S 1 , S 2 , ⋯ , S k } . μ j : برای نمایش میانگین خوشهjام از این نماد استفاده می‌شود. بنابراین خواهیم داشت: μ j = ∑ x ∈ S j x n j n j : این نماد تعداد اعضای خوشه jام را نشان می‌دهد. بطوری که j = { 1 , 2 , ⋯ , k } است. البته مشخص است که در اینجا تعداد خوشه‌ها را با k‌ نشان داده‌ایم. مراحل اجرای الگوریتم در خوشه‌بندی k-میانگین با الگوریتم هارتیگان می‌توان مراحل اجرا را به سه بخش تقسیم کرد: ۱- بخش مقدار دهی اولیه ( A s s i g n m e n t S t e p ) ، ۲- بخش به روز رسانی ( U p d a t e S t e p )، ۳- بخش نهایی (Termination). در ادامه به بررسی این بخش‌ها پرداخته می‌شود. بخش مقدار دهی اولیه: در الگوریتم هارتیگان-ونگ، ابتدا مشاهدات و یا اشیاء به طور تصادفی به k گروه یا خوشه تقسیم می‌شوند. به این کار مجموعه S با اعضایی به صورت { S j } j ∈ { i , ⋯ , k } مشخص می‌شود. بخش به روز رسانی: فرض کنید که مقدارهای n و m از اعداد ۱ تا k انتخاب شده باشد. مشاهده یا شیئ از خوشه nام را در نظر بگیرید که تابع Δ ( m , n , x ) = ϕ ( S n ) + ϕ ( S m ) − Φ ( S n ∖ { x } ) − ϕ ( S m ∪ { x } ) را کمینه سازد، در چنین حالتی مقدار x از خوشه nام به خوشه mام منتقل می‌شود. به این ترتیب شی مورد نظر در S m قرار گرفته و خواهیم داشت x ∈ S m . بخش نهایی: زمانی که به ازای همه n,m,x مقدار Δ ( m , n , x ) بزرگتر از صفر باشد، الگوریتم خاتمه می‌یابد. نکته: منظور از نماد ϕ ( S n ∖ { x } ) محاسبه تابع هزینه در زمانی است که مشاهده x از مجموعه S n خارج شده باشد. همچنین نماد ϕ ( S m ∪ { x } ) به معنی محاسبه تابع هزینه در زمانی است که مشاهده x به خوشه S m اضافه شده باشد. در تصویر زیر مراحل اجرای الگوریتم هارتیگان به خوبی نمایش داده شده است. هر تصویر بیانگر یک مرحله از اجرای الگوریتم است. نقاط رنگی نمایش داده شده، همان مشاهدات هستند. هر رنگ نیز بیانگر یک خوشه است. در تصویر اول مشخص است که در بخش اول از الگوریتم به طور تصادفی خوشه‌بندی صورت پذیرفته. ولی در مراحل بعدی خوشه‌ها اصلاح شده و در انتها به نظر می‌رسد که بهترین تفکیک برای مشاهدات رسیده‌ایم. در تصویر آخر نیز مشخص است که مراکز خوشه‌ها، محاسبه و ثابت شده و دیگر بهینه‌سازی صورت نخواهد گرفت. به این ترتیب پاسخ‌های الگوریتم با طی تکرار ۵ مرحله به همگرایی می‌رسد. hartigan algorithm الگوریتم هارتیگان بخش مقدار دهی اولیه hartigan algorithm الگوریتم هارتیگان تکرار ۱ hartigan algorithm الگوریتم هارتیگان تکرار ۲ hartigan algorithm الگوریتم هارتیگان تکرار ۳ hartigan algorithm الگوریتم هارتیگان تکرار ۴ hartigan algorithm الگورییتم هارتیگان تکرار ۵ اجرای این الگوریتم‌ها با استفاده از دستورات زبان برنامه‌نویسی R برای استفاده از دستورات و فرمان‌های مربوط به خوشه‌بندی k-میانگین، باید بسته یا Package مربوط به خوشه‌بندی kmeans به اسم stats را در R نصب کرده باشد. البته از آنجایی این بسته بسیار پرکاربرد است،‌ معمولا به طور خودکار فراخوانی شده است. کدهای زیر نشانگر استفاده از الگوریتم خوشه‌بندی توسط روش‌های مختلف آن است. library(stats) data=iris[,1:4] method=c("Hartigan-Wong", "Lloyd", "MacQueen") k=3 kresults1=kmeans(data,k,algorithm = method[1]) kresults2=kmeans(data,k,algorithm=method[2]) kresults3=kmeans(data,k,algorithm=method[3]) kresults1 kresults2 kresults3 1 2 3 4 5 6 7 8 9 10 11 12 library(stats) data=iris[,1:4] method=c("Hartigan-Wong", "Lloyd", "MacQueen") k=3 kresults1=kmeans(data,k,algorithm = method[1]) kresults2=kmeans(data,k,algorithm=method[2]) kresults3=kmeans(data,k,algorithm=method[3]) kresults1 kresults2 kresults3 با توجه به داده‌های iris که مربوط به اندازه و ابعاد کاسبرگ و گلبرگ سه نوع گل مختلف است، خوشه‌بندی به سه دسته انجام شده است. اطلاعات مربوط به ۱۰ سطر اول این مجموعه داده،‌ به صورت زیر است. با اجرای کدهای نوشته شده، خوشه‌بندی انجام شده و نتابج تولید می‌شوند. به عنوان مثال می‌توان خروجی را برای kresult1 که انجام خوشه بندی توسط الگوریتم هارتیگان است به صورت زیر مشاهده کرد: iris clustering همانطور که دیده می‌شود، در سطر اول تعداد اعضای هر خوشه، نمایش داده شده است. در بخش دوم که با سطر ۱ و ۲ و ۳ مشخص شده،‌ مراکز هر سه خوشه برحسب ویژگی‌های (طول و عرض کاسبرگ و طول و عرض گلبرگ) محاسبه شده و در قسمت Cluster Vector نیز برچسب خوشه هر کدام از مشاهدات دیده می‌شود. در انتها نیز مجموع مربعات فاصله درون خوشه‌ای (مجموع فاصله هر مشاهده از مرکز خوشه) استخراج شده و درصد یا شاخص ارزیابی خوشه‌بندی بر اساس نسبت مربعات بین خوشه‌ها به مربعات کل دیده می‌شود. این مقدار برای این حالت برابر ۸۸.۴٪ است که نشان می‌دهد بیشتر پراکندگی (total_ss) توسط پراکندگی بین خوشه‌ها (between_ss) بیان شده است. پس به نظر خوشه‌بندی مناسب خواهد بود. پس اختلاف بین گروه‌ها ناشی از خوشه‌های است که مشاهدات را به دسته‌‌های جداگانه تفکیک کرده. همچنین در کدها مشخص است که تعداد خوشه‌های در متغیر k ثبت و به کار رفته است. در شکل دیگری از دستور kmeans می‌توان به جای معرفی تعداد خوشه‌ها از مراکز دلخواه که با تعداد خوشه‌ها مطابقت دارد، استفاده کرد. برای مثال اگر برنامه به صورت زیر نوشته شود، الگوریتم ابتدا نقاط معرفی شده را به عنوان نقاط مرکزی (Centroids) به کار گرفته و سپس مراحل بهینه سازی را دنبال می‌کند. از آنجا که سه نقطه مبنا قرار گرفته، الگوریتم متوجه می‌شود که باید مشاهدات به سه خوشه تفکیک شود. library(stats) data=iris[,1:4] method=c("Hartigan-Wong", "Lloyd", "MacQueen") c1=c(6,4,5,3) c2=c(5,3,1,0) c3=c(6,2,4,2) centers=rbind(c1,c2,c3) kresults1=kmeans(x = data,centers = centers,algorithm = method[1]) kresults2=kmeans(x = data,centers = centers,algorithm=method[2]) kresults3=kmeans(x = data,centers = centers,algorithm=method[3]) kresults1 kresults2 kresults3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 library(stats) data=iris[,1:4] method=c("Hartigan-Wong", "Lloyd", "MacQueen") c1=c(6,4,5,3) c2=c(5,3,1,0) c3=c(6,2,4,2) centers=rbind(c1,c2,c3) kresults1=kmeans(x = data,centers = centers,algorithm = method[1]) kresults2=kmeans(x = data,centers = centers,algorithm=method[2]) kresults3=kmeans(x = data,centers = centers,algorithm=method[3]) kresults1 kresults2 kresults3 در تصویر زیر نتیجه خوشه بندی k-میانگین را برای داده‌های iris توسط یک نمودار مشاهده می‌کنید. البته باید توجه داشت که این نمودار دو بعدی است در حالیکه داده‌ها، دارای چهار ویژگی هستند. به کمک روش‌های آماری مانند تجزیه به مولفه‌های اصلی (PCA) ابعاد مسئله کاهش یافته تا در سه بعد روی نمودار نمایش داده شود. سمت راست تصویر گروه‌های واقعی و سمت چپ نتیجه خوشه‌بندی دیده می‌شود. نقاطی که در خوشه‌ها به درستی تشخیص داده نشده‌اند، باعث افزایش خطای خوشه‌بندی خواهند شد. کاربردها از الگوریتم خوشه‌بندی k-میانگین در «بخش‌بندی بازار کسب و کار» (market Segmentation)، «دسته‌بندی مشتریان» (Customer Segmentation)، «بینایی رایانه‌ای» (Computer Vision) و «زمین‌آمار (Geostatistics) استفاده می شود. برای مثال در تشخیص تعداد رنگ و یا فشرده سازی تصاویر برحسب رنگ‌ها می‌توان از این الگوریتم‌ها استفاده کرد. در تصویر بالا گل رز زرد رنگی دیده می‌شود که در یک محیط سبز قرار گرفته است. با استفاده از الگوریتم‌های خوشه‌بندی می‌توان تعداد رنگ‌ها را کاهش داده و از حجم تصاویر کاست. در تصویر زیر دسته بندی رنگ‌های گل رز دیده می‌شود. در این تصویر، هر طیف رنگ براساس میزان رنگ قرمز و سبز، بوسیله «سلول‌های ورونوی» (Voronoi Cell) تقسیم‌بندی شده است. این تقسیم‌بندی می‌تواند توسط الگوریتم‌ها خوشه‌بندی k-میانگین صورت گرفته باشد. در کل تصویر نیز، طیف رنگ‌های مختلف برای تصویر گل رز در یک «نمودار ورونوی» (Voronoi diagram) نمایش داده شده است که خوشه‌ها را بیان می‌کند. معایب و مزایای خوشه‌بندی k-میانگین از آنجایی که در این روش خوشه‌بندی، محاسبه فاصله بین نقاط توسط تابع فاصله اقلیدسی انجام می‌شود، از این الگوریتم‌ها به صورت استاندارد، فقط برای مقدارهای عددی (و نه ویژگی‌های کیفی) می‌توان استفاده کرد. از طرف دیگر با توجه به محاسبات ساده و سریع آن‌ها،‌ پرکاربرد و موثر است. از طرف دیگر نسخه‌های تعمیم یافته از روش خوشه بندی k-میانگین نیز وجود دارد که با توابع فاصله دیگر مانند فاصله منهتن و یا فاصله‌هایی که برای داده‌های باینری قابل استفاده است، مراحل خوشه‌بندی را انجام می‌دهد. به منظور ارزیابی نتایج خوشه‌بندی از معیارهای متفاوتی کمک گرفته می‌شود. ممکن است از قبل برچسب خوشه‌ها مشخص باشد و بخواهیم کارایی الگوریتم را با توجه به مقایسه برچسب‌های واقعی و حاصل از خوشه‌بندی، اندازه‌گیری کنیم. در این حالت، شاخص‌های ارزیابی بیرونی، بهترین راهنما و معیار برای سنجش صحت نتایج خوشه‌بندی محسوب می‌شوند. معمولا به این برچسب‌ها، استاندارد طلایی (Golden Standard) و در کل چنین عملی را ارزیابی Benchmark می‌گویند. برای مثال شاخص رَند (Rand Index) یکی از این معیارها و شاخص‌های بیرونی است که از محبوبیت خاصی نیز برخوردار است. از طرف دیگر اگر هیچ اطلاعات اولیه از ساختار و دسته‌بندی مشاهدات وجود نداشته باشد، فقط ملاک ارزیابی، می‌تواند اندازه‌هایی باشد که میزان شباهت درون خوشه‌ها و یا عدم شباهت یا فاصله بین خوشه‌ها را اندازه می‌گیرند. بنابراین برای انتخاب بهتر و موثرترین روش خوشه‌بندی از میزان شباهت درون خوشه‌ها و شباهت بین خوشه‌ها استفاده می‌شود. روشی که دارای میزان شباهت بین خوشه‌ای کم و شباهت درون خوشه‌ای زیاد باشد مناسب‌ترین روش خواهد بود. این معیارها را به نام شاخص‌های ارزیابی درونی می‌شناسیم. به عنوان مثال شاخص نیم‌رخ (silhouette) یکی از این معیارها است که شاخصی برای سنجش مناسب بودن تعلق هر مشاهده به خوشه‌اش ارائه می‌دهد. به این ترتیب معیاری برای اندازه‌گیری کارایی الگوریتم خوشه‌بندی بدست می‌آید. اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند: مجموعه آموزش‌های یادگیری ماشین و بازشناسی الگو مجموعه آموزش‌های آمار، احتمالات و داده‌کاوی آموزش خوشه بندی K میانگین (K-Means) با نرم افزار SPSS آموزش خوشه بندی تفکیکی با نرم افزار R آموزش خوشه بندی سلسله مراتبی با SPSS آشنایی با خوشه‌بندی (Clustering) و شیوه‌های مختلف آن روش‌ های ارزیابی نتایج خوشه‌ بندی (Clustering Performance) — معیارهای درونی (Internal Index) روش‌ های ارزیابی نتایج خوشه‌ بندی (Clustering Performance) — معیارهای بیرونی (External Index) ^^ telegram twitter به اشتراک بگذارید: منبع وبلاگ فرادرسWikipedia بر اساس رای 1 نفر آیا این مطلب برای شما مفید بود؟ بلیخیر نظر شما چیست؟ نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند * متن نظر * نام شما * ایمیل شما * پایتخت ایران کدام شهر است؟ برچسب‌ها clusterClusteringclustering algorithmcost functiondata miningforgy algorithmhartigan-wong algorithmk-meanslloyd algorithmmaximizationMcQueen algorithmminimizationpartitioning algorithmunsupervise learningتابع هدفتابع هزینهتعداد خوشهخوشه بندیخوشه بندی K میانگینخوشه بندی در آمارخوشه‌بندیخوشه‌بندی k-میانگینمربعات بین خوشهمربعات درون خوشهمعیارهای ارزیابی خوشه عضویت در خبرنامه ایمیل * آموزش برنامه نویسی آموزش متلب Matlab نرم‌افزارهای مهندسی برق نرم‌افزارهای مهندسی عمران نرم‌افزارهای مهندسی مکانیک نرم‌افزارهای مهندسی صنایع

 

معمولا زمانی که هدف کمینه‌سازی باشد، تابع هدف را «تابع هزینه» (Cost Function) نیز می‌نامند.

روش خوشه بندی k-میانگین، توسط «مک‌کوئین» (McQueen) جامعه شناس و ریاضیدان در سال ۱۹۶۵ ابداع و توسط دیگر دانشمندان توسعه و بهینه شد. برای مثال در سال 1957 نسخه‌ دیگری از این الگوریتم به عنوان الگوریتم استاندارد خوشه‌بندی k-میانگین، توسط «لوید» (Lloyd) در آزمایشگاه‌های بل (Bell Labs) برای کدگذاری پالس‌ها ایجاد شد که بعدها در سال 1982 منتشر گردید. این نسخه از الگوریتم خوشه‌بندی، امروزه در بیشتر نرم‌افزارهای رایانه‌ای که عمل خوشه‌بندی k-میانگین را انجام می‌دهند به صورت استاندارد اجرا می‌شود. در سال 1956 «فورجی» (W.Forgy) به طور مستقل همین روش را ارائه کرد و به همین علت گاهی این الگوریتم را با نام لوید-فورجی می‌شناسند. همچنین روش هارتیگان- ونگ (Hartigan-Wong) که در سال ۱۹۷۹ معرفی شد یکی از روش‌هایی است که در تحقیقات و بررسی‌های داده‌کاوی مورد استفاده قرار می‌گیرد. تفاوت در این الگوریتم‌ها در مرحله آغازین و شرط همگرایی الگوریتم‌ها است ولی در بقیه مراحل و محاسبات مانند یکدیگر عمل می‌کنند. به همین علت همگی را الگوریتم‌های خوشه‌بندی k-میانگین می‌نامند.

روش خوشه‌بندی k-میانگین

فرض کنید مشاهدات  که دارای d بعد هستند را باید به k بخش یا خوشه تقسیم کنیم. این بخش‌ها یا خوشه‌ها را با مجموعه‌ای به نام  می‌شناسیم. اعضای خوشه‌ها باید به شکلی از مشاهدات انتخاب شوند که تابع «مجموع مربعات درون خوشه‌ها» (within-cluster sum of squares- WCSS) که در حالت یک بعدی شبیه واریانس است، کمینه شود.

بنابراین، تابع هدف در این الگوریتم به صورت زیر نوشته می‌شود.

الگوریتم K-means

در اینجا منظور از  میانگین خوشه  و   تعداد اعضای خوشه iام است. البته می‌توان نشان داد که کمینه کردن این مقدار به معنی بیشینه‌سازی میانگین مربعات فاصله بین نقاط در خوشه‌های مختلف (between-Cluster sum of Squares- BCSS) است زیرا طبق قانون واریانس کل، با کم شدن مقدار WCSS، مقدار BCSS افزایش می‌یابد، زیرا واریانس کل ثابت است.

در ادامه به بررسی روش خوشه بندی k-میانگین به روش لوید-فورجی (استاندارد) و هارتیگان-ونگ می‌پردازیم.

خوشه‌بندی k-میانگین با الگوریتم لوید (Lloyd’s Algorithm)

به عنوان یک الگوریتم استاندارد برای خوشه‌بندی k-میانگین از الگوریتم لوید بخصوص در زمینه علوم کامپیوتر، استفاده می‌شود. ابتدا به علائمی که در این رابطه به کار می‌رود، اشاره می‌کنیم.

mj(i): میانگین مقدارهای مربوط به خوشه jام در تکرار iام از الگوریتم را با این نماد نشان می‌دهیم.

Sj(i): مجموعه اعضای خوشه jام در تکرار iام الگوریتم.

الگوریتم لوید را با توجه به نمادهای بالا می‌توان به دو بخش تفکیک کرد. ۱- بخش مقدار دهی ()، ۲- بخش به روز رسانی (Update Step). حال به بررسی مراحل اجرای این الگوریتم می‌پردازیم. در اینجا فرض بر این است که نقاط مرکزی اولیه یعنی  داده شده‌اند.

  1. بخش مقدار دهی: هر مشاهده یا شی را به نزدیکترین خوشه نسبت می‌دهیم. به این معنی که فاصله اقلیدسی هر مشاهده از مراکز، اندازه گرفته شده سپس آن مشاهده عضو خوشه‌ای خواهد شد که کمترین فاصله اقلیدسی را با مرکز آن خوشه دارد. این قانون را به زبان ریاضی به صورت  فرمول 2  می‌نویسیم.
  2. بخش به روز رسانی: میانگین خوشه‌های جدید محاسبه می‌شود. در این حالت داریم:  فرمول 3

توجه داشته باشید که منظور از Si(t| تعداد اعضای خوشه iام است. الگوریتم زمانی متوقف می‌شود که مقدار برچسب عضویت مشاهدات تغییری نکند. البته در چنین حالتی هیچ تضمینی برای رسیدن به جواب بهینه (با کمترین مقدار برای تابع هزینه) وجود ندارد. کاملا مشخص است که در رابطه بالا،‌ فاصله اقلیدسی بین هر نقطه و مرکز خوشه ملاک قرار گرفته است. از این جهت از میانگین و فاصله اقلیدسی استفاده شده که مجموع فاصله اقلیدسی نقاط از میانگینشان کمترین مقدار ممکن نسبت به هر نقطه دیگر است.

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

تصویر زیر یک مثال برای همگرایی الگوریتم لوید محسوب می‌شود که مراحل اجرا در آن دیده می‌شود. همانطور که مشخص است الگوریتم با طی ۱۴ مرحله به همگرایی می‌رسد و دیگر میانگین خوشه‌ها تغییری نمی‌یابد. البته ممکن است که این نقاط نتیجه تابع هزینه را بطور کلی (Global) کمینه نکنند زیرا روش k-میانگین بهینه‌سازی محلی (Local Optimization) را به کمک مشتق‌گیری و محاسبه نقاط اکستریمم اجرا می‌کند.

 

K-means_convergence

همگرایی الگوریتم k-میانگین

 

نکته: به نقاط مرکزی هر خوشه مرکز (Centroid) گفته می‌شود. ممکن است این نقطه یکی از مشاهدات یا غیر از آن‌ها باشد. مشخص است که در الگوریتم لوید، k مشاهده به عنوان مرکز خوشه‌ها (Centroids) در مرحله اول انتخاب شده‌اند ولی در مراحل بعدی، مقدار میانگین هر خوشه نقش مرکز را بازی می‌کند.

خوشه‌بندی k-میانگین با الگوریتم هارتیگان-ونگ (Hartigan-Wong)

یکی از روش‌های پیشرفته و البته با هزینه محاسباتی زیاد در خوشه‌بندی k-میانگین، الگوریتم هارتیگان-ونگ است. برای آشنایی با این الگوریتم بهتر است ابتدا در مورد نمادهایی که در ادامه خواهید دید توضیحی ارائه شود.

فرمول 4  از این نماد برای نمایش «تابع هزینه» برای خوشه فرمول 5 استفاده می‌کنیم. این تابع در خوشه‌بندی k-میانگین برابر است با:

فرمول 6

 

فرمول 5 : از آنجایی که هدف از این الگوریتم، تفکیک اشیاء به k گروه مختلف است، گروه‌ها یا خوشه‌ها در مجموعه‌ای با نام S قرار دارند و داریم، فرمول 7

فرمول 8: برای نمایش میانگین خوشهjام از این نماد استفاده می‌شود. بنابراین خواهیم داشت:

فرمول 9

فرمول 11این نماد تعداد اعضای خوشه jام را نشان می‌دهد. بطوری که فرمول 10  است. البته مشخص است که در اینجا تعداد خوشه‌ها را با k‌ نشان داده‌ایم.

مراحل اجرای الگوریتم

در خوشه‌بندی k-میانگین با الگوریتم هارتیگان می‌توان مراحل اجرا را به سه بخش تقسیم کرد: ۱- بخش مقدار دهی اولیه (Assignment Step(   ،- ۲ بخش به روز رسانی (Update Step)، ۳- بخش نهایی (Termination). در ادامه به بررسی این بخش‌ها پرداخته می‌شود.

  1. بخش مقدار دهی اولیه: در الگوریتم هارتیگان-ونگ، ابتدا مشاهدات و یا اشیاء به طور تصادفی به k گروه یا خوشه تقسیم می‌شوند. به این کار مجموعه S با اعضایی به صورت فرمول 12  مشخص می‌شود.
  2. بخش به روز رسانی: فرض کنید که مقدارهای n و m از اعداد ۱ تا k انتخاب شده باشد. مشاهده یا شیئ از خوشه nام را در نظر بگیرید که تابع  فرمول 13 را کمینه سازد، در چنین حالتی مقدار x از خوشه nام به خوشه mام منتقل می‌شود. به این ترتیب شی مورد نظر در  فرمول 20 قرار گرفته و خواهیم داشت  فرمول 15 .
  3. بخش نهایی: زمانی که به ازای همه n,m,x مقدار  فرمول 16  بزرگتر از صفر باشد، الگوریتم خاتمه می‌یابد.

نکته: منظور از نماد  فرمول 17  محاسبه تابع هزینه در زمانی است که مشاهده x از مجموعه  فرمول 18  خارج شده باشد. همچنین نماد  فرمول 19 به معنی محاسبه تابع هزینه در زمانی است که مشاهده x به خوشه  فرمول 20  اضافه شده باشد.

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

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

در تصویر آخر نیز مشخص است که مراکز خوشه‌ها، محاسبه و ثابت شده و دیگر بهینه‌سازی صورت نخواهد گرفت. به این ترتیب پاسخ‌های الگوریتم با طی تکرار ۵ مرحله به همگرایی می‌رسد.

 

hartigan-step-1

الگوریتم هارتیگان بخش مقدار دهی اولیه

hartigan-step-2

الگوریتم هارتیگان تکرار 1

 

hartigan-step-3

الگوریتم هارتیگان تکرار 2

 

hartigan-step-5

الگوریتم هارتیگان تکرار 3

 

hartigan-step-4

الگوریتم هارتیگان تکرار 4

 

hartigan-step-6

الگوریتم هارتیگان تکرار 5

 

اجرای این الگوریتم‌ها با استفاده از دستورات زبان برنامه‌نویسی R

برای استفاده از دستورات و فرمان‌های مربوط به خوشه‌بندی k-میانگین، باید بسته یا Package مربوط به خوشه‌بندی kmeans به اسم stats را در R نصب کرده باشد. البته از آنجایی این بسته بسیار پرکاربرد است،‌ معمولا به طور خودکار فراخوانی شده است. کدهای زیر نشانگر استفاده از الگوریتم خوشه‌بندی توسط روش‌های مختلف آن است.

library(stats)
data=iris[,1:4]
method=c(&quot;Hartigan-Wong&quot;, &quot;Lloyd&quot;,
&quot;MacQueen&quot;)
k=3
kresults1=kmeans(data,k,algorithm = method[1])
kresults2=kmeans(data,k,algorithm=method[2])
kresults3=kmeans(data,k,algorithm=method[3])

kresults1
kresults2
kresults3
با توجه به داده‌های iris که مربوط به اندازه و ابعاد کاسبرگ و گلبرگ سه نوع گل مختلف است، خوشه‌بندی به سه دسته انجام شده است. اطلاعات مربوط به ۱۰ سطر اول این مجموعه داده،‌ به صورت زیر است.

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

iris clustering

همانطور که دیده می‌شود، در سطر اول تعداد اعضای هر خوشه، نمایش داده شده است. در بخش دوم که با سطر ۱ و ۲ و ۳ مشخص شده،‌ مراکز هر سه خوشه برحسب ویژگی‌های (طول و عرض کاسبرگ و طول و عرض گلبرگ) محاسبه شده و در قسمت Cluster Vector نیز برچسب خوشه هر کدام از مشاهدات دیده می‌شود. در انتها نیز مجموع مربعات فاصله درون خوشه‌ای (مجموع فاصله هر مشاهده از مرکز خوشه) استخراج شده و درصد یا شاخص ارزیابی خوشه‌بندی بر اساس نسبت مربعات بین خوشه‌ها به مربعات کل دیده می‌شود. این مقدار برای این حالت برابر ۸۸.۴٪ است که نشان می‌دهد بیشتر پراکندگی (total_ss) توسط پراکندگی بین خوشه‌ها (between_ss) بیان شده است. پس به نظر خوشه‌بندی مناسب خواهد بود. پس اختلاف بین گروه‌ها ناشی از خوشه‌های است که مشاهدات را به دسته‌‌های جداگانه تفکیک کرده.

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

 

library(stats)
data=iris[,1:4]
method=c(&quot;Hartigan-Wong&quot;, &quot;Lloyd&quot;,
         &quot;MacQueen&quot;)
c1=c(6,4,5,3)
c2=c(5,3,1,0)
c3=c(6,2,4,2)
centers=rbind(c1,c2,c3)
kresults1=kmeans(x = data,centers = centers,algorithm = method[1])
kresults2=kmeans(x = data,centers = centers,algorithm=method[2])
kresults3=kmeans(x = data,centers = centers,algorithm=method[3])

kresults1
kresults2
kresults3
در تصویر زیر نتیجه خوشه بندی k-میانگین را برای داده‌های iris توسط یک نمودار مشاهده می‌کنید. البته باید توجه داشت که این نمودار دو بعدی است در حالیکه داده‌ها، دارای چهار ویژگی هستند. به کمک روش‌های آماری مانند تجزیه به مولفه‌های اصلی (PCA) ابعاد مسئله کاهش یافته تا در سه بعد روی نمودار نمایش داده شود. سمت راست تصویر گروه‌های واقعی و سمت چپ نتیجه خوشه‌بندی دیده می‌شود. نقاطی که در خوشه‌ها به درستی تشخیص داده نشده‌اند، باعث افزایش خطای خوشه‌بندی خواهند شد.

کاربردها

از الگوریتم خوشه‌بندی k-میانگین در «بخش‌بندی بازار کسب و کار» (market Segmentation)، «دسته‌بندی مشتریان» (Customer Segmentation)، «بینایی رایانه‌ای» (Computer Vision) و «زمین‌آمار (Geostatistics) استفاده می شود. برای مثال در تشخیص تعداد رنگ و یا فشرده سازی تصاویر برحسب رنگ‌ها می‌توان از این الگوریتم‌ها استفاده کرد.

 

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

 

 

در این تصویر، هر طیف رنگ براساس میزان رنگ قرمز و سبز، بوسیله «سلول‌های ورونوی» (Voronoi Cell) تقسیم‌بندی شده است. این تقسیم‌بندی می‌تواند توسط الگوریتم‌ها خوشه‌بندی k-میانگین صورت گرفته باشد. در کل تصویر نیز، طیف رنگ‌های مختلف برای تصویر گل رز در یک «نمودار ورونوی» (Voronoi diagram) نمایش داده شده است که خوشه‌ها را بیان می‌کند.

 

خوشه بندی k میانگین (k-means Clustering) قسمت 1
خوشه بندی k میانگین (k-means Clustering) قسمت 2

چکیده

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

ﮐﻠﯿﺪواژه ﻫﺎ

اﻧﻄﺒﺎق ﺗﺼﻮﯾﺮ، ﺷﻨﺎﺳﺎﯾﯽ وﯾﮋﮔﯽ ﻫﺎ، ﺗﻄﺒﯿﻖ، ﺑﺮآورد ﻣﺪل ﺗﺒﺪﯾﻞ، اﻟﮕﻮرﯾﺘﻢ SIFT

مقدمه

اﻧﻄﺒﺎق ﺗﺼﻮﯾﺮ، ﻓﺮآﯾﻨﺪ روی ﻫﻢ ﮔﺬاﺷﺘﻦ دو ﯾﺎ ﭼﻨﺪ ﺗﺼﻮﯾﺮ از ﯾﮏ صحنه است ﮐﻪ در ﺷﺮاﯾﻂ ﻣﺨﺘﻠﻒ ﺗﺼﻮﯾﺮﺑﺮداری (زﻣﺎن ﻫﺎی ﻣﺘﻔﺎوت، زواﯾﺎی ﻣﺘﻔﺎوت، ﺣﺴﮕﺮ ﻫﺎی ﻣﺘﻔﺎوت و ﻧﻮع و ﻣﺎﻫﯿِﺖ ﻣﻨﻄﻘﻪ ی ﺗﺼﻮﯾﺮﺑﺮداری ﺷﺪه) ﮔﺮﻓﺘﻪ ﺷﺪه اﻧﺪ و اﯾﻦ ﻓﺮآﯾﻨﺪ از ﻧﻈﺮ ﻫﻨﺪﺳﯽ، دو ﺗﺼﻮﯾﺮ ﻣﺮﺟﻊ و ﺣﺲ ﺷﺪه را ﻫﻢ ﺗﺮاز می ﮐﻨﺪ. اﯾﻦ ﻓﺮآﯾﻨﺪ، ﯾﮏ ﻣﺮﺣﻠﻪ ی ﭘﯿﺶ ﭘﺮدازش در ﺗﺤﻠﯿﻞ ﺗﺼﺎوﯾﺮاﺳﺖ.

در واﻗﻊ ﺷﺮاﯾﻂ ﻣﺨﺘﻠﻒ ﺗﺼﻮﯾﺮﺑﺮداری ﺳﺒﺐ اﯾﺠﺎد اﺧﺘﻼﻓﺎت ﻗﺎﺑﻞ ﺗﻮﺟﻪ ﺑﯿﻦ ﺗﺼﺎوﯾﺮمی ﺷﻮد و ﺑﻪ ﺻﻮرت ﮐﻠﯽ اﯾﻦ اﺧﺘﻼف را می ﺗﻮان ﺑﻪ ﭼﻬﺎردﺳﺘﻪ ی ﻫﻨﺪﺳﯽ، ﻣﺸﮑﻼت رادﯾﻮﻣﺘﺮی، ﻣﺸﮑﻼت ﺑﺎﻓﺖ و ﺗﻐﯿﯿﺮ ﻣﻨﺎﻇﺮ ﺗﻘﺴﯿﻢ ﮐﺮد. مشکلاتی ﻣﺎﻧﻨﺪ اﺧﺘﻼﻓﺎت ﻣﻘﯿﺎس ﺗﺼﺎوﯾﺮ، اﺧﺘﻼﻓﺎت ﭼﺮﺧﺸﯽ ﺗﺼﺎوﯾﺮ و ﺗﻐﯿﯿﺮ ﺷﮑﻞ ﻫﺎی ﻧﺎﺷﯽ از ﺗﻐﯿﯿﺮ ﻣﻮﻗﻌﯿﺖ اﺧﺬ ﺗﺼﻮﯾﺮ را مشکلات ﻫﻨﺪﺳﯽ ﻣﯽﮔﻮﯾﻨﺪ.
اﯾﻦ اﺧﺘﻼﻓﺎت در ﺗﺼﺎوﯾﺮ پزشکی، ﺑﺮ اﺳﺎس ﺣﺮﮐﺎت ﻏﯿﺮارادی (ﻣﺎﻧﻨﺪ ﺗﻨﻔﺲ، ﺿﺮﺑﺎن ﻗﻠﺐ و…) ﺣﺮﮐﺎت ارادی (ﻣﺎﻧﻨﺪ ﺟﺎﺑﺠﺎﯾﯽ ﺑﯿﻤﺎر) و در ﺗﺼﺎوﯾﺮ دﯾﮕﺮ ﺑﺮ اﺳﺎس ﺣﺮﮐﺖ دورﺑﯿﻦ ﺑﻪ وﺟﻮد ﻣﯽ آﯾﻨﺪ. ﻧﻮﯾﺰ، ﺗﻔﺎوت ﺷﺪت روﺷﻨﺎﯾﯽ، ﻣﻮﻗﻌﯿﺖ ﻣﻨﺎﺑﻊ روﺷﻨﺎﯾﯽ در ﺻﺤﻨﻪ و اﺧﺬ ﺗﺼﻮﯾﺮ درﺣﺴﮕﺮ ﻫﺎ و ﺑﺎﻧﺪﻫﺎی ﻃﯿﻔﯽ ﻣﺘﻔﺎوت، ﺳﺒﺐ اﯾﺠﺎد ﺗﻐﯿﯿﺮاﺗﯽ در ﺷﺪت روﺷﻨﺎﯾﯽ ﺗﺼﻮﯾﺮ می ﺷﻮد ﮐﻪ ﺑﻪ ﻣﺸﮑﻼت رادﯾﻮﻣﺘﺮی ﻣﻌﺮوف می ﺑﺎﺷﻨﺪ. ﺗﺼﺎوﯾﺮ، ﻣﻤﮑﻦ اﺳﺖ دارای ﺳﻄﻮﺣﯽ ﺑﺎ ﺑﺎﻓﺖ ﺿﻌﯿﻒ (ﻣﺎﻧﻨﺪ
درﯾﺎ ) ﺑﺪون ﺑﺎﻓﺖ و ﺑﺎﻓﺖ ﻫﺎی ﺗﮑﺮاری (ﻣﺎﻧﻨﺪ ﺳﺎﺧﺘﻤﺎن ﻫﺎی ﻣﺸﺎﺑﻪ) ﺑﺎﺷﺪ که مشکلات بافت نامیده می شوند. ویژگی های متحرک ( مانند حرکت وسایل نقلیه) و تغییراتی که در اثر گذر زمان در تصاویر (مانند تغییرات فصلی) وجود دارد، سبب تغییرات مناظر می شود. بر اساس مشکلات ذکر شده، جهت افزایش دقت در پردازش تصاویر، ضروری است فرآیند انطباق انجام شود. باید توجه کرد که هریک از الگوریتم های انطباق، تنها برای انطباق نوع مشخصی از تصاویر طراحی شده اند چرا که هر الگوریتم انطباق تصویر تنها برای حل نوع مشخصی از مشکلات هندسی، رادیو متری و مشکلات بافت و غیره کاربرد دارد.

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

نمودار تعداد مقالات بر حسب سال

 

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

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

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

2- کاربردهای انطباق تصویر

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

1-2- زوایای متفاوت

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

2-2- زمان های متفاوت

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

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

 

حسگرهای متفاوت

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

حالت های متفاوت تصویر شبکیه

 

4-2- انطباق تصویر به مدل

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

انطباق تصویر با حسگرهای متفاوت

 

3- انطباق تصاویر و مراحل آن

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

دیاگرام مراحل انطباق تصویر

1-3- شناسایی ویژگی ها

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

شناسایی ویژگی ها در تصویر مرجع و حس شده

 

1-1-3- روش های مبتنی بر ناحیه

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

2-1-3- روش های مبتنی بر ویژگی

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

– ویژگی های نقطه ای

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

شناساگر گوشه مُراوِک

ایده مُراوِک برای تشخیص گوشه، استفاده از یک پنجره ی باینری کوچک (برای مثال 3*3) با مرکزیت پیکسل مورد بررسی است. با حرکت دادن این پنجره در چهار جهت اصلی (u,v) = (1,0) , (1,1) , (-1,-1) , (0, 1) میزان تغییرات شدت روشنایی بررسی می شود. اگر این میزان، در چهار جهت بررسی شده نسبت به سایر همسایه ها بیشتر باشد، آن پیکسل به عنوان گوشه در نظر گرفته می شود. این شناساگر دارای نقاط ضعفی است عبارت اند از:

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

شناساگر هریس

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

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

الگوریتم تبدیل ویژگی مقیاس ثابت

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

فلورا دلینگر و همکاران در سال 2015 جهت بهبود الگوریتم SIFT در تصاویر سنجش از دور SAR روش SAR-SIFT را معرفی کردند. این روش از دو مرحله کلی تشکیل شده است که ابتدا از روش نسبت به جای روش تفاضل برای محاسبه گرادیان استفاده می کند که این سبب می شود مقدار گرادیان در مناطق همگن تحت شرایط بازتاب مختلف فرقی نداشته باشد. سپس برای تطبیق تصاویر سنجش از دور SAR از یک الگوریتم SIFT مانند استفاده می شود که در این الگوریتم، برای شناسایی نقاط کلیدی از فضای مقیاس لاپلاس گوسی و برای تعیین جهت و ایجاد توصیفگرها از یک پنجره ی مدور استفاده می کند. این روش جهت انطباق تصاویر با زاویه متفاوت مناسب نیست. وانگ و همکاران در سال 2012 روش BFSIFT برای انطباق تصاویر سنجش از دور SAR را پیشنهاد کردند. در این روش، برای حفظ جزئیات در تصاویر سنجش از دور SAR فضای مقیاس گوسی ناهمسانگرد جایگزین فضای مقیاس گوسی در الگوریتم SIFT شده است که این فضای مقیاس با استفاده از فیلتر دوطرفه ایجاد شده است. از مزایای این روش، کاهش اثر نویز اسپکل در انطباق تصویر است اما زمان اجرا آن زیاد می باشد. جیان وی فن و همکاران در سال 2015 روش تبدیل ویژگی مقیاس ثابت مبتنی بر انتشار غیرخطی و تجانس فاز را برای انطباق تصویر سنجش از دور SAR پیشنهاد کردند. در این روش از انتشار غیرخطی جهت حفظ جزئیات مهم و ظریف در تصویر و از عملگر نسبت میانگین وزن شده نمایی برای محاسبه اطلاعات گرادیان و سپس از تجانس فاز برای حذف نقاط پرت استفاده می کند. از مزایای این روش، اندازه گرادیان در مناطق همگن تحت شرایط بازتاب مختلف اندکی تفاوت دارد اما برای تعیین جهت گرادیان معیار مناسبی ندارد. فنگ وانگ و همکاران در سال 2015، روش تبدیل ویژگی مقیاس ثابت گوسی ناهمسانگرد وفقی را برای انطباق تصاویر سنجش از دور SAR پیشنهاد کردند. در این روش، از فیلتر گوسی ناهمسانگرد در فضای مقیاس SIFT و تطبیق پایداری جهت گیری متعادل به ترتیب برای حفظ لبه ها و جزئیات مهم تصویر و حذف تطبیق های نادرست استفاده می کند. در این روش لبه ها در تصویر سنجش از دور SAR حفظ می شوند و در نهایت باعث ارتقا دقت انطباق تصویر سنجش از دور SAR می شود اما در این روش اندازه گرادیان در مناطق همگن تحت شرایط بازتاب مختلف، متفاوت است.

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

در روشی برای استخراج ویژگی های SIFT با توزیع مکانی پیشنهاد شده است که در این روش به جای استخراج اکسترمم های تصویر DOG در همسایگی 26 تایی خود، همسایگی های بزرگتری (66 تایی) پیشنهاد کردند. با وجود مزایای این همسایگی بزرگ عتر، این روش دارای معایبی نیز می باشد. یکی از معایب این است که احتمال دارد باعث حذف بعضی از ویژگی های با کیفیت ولی با ساختار کوچک تصویر شوند. همچنین افزایش پیچیدگی محاسباتی آن نیز، بیشتر از الگوریتم SIFT پایه است. در روش SIFT تکرارشونده 

 

دو مثال از کاربردهای سیستم ایمنی مصنوعی

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

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

مثال (۱) : مدل تركيبي مبتني بر سيستم ايمني مصنوعي و اتوماتاي سلولي فازی (FCA-AIS)

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

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

سال ۲۰۰۳ تیمیس در مقاله ” A Comment on opt-AiNET: An Immune Network Algorithm for Optimisation” براي حل اين مشكل روشي ارائه نموده که با محاسبه ميزان وابستگي تناسبي، که با نرمال کردن مقادير وابستگي هر آنتي بادي در هر مرحله زماني بدست مي آيد تا اندازه اي اين مشکل حل شده است. همچنين جوادزاده در سال ۲۰۰۸ میلادی در مقاله “Hybrid Models based on Artificial Immune systems and Cellular Automata and Their Applications to Optimization Problems” مدل ترکيبيCA-AIS را به منظور تعيين پارامترهاي اساسي براساس ارزيابي وابستگي محلي توسط مفاهیم اتوماتای سلولی ارائه نموده است. اما هدف از ارائه مدل در مثال ارائه شده ، حل اين مشكل با استفاده از روش ارزيابي وابستگي محلي و همچنين دانش خبره مي باشد.

اتوماتای سلولی

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

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

اتوماتاي سلولي فازی

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

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

مدل ترکيبي مبتنی بر سيستم ايمني مصنوعي و اتوماتاي سلولي فازي(FCA-AIS)

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

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

 

همسایگی ون نیومن

 

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

نمایی از یک سلول در مدل ترکیبی FCA-AIS

براي تعيين نرخ ابر جهش با استفاده از FCA نياز به مشخص نمودن کيفيت وابستگي آنتي بادي ها، وجود دارد. براي اين منظور، از ميزان تعلق وابستگي آنتي بادي به مجموعه هاي فازي Near و Far استفاده مي شود که در نمودار ۱ نشان داده شده است. مرکز اين مجموعه ها بر ميزان وابستگي بهترين آنتي بادي در همسايگي آن آنتي بادي  منطبق شده است و ميزان ابر جهش بر اساس رابطه های (۱) و (۲) تعيين مي شود.

رابطه (۱) : If Affinity is Near then Mutatin is Low
رابطه (۲) : If Affinity is Far then Mutatin is High

 

توابع عضویت Near و Far

نمودار ۱ – توابع عضويت Near و Far

در توابع عضويت مجموعه هاي فازي Near و Far (نمودار ۱) ، Ab* بهترين آنتي بادي در همسايگي آنتي بادي مورد پردازش مي باشد، همچنين مقدار α برابر با قدرمطلق تفاضل بهترين و بدترين آنتي بادي  در همسايگي آنتي بادي  مورد نظر است. اين امر باعث مي شود دامنه توابع عضويت مجموعه هاي فازيNear و Far در روند تکاملي راه کار پيشنهادي به صورت پويا خود را با شرايط محيط وفق دهند. توابع عضويت Low و High در نمودار ۲ آمده است و نقاط a، b، c و d به ترتيب برابر مقادیر ۰، ۱ ، ۲ و ۳ انتخاب شده اند.

 

نمودار ۲ – توابع عضويت Low و Highنمودار ۲ – توابع عضويت Low و High

 

نتایج آزمایش ها

در اين بخش نتايج شبيه سازي سيستم ايمني مصنوعي مبتني بر اتوماتاي سلولي فازی (FCA-AIS)براي چهار تابع محك استاندارد (روابط ۳ تا ۶) که دارای بهینه سراسری در صفر است به ازاء كيفيت جواب بدست آمده در مقابل مدل ترکیبی سيستم ايمني مصنوعي ، اتوماتای سلولی و الگوريتم سيستم ايمني مصنوعي استاندارد مورد مطالعه قرار گرفته است.

براي ارزيابي راهکار پيشنهادي توابع مورد آزمايش به صورت سي بعدي و آنتي-بادي ها بصورت اعداد حقيقي کدگذاري شده اند و راهکار پيشنهادي با ۱۰۰ تکرار براي بدست آوردن پاسخ بهينه مورد آزمون قرار گرفته شده است. با توجه به ماهيت آزمون‌هاي آماري، پس از ۳۰ بار اجراي مكرر به ازاي هر تابع، از شاخص‌هاي بهترين پاسخ و ميانگين پاسخ‌ها براي مقايسه كارايي الگوريتم و از شاخص واريانس (كه يكي از شاخص‌هاي پراكندگي است) براي مقايسه پايداري استفاده شده است. نتايج شبيه‌سازي‌هاي انجام شده با استفاده از راه کار پيشنهادي، مدل ترکیبی سيستم ايمني مصنوعي و اتوماتای سلولی و الگوريتم سيستم ايمني مصنوعي به ترتيب در جدول های ۱ ، ۲ و ۳ آورده شده است.

 

روابط

 

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

تعداد سلول ها، پارامتري مهم است كه بر كارايي مدل FCA-AIS تاثير مستقيم دارد .نمودار ۳ تاثير تعداد سلول ها را بر سرعت همگرايي مدل پيشنهادي در بهینه یابی تابع نشان داده است. هر نقطه نشان داده شده در اين نمودارها ارزش بهترين جواب بدست آمده در هر تكرار الگوريتم را نشان مي دهد. نتايج شبيه سازي ها نشان داد با افزايش تعداد سلول ها، روند همگرايي به بهينه سراسري شتاب بخشيده مي شود. اما تا حدي افزايش تعداد سلول ها مي تواند بر سرعت همگرايي بيافزايد و با افزايش تعداد سلول ها از تعداد ۳۶ سلول، تاثير چشمگيري در سرعت رسيدن به بهينه سراسري مشاهده نمي شود و با توجه به حجم محاسبات کمتر، مدل با ۳۶ سلول  پیشنهاد می شود.

به منظور مطالعه تاثير شعاع همسايگي بر كارايي مدل پيشنهادي چندين شبيه سازي با شعاع همسایگی ۱ تا ۴ انجام شده كه نتايج آن در بهینه یابی تابع در نمودار ۴ ارائه شده است. نتايج شبيه سازي ها نشان مي-دهد كه مدل پيشنهادي FCA-AIS با شعاع همسايگي ۱ جواب هايي با كيفيتي قابل قبول توليد مي كند که در مقايسه با ديگر شعاع هاي همسايگي به دليل حجم محاسبات کمتر، داراي امتياز است.

 

جدول 1       جدول 2

 

جدول 3

 

نمودار 3            نمودار 4

 

نتيجه‌گيري

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

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

فرآیند فعال شدن سیستم ایمنی بدن انسان

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

 

الگوریتم انتخاب با تکثیر

الگوریتم انتخاب با تکثیر

 

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

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

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

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

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

سیگنال سازی سلول ها به دو دسته هورمونی و فیزیکی تقسیم بندی می شود. سیگنال سازی هورمونی امکان ارتباط بین سلول های دور از هم را بوسیله مولکول های کوچک و قابل حمل فراهم می سازد. سیگنال سازی فیزیکی ارتباط بین سلول ها را به صورت فیزیکی و مستقیم فراهم می سازد. این نوع سیگنال سازی بین سلول های T و سلول های عرضه کننده آنتی ژن امکان پذیر است. این روش با کمک سایتوکین ها صورت می پذیرد.

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

معرفی و تعریف سیستم های ایمنی مصنوعی

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

۱٫ تشخیص عیب (Fault Detection)
۲٫ تشخیص ناهنجاری (Anomaly Detection)
۳٫ تشخیص نفوذ (Intrusion Detection)
۴٫ امنیت اطلاعات (Information Security)
۵٫ مسائل بهینه سازی (Optimization Problems)
۶٫ دسته بندی الگوها (Patterns Classification)
۷٫ زمانبندی (Scheduling)
۸٫ خوشه بندی (Clustering)
۹٫ سیستم های یادگیرنده (Learning Systems)

سیستم ایمنی بدن و بالطبع سیستم ایمنی مصنوعی دارای ویژگی های ذیل است:

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

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

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

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

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

6. همکاری گروهی : در سیستم ایمنی سلول ها به صورت گروهی ، موازی و توزیع شده برای تشخیص و انهدام همکاری دارند.

7. چند لایه ای بودن : هیج موجودیتی در سیستم ایمنی و بدن انسان ، یک مکانیزم کامل امنیتی و دفاعی را فراهم نمی کند. بلکه هر لایه سیستم ایمنی به صورت مستقل عمل کرده و و با بقیه لایه ها در ارتباط است.

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

9. بهینه بودن منابع : در سیستم ایمنی با ایجاد مرگ و تکثیر سلولی ، همواره یک نمونه فضای کوچکی از فضای جستجوی آنتی ژن ها در هر زمان نگهداری می شود.

10. پاسخ انتخابی : در سیستم ایمنی ، پس از شناسایی یک آنتی ژن ، پاسخ های متفاوتی داه می شود و همواره به یک شکل عمل نمی شود.

برای حل یک مسئله با استفاده از سیستم ایمنی مصنوعی باید سه مرحله ذیل انجام پذیرد.
(۱) نحوه نمایش داده های مسئله یا تعریف فضای شکل.
(۲) معیار اندازه گیری میل ترکیبی.
(۳) انتخاب یک الگوریتم ایمنی مصنوعی برای حل مسئله.

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

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

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

تاریخچه سیستم های ایمنی مصنوعی

پایه های مدل سازی ریاضی بخش هایی از دستگاه ایمنی بدن در سال ۱۹۷۴ میلادی توسط نیلز جِرن انجام پذیرفته است.اولین ایده استفاده از فرآیندهای دستگاه ایمنی بدن در کاربردهای محاسباتی در سال ۱۹۸۶ میلادی توسط جان فارمر، نورمن پاکارد و آلن پِرِلسون مطرح گردید. آنها رفتار پویای سیستم ایمنی را با معادلات دیفرانسیل مدل کرده و نشان دادند که می توان از این مدل برای یادگیری مسائل استفاده نمود.

تا اوایل دهه ۹۰ میلادی بیشتر کاربردهای دستگاه ایمنی بدن در سیستم های محاسباتی ، شامل یکسری شبیه سازی هایی مانند شبیه سازی بیماری ایدز و مدلسازی ارتباطات سلولی بود و در ادامه با کارهای استفانی فارِست، هوگوس بِرسینی، جاناتان تیمیس، مارک نیل، دیپانکار داسگوپتا، لیندرو دی کاسترو بطور گسترده تری پیگیری شد.

در سال ۱۹۹۰ میلادی هوگوس بِرسینی و فراسیسکو وارِلا ایده شبکه های ایمنی که پیشتر توسط نیلز جِرن و آلن پرلسون در زمینه دستگاه ایمنی مطرح شده بود را برای سیستم های محاسباتی مطرح کردند.

فارِست و داسگوپتا تاکنون مطالعات گسترده ای درباره الگوریتم انتخاب منفی انجام داده اند و دی کاسترو مطالعاتی روی انتخاب مبتنی بر تکثیر انجام داده است. اولین کتاب درباره سیستم های ایمنی مصنوعی نیز در سال ۱۹۹۹ میلادی توسط داسگوپتا منتشر گردید.

در سال ۲۰۰۳ میلادی یووی آیلکین به همراه تیمی از اساتید و دانشجویان رشته های علوم کامپیوتر و ایمنی شناسی دانشگاه ناتینگهام انگلستان نظریه خطر را ارائه نموند که تاکنون این تیم گزارشات و مقالات متعددی در زمینه کاربرد نظریه خطر در سیستم های محاسباتی منتشر نموده اند.
سیستم ایمنی مصنوعی (AIS) قسمت 1
سیستم ایمنی مصنوعی (AIS) قسمت 2
سیستم ایمنی مصنوعی (AIS) قسمت 3
سیستم ایمنی مصنوعی (AIS) قسمت 4
سیستم ایمنی مصنوعی (AIS) قسمت 5
سیستم ایمنی مصنوعی (AIS) قسمت 6

برنامه نویسی Parallel در سی شارپ و آشنایی با کلاس Task در سی شارپ

در قسمت قبل گفتیم که بوسیله کلاس Parallel و متدهای For و ForEach عملیات پردازش بر روی مجموعه ها را به صورت Parallel انجام دهیم. اما بحث Parallel Programming به همین جا ختم نمی شود و راه های دیگری نیز برای برنامه نویسی Parallel وجود دارد. یکی از این روش ها استفاده از کلاس Task است که این کلاس نیز در فضای نام System.Threading.Tasks قرار دارد. حالت های مختلفی برای استفاده از این کلاس وجود دارد که ساده ترین آن استفاده از خصوصیت Factory و متد StartNew است که در زیر نمونه ای از نحوه ایجاد یک Task را مشاهده می کنید:

 
Task.Factory.StartNew(()  = &gt;
{
    Console.WriteLine("Task Started in Thread {0}", Thread.CurrentThread.ManagedThreadId);
    for (int i = 1; i  &lt; =  100; i++)
    {
        Console.WriteLine(i);
        Thread.Sleep(500);
    }
});

بوسیله کد بالا، یک Task جدید ایجاد شده که اعداد 1 تا 100 را در یک thread جداگانه در خروجی چاپ می شود. دقت کنید که بعد از اجرای برنامه شناسه Thread ای که Task در آن اجرا می شود با شناسه Thread اصلی برنامه متفاوت است. راهکار بعدی ایجاد یک شئ از روی کلاس Task و ارجرای آن است، در کد زیر Task بالا را به صورت ایجاد شئ ایجاد می کنیم:

 
Task task = new Task(()  = &gt;
{
    Console.WriteLine("Task Started in Thread {0}", Thread.CurrentThread.ManagedThreadId);
    for (int i = 1; i  &lt; = 100; i++)
    {
        Console.WriteLine(i);
        Thread.Sleep(500);
    }
});
 
task.Start();
Console.ReadKey();

زمانی که Task جدیدی ایجاد می کنید بوسیله متد Start که برای کلاس Task تعریف شده است می توانید عملیات اجرای Task را شروع کنید. یکی از خصوصیت های تعریف شده در کلاس Task، خصوصیت IsCompleted است که بوسیله آن می توان تشخیص داد که Task در حال اجراست یا خیر:

 
Task task = new Task(()  = &gt;
{
    Console.WriteLine("Task Started in Thread {0}", Thread.CurrentThread.ManagedThreadId);
    for (int i = 1; i &lt; =  100; i++)
    {
        Console.WriteLine(i);
        Thread.Sleep(500);
    }
});
 
task.Start();
while (!task.IsCompleted)
{
                 
}

دریافت خروجی از کلاس Task

می توان برای کلاس Task یک خروجی مشخص کرد، فرض کنید می خواهیم Task ای بنویسیم که میانگین حاصل جمع اعداد 1 تا 100 را حساب کرده و به عنوان خروجی بازگرداند. برای اینکار باید از کلاس Task که یک پارامتر جنریک دارد استفاده کنیم. ابتدا یک متد به صورت زیر تعریف می کنیم:

 
public static int CalcAverage()
{
    int sum = 0;
 
    for (int i = 1; i &lt; = 100; i++)
    {
        sum += i;
    }
 
    return sum/100;
}

در قدم بعدی می بایست یک Task جنریک از نوع int تعریف کنیم و به عنوان سازنده نام متد تعریف شده را به آن ارسال کنیم:

 
Task &lt; int &gt;  task = new Task &lt; int &gt; (CalcAverage);
task.Start();
 
Console.WriteLine("Average: {0}", task.Result);

در کلاس بالا بعد از Start کردن Task، بوسیله خصوصیت Result می توانیم نتیجه خروجی از Task را بگیریم، دقت کنید که زمانی که می خواهیم مقدار خروجی را از Task بگیریم، برنامه منتظر می شود تا عملیات Task به پایان برسد و سپس نتیجه در خروجی چاپ می شود.

به این موضوع توجه کنید که بوسیله متد StartNew نیز می توان Task هایی که پارامتر خروجی دارند تعریف کرد:

 
var task = Task.Factory.StartNew &lt; int &gt; (CalcAverage);

کد بالا دقیقاً کار نمونه قبلی را انجام می دهد، فقط به جای ایجاد شئ Task و فراخوانی آن، از متد StartNew استفاده کردیم.

ارسال پارامتر به Task ها

یکی از قابلیت های Task ها امکان ارسال State به متدی است که قرار است به عنوان Task اجرا شود. برای مثال، فرض کنید در مثال قبلی که Task ایجاد شده حاصل میانگین را حساب کرده و به عنوان خروجی بر میگرداند می خواهیم عدد شروع و پایان را مشخص کنیم، برای اینکار ابتدا یک کلاس به صورت زیر تعریف می کنیم:

 
public class TaskParameters
{
    public int Start { get; set; }
    public int Finish { get; set; }
}

در ادامه کد متد CalcAverage را به صورت زیر تغییر می دهیم:

 
public static int CalcAverage(object state)
{
    var parameters = (TaskParameters) state;
    int sum = 0;
 
    for (int i = parameters.Start; i &lt; = parameters.Finish; i++)
    {
        sum += i;
    }
 
    return sum/100;
}

در قدم بعدی باید روند ساخت شئ Task را به گونه ای تغییر دهیم که پارامترهای مورد نظر به عنوان state به متد CalcAverage ارسال شوند، برای اینکار به عنوان پارامتر دوم سازنده کلاس Task شئ ای از نوع TaskParameters به صورت زیر ارسال می کنیم:

 
Task &lt; int &gt; task = new Task &lt; int &gt; (CalcAverage, new TaskParameters()
{
    Start = 100,
    Finish = 1000
});

با انجام تغییرات بالا، توانستیم شئ ای را به عنوان State به Task ارسال کنیم، همچنین توجه کنید که امکان ارسال State بوسیله متد StartNew در خصوصیت Factory نیز وجود دارد. در این بخش با کلاس Task آشنا شدیم، در قسمت بعدی با نحوه متوقف کردن Task ها در زمان اجرا و کلاس CancellationToken آشنا می شویم.

منبع


قسمت اول آموزش-برنامه نویسی Asynchronous – آشنایی با Process ها، Thread ها و AppDomain ها

قسمت دوم آموزش- آشنایی با ماهیت Asynchronous در Delegate ها

قسمت سوم آموزش-آشنایی با فضای نام System.Threading و کلاس Thread

قسمت چهارم آموزش- آشنایی با Thread های Foreground و Background در دات نت

قسمت پنجم آموزش- آشنایی با مشکل Concurrency در برنامه های Multi-Threaded و راهکار های رفع این مشکل

قسمت ششم آموزش- آشنایی با کلاس Timer در زبان سی شارپ

قسمت هفتم آموزش-آشنایی با CLR ThreadPool در دات نت

قسمت هشتم آموزش- مقدمه ای بر Task Parallel Library و کلاس Parallel در دات نت

قسمت نهم آموزش- برنامه نویسی Parallel:آشنایی با کلاس Task در سی شارپ

قسمت دهم آموزش-برنامه نویسی Parallel در سی شارپ :: متوقف کردن Task ها در سی شارپ – کلاس CancellationToken

قسمت یازدهم آموزش- برنامه نویسی Parallel در سی شارپ :: کوئری های Parallel در LINQ

قسمت دوازدهم آموزش- آشنایی با کلمات کلیدی async و await در زبان سی شارپ

قسمت سیزدهم آموزش- استفاده از متد WhenAll برای اجرای چندین Task به صورت همزمان در سی شارپ

معرفی سیستم ایمنی مصنوعی(Artificial Immune System)

ایمنی از مولکول ها،سلول ها و قوانینی تشکیل شده که از آسیب رساندن عواملی مانند پاتوژن ها(Pathogens) به بدن جلوگیری می کند، قسمتی از پاتوژن به نام آنتی ژن(Antigen) که توسط این سیستم قابل شناسایی و موجب فعال شدن پاسخ سیستم ایمنی می شود. یک نمونه ای از پاسخ سیستم ایمنی ترشح آنتی بادی توسط سلول های B ،که آنتی بادی ها مولکول های شناساگری به شکل Y هستند که به سطح سلول های B متصل است و با یکسری قوانین از پیش تعریف شده آنتی ژن را شناسایی می کنند. مولکول های آنتی بادی قسمتی از آنتی ژن را به نام اپیتوپ شناسایی می کنند،ناحیه ای از آنتی بادی که وظیفه شناسایی و اتصال به آنتی ژن را دارد پاراتوپ گویند که با نام V شناخته می شود، که به منظور ایجاد بیشترین میزان تطابق با آنتی ژن ها می توانند شکل خود را تغییر دهند و به همین دلیل ناحیه متغیر نامیده می شود.

سیستم ایمنی مصنوعی

 

سطوح سیستم ایمنی

     1. اولين سطح – پوست

     2. دومین سطح – ايمني فيزيولوژيکي

  • اشک چشم ، بزاق دهان ، عرق و …

     3. سومین سطح – ایمنی ذاتی

  • پاسخ عمومی به آنتی ژن ها
  • بسیار کند

4. چهارمین سطح – ایمنی اکتسابی

  • پاسخ اختصاصی به آنتی ژن ها
  • بسیار سریع

سیستم ایمنی مصنوعی

ایمنی ذاتی(Innate Immunity)

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

 

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

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

 

ایمنی اکتسابی (Adaptive Immunity)

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

لنفسیت ها (Lymphocytes)

شناسایی آنتی ژن ها برعهده گلبول های سفید خون که لنفسیت نام دارد و دو نوع لنفسیت B و لنفسیت T داریم و در ادامه در مورد هر کدام توضیح خواهیم داد.

 لنفسیت های نوع B

 سلول های بنیادی که در مغز استخوان تولید می شوند و هر سلول B تعداد گیرنده سلولی (B-Cell Receptor) یا آنتی بادی(Antibody) در سطح خود دارد و هرکدام از این آنتی بادی ها دارای اشکال متفاوتی هستند که هر شکلی شبیه به سلول B را دارند و در نتیجه آنتی بادی هایی که توسط سلول B ساخته شده اند به مجموعه مشابهی از الگوهایی مولکولی متصل می شوند. آنتی بادی های سلول B دو ارزشی و دو عملکردی هستند، دو ارزشی به این دلیل که از طریق دو بازوی Fab به دو آنتی ژن متصل می شوند و از طریق قسمت FC به پذیرنده خاص روی سطح سلول های ایمنی دیگر وصل می شوند. اتصال به آنتی ژن دو نقش را بازی می کند که نقش اصلی آن برچسب زدن به آنتی ژن به عنوان یک مخرب تا مابقی سلول های سیستم ایمنی آن را تخریب کنند به این عملیات آماده مرگ می گویند، این کار با اتصال نواحی Fab آنتی بادی به آنتی ژن صورت می گیرد و ناحیه FC دستنخورده باقی می ماند تا اتصال با سلول های ایمنی دیگر مانند ماکروفاژها(Macrophages) صورت می پذیرد، یک آنتی بادی از دو زنجیره سبک مشابه (L) و دو زنجیره سنگین مشابه (H) تشکیل شده است که در شکل زیر نشان داده شده است.

 

سیستم ایمنی مصنوعی

 

لنفسیت های نوع T

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

سلول های T به چند دسته تقسیم می شوند: دسته اول سلول های T کشنده، زمانی که سلولی را شناسایی می کنند آن را از بین می برند. دسته دیگر سلول های T کمکی، آنتی بادی ها به سلول های B متصل هستند اما سلول های B آنتی ژن های خودی را از آنتی ژن های غیرخودی تشخیص نمی دهند به سلول T احتیاج دارند و پاسخ ایمنی سلول های B زمانی تولید می شود که سلول B و یک سلول T کمکی به طور همزمان یک آنتی ژن را شناسایی می کنند.

لنفسیت های نوع T

ویژگی های سیستم ایمنی بدن

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

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

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

3- قابلیت یادگیری: سیستم ایمنی بدن قادر است که ویروس های جدیدی را که مشاهده می کند به خاطر می سپارد.

4- همکاری گروهی: در سیستم ایمنی سلول ها به صورت گروهی، موازی و توزیع شده برای تشخیص و انهدام همکاری دارند.

5- چند لایه ای بودن: هیچ موجودیتی در سیستم ایمنی بدن انسان یک مکانیزم کامل امنیتی و دفاعی را فراهم نمی کند بلکه هر لایه سیستم ایمنی به صورت مستقل عمل کرده و با بقیه لایه ها در ارتباط است.

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

7- بهینه بودن منابع: در سیستم ایمنی با ایجاد مرگ سلولی و تکثیر سلولی، یک نمونه فضای کوچکی از فضای جستجوی آنتی ژن ها در هر زمان نگه داری می کنند.

8- پاسخ انتخابی: در سیستم ایمنی بدن پس از شناسایی یک آنتی ژن پاسخ های متفاوتی داده می شود که به یک شکل عمل نمی کنند.

9- تنظیم تعداد سلول های ایمنی توسط سیستم ایمنی

 سیستم ایمنی مصنوعی

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

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

AIS یکی از الگوریتم های الهام گرفته از سیستم ایمنی بدن انسان است و راه حل هایی را برای مسائل پیچیده ارائه داده اند و از جمله کاربردهای آن عبارتند از:

خوشه بندی (Clustering)

زمانبندی (Scheduling)

تشخیص عیب (Fault Detection)

تشخیص ناهنجاری (َAnomaly Detection)

امنیت اطلاعات (Security Infrmation)

مسائل بهینه سازی (Optimization problems)

دسته بندی الگوها (Patterns Classification)

سیستم های یادگیرنده (Learning system)

تشخیص نفوذ (Intrusion Detection)

مراحل سیستم ایمنی مصنوعی

 برای حل مساله با استفاده از  AIS باید 3 مرحله زیر انجام پذیرد:

1- نحوه نمایش داده های مساله (تعریف فضای شکل)

2- معیار اندازه گیری میل ترکیبی

3-انتخاب یک الگوریتم ایمنی مصنوعی برای حل مساله

فضای شکل (Shape Space)

سیستم ایمنی بر مبنای شناسایی الگو یا شناسایی شکل آنتی ژن است و می توان این سیسستم را فضایی مملوء از اشکال مختلف تشبیه کرد و هدف پیدا کردن مکمل اشکال و در نتیجه شناسایی آنها است، یعنی پیدا کردن تعدادی شکل بهینه یا آنتی بادی در فضای شکل که مکمل تمامی شکل های موجود در داده های مسئله آنتی ژن است. آنتی ژن ها به صورت آرایه ای از اعداد نمایش داده می شود و هر شیوه های که برای نمایش آنتی ژن استفاده می شود برای نمایش آنتی بادی هم نیز استفاده می شود (نحوه نمایش آنتی بادی و آنتی ژن یکسان است).

نحوه محاسبه و میل ترکیبی آنتی بادی با آنتی ژن

هر چه آنتی بادی میل ترکیبی بیشتری با آنتی ژن داشته باشد یعنی هر چه فاصله آنتی بادی و آنتی ژن کمتر شود مکمل بهتری برای آنتی ژن است و میل ترکیبی را می توان به صورت شباهت آرایه ها در نظر گرفت. که بر همین اساس در الگوریتم AIS از فاصله به عنوان معیار ارزیابی خوب یا بد بودن یک آنتی بادی استفاده می شود.

الگوریتم های AIS

الگوریتم های AIS به 3 دسته تقسیم می شوند:

1- دسته اول الگوریتم هایی که بر مبنای انتخاب کلونی سلول های B ایجاد شده اند.

2- دسته دوم الگوریتم هایی که بر مبنای انتخاب معکوس سلول های T ایجاد شده اند.

3- دسته سوم بر مبنای تئوری شبکه ایمنی ایجاد شده اند.

انتخاب کلونی (Clonal Selection)

زمانی که سلول B آنتی ژن را شناسایی می کند و سلول های B شروع به تکثیر شدن می کنند و تعداد زیادی سلول B یکسان و مشابه تولید می شود، 12 ساعت طول می کشد که یک سلول B رشد کرده و به دو سلول تبدیل شود و بعد از تحریک شدن دوره تکثیر حدودا یک هفته طول می کشد و از یک سلول 2 به توان 14 (16000) سلول مشابه تولید می شود و هر چه میل پیوندی بین سلول B و آنتی ژن بیشتر شود نرخ تکثیر بیشتر خواهد شد، در نتیجه سلول های B با میل پیوندی بالاتر، کلونی بیشتری تولید می کنند که اصل انتخاب کلونی نام دارد.

اصل انتخاب کلونی در AIS الگوریتم خاص خودش را دارد که بعد از تکثیر شدن سلول های B شروع به بالغ شدن می کنند که این فرایند در 3 مرحله صورت می پذیرد:

1- دگرگونی ایزوتایپ

2- بلوغ میل پیوندی

3- تصمیم گیری بین حافظه یا پلاسما شدن سلول B

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

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

انتخاب کلونی (Clonal Selection)

انتخاب معکوس (Negative Selection)

میل ترکیبی سلول های T نابالغ با سلول های موجود در تیموس بررسی می شود و هرکدام از سلول های T نابالغ میل ترکیبی زیادی با یکی از سلول ها داشته باشند حذف می شوند و سایر سلول های T وارد جریان خون می شوند که  به این گونه انتخاب در آن برای حدف شدن انتخاب می شود انتخاب معکوس گویند.

 

انتخاب معکوس (Negative Selection)

 

تئوری شبکه ایمنی (Immune Network Theory)

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

 

تئوری شبکه ایمنی (Immune Network Theory)

 

در هر الگوریتم AIS باید به 3 نکته توجه داشت:

1- در هر الگوریتم AIS باید حداقل یک جزء ایمنی مانند لنفسیت باشد.

2- در هر الگوریتم AIS باید ایده ای برگرفته از بیولوژی نظری یا تجربی باشد.

3- الگوریتم AIS که طراحی می شود باید به حل مسئله کمک کند.

مقایسه سیستم ایمنی طبیعی و الگوریتم های ایمنی مصنوعی

 

مقایسه سیستم ایمنی طبیعی و الگوریتم های ایمنی مصنوعی

 

برگرفته از پایان نامه بنت الهدی حلمی – دانشگاه علم و صنعت – تحت عنوان استخراج قوانین انجمنی با استفاده از سیستم ایمنی مصنوعی

استخراج قوانین انجمنی با استفاده از سیستم ایمنی مصنوعی

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

کاهش معناگری داده با استفاده از سیستم های ایمنی مصنوعی

 

منبع

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

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

همان طور که گفته شد ژن عددی از ۰ تا ۷ است که به معنی شماره سطری است که وزیر در آن قرار گرفته است. موقعیت ژن در یک کروموزوم به معنی شماره ستون قرار گیری وزیر است. مشخص کردن مکان قرار گیری هر وزیر را باید حتما در هر سطر و ستون مشخص کرد.

کروموزوم نیز مجموعه ای از ۸ ژن است. و این طور فرض می شود که هیچ ژنی در یک کروموزوم دوبار تکرار نشود. برای مثال اگر کروموزوم ما ۰|۱|۴|۲|۳|۶|۷|۵ باشد یعنی ۸ وزیر در خانه های زیر از ماتریس قرار گرفته اند.

(۰,۰), (۱,۱), (۲,۴), (۳,۲), (۴,۳), (۵,۶), (۶,۷), (۷,۵)

در اینجا میوتیشن با swap کردن ژنی که باید mutate شود با یک ژن تصادفی (به جز ژنی که می خواهیم میوتیشن را روی آن انجام دهیم) از همان کروموزوم انجام می شود.

در crossover ژن ها از کروموزوم های دو والدین با احتمال ۰٫۵ گرفته می شود. یک ژن از یکی از والدین گرفت می شود و به کروموزوم فرزند اضافه می شود. ژنی که تولید می شود در پرنت دیگر پاک می شود. این مرحله انقدر ادامه می یابد تا کروموزوم های پدر و مادر هر دو، خالی شود و فرزند آنها همه ژن ها را داشته باشد.

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

در کد c# مورد استفاده :

class GeneticAlgo: کلاسی است که مسئولیت همه عملیات الگوریتم ژنتیک را بر عهده دارد.

class FitnessComparator: یک کلاس مقایسه کننده است که کروموزوم ها را با fitness value مرتب می کند تا جمعیت نهایی را در جدول نشان دهد. بیشترین فیتنس در بالای جدول قرار می گیرد و کمترین آنها در پایین جدول.

struct Chromosome: ساختاری است که کروموزومی که حاوی ژنهااست، فیتنس و مجموع میانگین فیتنس ها را نشان می دهد.

class MainFrame: این کلاس موظف به کنترل اینترفیس کاربر و ایجاد جمعیت اولیه به منظور انتقال آن به الگوریتم ژنتیک است.

class Board: این کلاس گرافیک و عملیات صفحه شطرنج را بر عهده دارد.

متغیر private const int MAX_FIT = ۲۸ بیشترین مقدار فیتنس را دارد.

توابع:


private List&amp;lt;chromosome&amp;gt; GetInitialPopulation(int population)

{

List&amp;lt;chromosome&amp;gt; initPop = new List&amp;lt;chromosome&amp;gt;();

GeneticAlgo RandomGen = new GeneticAlgo();

for (int i = 0; i &amp;lt; population; i++)

{

List&amp;lt;int&amp;gt; genes = new List&amp;lt;int&amp;gt;(new int[] {0, 1, 2, 3, 4, 5, 6, 7});

Chromosome chromosome = new Chromosome();

chromosome.genes = new int[8];

for (int j = 0; j &amp;lt; 8; j++)

{

int geneIndex = (int)(RandomGen.GetRandomVal

(۰,genes.Count-1)+0.5);//randomly select a gene

chromosome.genes[j] = genes[geneIndex];

genes.RemoveAt(geneIndex);//remove selected gene

}

initPop.Add(chromosome);

}

return initPop;

}

 

تابع فوق اندازه جمعیت را به صورت پارامتر می گیرد و لیستی از کروموزوم هایی که دربردارنده ژن های تولید شده تصادفی هستند را بر می گرداند. مقدار ژن ها بصورت تصادفی از لیستی که شامل اعداد ۰ تا ۷ است انتخاب می شود. در حین اینکه مقادیر از لیست انتخاب می شوند، مقادیر انتخاب شده پاک می شوند تا از تکراری شدن ژن ها در کروموزوم جلوگیری شود. اندازه لیست مساوی با اندازه جمعیت است. پس از ایجاد جمعیت اولیه با استفاده از این تابع، لیست کروموزوم هایی که برمیگرداند به تابع DoMating داده می شود.


public void DoMating(ref List&amp;lt;Chromosome&amp;gt; initPopulation,

int generations, double probCrossver, double probMutation)

{

int totalFitness = 0;

CalcFitness(ref initPopulation, ref totalFitness);

for (int generation = 0; generation &amp;lt; generations; generation++)

{

PrepareRuletteWheel(ref initPopulation,totalFitness);

Crossover(ref initPopulation, probCrossver);

Mutate(ref initPopulation, probMutation);

CalcFitness(ref initPopulation, ref totalFitness);

if (initPopulation[initPopulation.Count – 1].fitness == 28)

break;

if (progress != null)

{

progress(generation + 1);

}

}

initPopulation.Sort(new FitnessComparator());

}
 

این تابع لیست کروموزوم ها را به عنوان جمعیت اولیه ، تعداد نسل هایی که می خواهیم در الگوریتم پخش شوند، احتمال crossover و احتمال mutation را به عنوان پارامتر می گیرد. مسئولیت این تابع هندل کردن پخش جمعیت به نسل مورد نیاز با فراخوانی توابع CalcFitness،PrepareRuletteWheel،CrossoverوMutate است.

 

public void CalcFitness(ref List&amp;lt;Chromosome&amp;gt; chromosome, ref int totalFitness)

{

int collisions = 0;

totalFitness = 0;

for (int k = 0; k &amp;lt; chromosome.Count; k++)

{

for (int i = 0; i &amp;lt; chromosome[k].genes.Length – 1; i++)

{

int x = i;

int y = chromosome[k].genes[i];

for (int j = i + 1; j &amp;lt; chromosome[k].genes.Length; j++)

{

if (Math.Abs(j – x) == Math.Abs

(chromosome[k].genes[j] – y))

collisions++;

}

}

Chromosome temp = chromosome[k];

temp.fitness = MAX_FIT – collisions;

chromosome[k] = temp;

totalFitness += chromosome[k].fitness;

collisions = 0;

}

}

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


private void PrepareRuletteWheel(ref List&amp;lt;Chromosome&amp;gt; parents,int total)

{

int currentTotalFitness=0;

for (int i = 0; i &amp;lt; parents.Count; i++)

{

currentTotalFitness += parents[i].fitness;

Chromosome temp = parents[i];

temp.cumAvgFitness = currentTotalFitness / (double)total;

parents[i] = temp;

}

}

rulette wheel که بر مبنای فیتنس کروموزوم است برای انتخاب والدین برای جفت گیری برای ایجاد نسل جدید استفاده می شود. این تابع مسئول آماده سازی rulette wheel بوده و لیستی از کروموزوم ها را به عنوان جمعیت فعلی و فیتنس کلی جمعیت می گیرد. این تابع نرخ فیتنس هر کروموزوم تا فیتنس کلی را محاسبه می کند سپس مجموع آن را برای اختصاص به مشخصه cumAvgFitness  کروموزوم محاسبه می کند.

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


public void Crossover(ref List&amp;lt;Chromosome&amp;gt; parents, double probability)

{

List&amp;lt;Chromosome&amp;gt; offspring = new List&amp;lt;Chromosome&amp;gt;();

for (int i = 0; i &amp;lt; parents.Count; i++)

{

if (Assay(probability)) //if the chance is to crossover

{

Chromosome parentX = AssayRuletteWheel(parents);

Chromosome parentY = AssayRuletteWheel(parents);

List&amp;lt;int&amp;gt; child = new List&amp;lt;int&amp;gt;();

for (int j = 0; j &amp;lt; 8; j++)

{

if (Assay(0.5)) //select from parentX

{

for (int k = 0; k &amp;lt; parentX.genes.Length; k++)

{

if (!child.Contains

(parentX.genes[k]))//instead of

//deleting the similar genes

//from parents select the

//next non-contained number

{

child.Add(parentX.genes[k]);

break;

}

}

}

else //select from parentY

{

for (int k = 0; k &amp;lt; parentY.genes.Length; k++)

{

if (!child.Contains

(parentY.genes[k]))//instead of

//deleting the similar genes from

//parents select the next

//non-contained number

{

child.Add(parentY.genes[k]);

break;

}

}

}

}

Chromosome offSpr = new Chromosome();

offSpr.genes = child.ToArray();

offspring.Add(offSpr);

}

else //else the chance is to clone

{

Chromosome parentX = AssayRuletteWheel(parents);

offspring.Add(parentX);

}

}

while (offspring.Count &amp;gt; parents.Count)

{

offspring.RemoveAt((int)GetRandomVal(0, offspring.Count – 1));

}

parents = offspring;

}

 

تابع فوق مسئول انجام عمل cross over است. تابع لیستی از کروموزم ها را به عنوان جمعیت فعلی و احتمال crossover را به عنوان پارامتر می گیرد. تابع Assay(int probability) با احتمال داده شده true بر می گرداند بنابراین با احتمال crossover برای تعیین اینکه عملیات crossover است یا cloning استفاده می شود.

if (Assay(probability)) //if the chance is to crossover

{

Chromosome parentX = AssayRuletteWheel(parents);

Chromosome parentY = AssayRuletteWheel(parents);

List<int> child = new List<int>();

for (int j = 0; j < 8; j++)

{

if (Assay(0.5)) //select from parentX

{

for (int k = 0; k < parentX.genes.Length; k++)

{

if (!child.Contains(parentX.genes[k]))//instead of

//deleting the similar genes from parents

//select the next non-contained number

{

child.Add(parentX.genes[k]);

break;

}

}

}

else //select from parentY

{

for (int k = 0; k < parentY.genes.Length; k++)

{

if (!child.Contains(parentY.genes[k]))//instead of

//deleting the similar genes from parents

//select the next non-contained number

{

child.Add(parentY.genes[k]);

break;

}

}

}

}

Chromosome offSpr = new Chromosome();

offSpr.genes = child.ToArray();

offspring.Add(offSpr);

}

این بخش از کد مسئول crossover دو پرنت parentX  و parentY می باشد. به منظور ایجاد فرزند، ژنها از دو والدین با احتمال ۰٫۵ انتخاب می شوند در حالیکه از تکرار ژنها در کروموزوم ها اجتناب می شود. در عملیات cloning یکی از والدین مستقیما به نسل بعدی آورده می شود.


public void Mutate(ref List&amp;lt;Chromosome&amp;gt; parents, double probability)

{

List&amp;lt;Chromosome&amp;gt; offsprings = new List&amp;lt;Chromosome&amp;gt;();

for (int i = 0; i &amp;lt; parents.Count; i++)

{

Chromosome offspring = parents[i];

for (int mutatePosition = 0; mutatePosition &amp;lt; 8; mutatePosition++)

{

if (Assay(probability)) //if the chance is to mutate

{

int newGeneIndex = (int)(GetRandomVal(0,6)+0.5);

if (newGeneIndex&amp;gt;=mutatePosition)

{

newGeneIndex += 1;

}

int swapTemp = offspring.genes[mutatePosition];

offspring.genes[mutatePosition] =

offspring.genes[newGeneIndex];

offspring.genes[newGeneIndex] = swapTemp;

}

}

offsprings.Add(offspring);

}

parents = offsprings;

}
 

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

زمانی که به یک راه حل می رسیم آرایه ژن های کروموزومی که شامل راه حل هستند را میتوان به پراپرتی به نام Genes  در کلاس Board اختصاص داد.

این برنامه این امکان را می دهد که اندازه جمعیت، تعداد نسل ها، احتمال crossover و احتمال mutation را مشخص کنید.

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

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

این سوال ها سالها مطرح بوده است که بین crossover و mutation کدامیک بهتر است؟ کدامیک لازم است؟ کدامیک اصلی است؟ پاسخی که تاکنون بیشتر از بقیه پاسخها مورد قبول بوده این است که هر کدام نقش مخصوص خود را دارد. در حالت کلی بهتر است از هر دو استفاده شود. میتوان الگوریتمی داشت که فقط از mutation استفاده کند ولی الگوریتمی که فقط ازcrossover   استفاده کند کار نخواهد کرد. Crossover خاصیت جستجوگرانه و یا explorative دارد. میتواند با انجام پرشهای بزرگ به محل هائی دربین والدین رفته و نواحی جدیدی را کشف نماید. Mutation خاصیت گسترشی و یا  exploitive  دارد. میتواند با انجام تغییرات کوچک تصادفی به نواحی کشف شده وسعت ببخشد.  Crossoverاطلاعات والدین را ترکیب میکند درحالیکه mutation  میتواند اطلاعات جدیدی اضافه نماید. رسیدن به یک پاسخ بهینه در mutation شانسی است.

نتایج اجرای این الگوریتم نشان می دهد که جمعیت عامل بسیاری مهمی بوده و تاثیر زیادی دارد و crossover probability و mutation rate تاثیر غیر قابل انکاری بر اجرای الگوریتم ژنتیک دارند زیرا با هر بار تغییر در هر یک از این پارامترها نتایج به شدت تغییر می کند. در حقیقت نحوه انتخاب اپراتورهای GA یک تریدآف بین همگرایی سریع تر و حفظ قابلیت اکتشافی بودن الگوریتم (برای جلوگیری از همگرایی اشتباه) است. Crossover پارامتری است که به تنظیم رفتار الگوریتم ژنتیک کمک می کند. کم کردن احتمال crossover باعث می شود در نسل بعدی افراد بیشتری بدون تغییر باقی بمانند. بسته به مسئله کاهش یا افزایش مقدار احتمال crossover می تواند تاثیر مثبت یا منفی داشته باشد.

پس از اجراهای متوالی الگوریتم می توان دید که هیچ جوابی وجود ندارد گه به طور قطع بتوان گفت از بقیه بهتر است و بتوان گفت که مقدار تنظیم شده برای پارامترهای الگوریتم ژنتیک در این حالت از همه بهتر است. این بهترین مقادیر به عوامل زیادی وابسته هستند. برای مثال اگر الگوریتم شما generational است میخواهید احتمالی را برای این در نظر بگیرید که برخی از والدین بدون تغییر باقی بمانند. در غیر اینصورت برخی راه حل های خوب را از دست خواهید داد. بنابراین بهتر است crossover rate را نزدیک به ۰٫۷ تنظیم کرد. برخی از الگوریتم ها نیز هستند که به طور کامل به mutation وابسته اند و برای آنها crossover rate مساوی با ۰ در نظر گرفته می شود. اگر crossover probability برابر با ۱۰۰درصد باشد همه فرزندان توسط crossover ایجاد می شوند. اگر ۰ درصد باشد همه نسل جدید کپی دقیقی از کروموزوم فعلی جمعیت قدیمی است ولی به این معنی نیست که نسل جدید دقیقا همان نسل قبلی است.

انتخاب اپراتورهای الگوریتم توازنی میان سرعت و دقت همگرایی است یعنی exploration در مقابل exploitation.

اینطور که گفته شده بهتر است mutation بین ۰٫۰۱۵ تا ۰٫۰۲ باشد. چرا؟

Exploration یعنی جستجوی فضای حالت در حد امکان در حالی که exploitation یعنی تمرکز بر یک نقطه که امیدواریم global optimum باشد.

در GA اپراتورهای mutation اغلب برای exploration و اپراتور های Crossover اغلب برای exploitation یعنی هدایت جمعیت به سوی همگرایی به یک راه حل خوب استفاده می شوند. در نتیجه وقتی Crossover سعی در همگرایی به یک نقطه مشخص دارد mutation سعی خود را می کند که همگرایی صورت نگیرد و فضای بیشتری کاوش شود.

در ابتدای فرایند جستجو ترجیح ما بر این است که جستجوی بیشتری به منظور اکتشاف فضا صورت گیرد. از طرف دیگر در انتهای فرایند جستجو exploitations بیشتری ترجیح داده می شود که همگرایی جمعیت به سمت global optimum تضمین شود. تنها یک استثناء وجود دارد؛ زمانی که جمعیت به سمت بهینه محلی همگرا می شود اگر بتوانیم باید پراکندگی حمیت را افزایش دهیم تا فضای بیشتری جستجو شود و در دام بهینه محلی نیفتد. با توجه به این نکته mutation rate بالا باعث افزایش احتمال جستجوی فضای بیشتری از فضای جستجو می شود با این حال از همگرایی جمعیت به یک جواب بهینه جلوگیری می کند. از طرف دیگر اگر mutation rate خیلی کوچک باشد باعث همگرایی زودهنگام و نارس می شود و به حای رسیدن به global optimum در دام بهینه محلی گرفتار می شود.مقداری که انتخاب می شود به ماهیت مسئله و نحوه پیاده سازی الگوریتم بستگی دارد. پس mutation rate های بسیار بالا از همگرایی الگوریتم جلوگیری کرده و رسیدن به راه حل بهینه را تضمین نمی کنند. بنابراین عاقلانه تر این است که از mutation rate های کوچک تر استفاده شود. مقدار کوچک برای mutation rate تضمین می کند که میوتیشن های زیادی در آن واحد اتفاق نیفتد ولی این نیز به تعداد ژن های موجود در هر کروموزوم از جمعیت بستگی دارد. بهتر این است که با مقادیر کم شروع کرده و به تدریج آنها را افزایش داد و کارایی هر یک را بررسی کرد مثلا به ترتیب: ۰٫۰۰۱، ۰٫۰۱، ۰٫۰۵، ۰٫۱، ۰٫۲ و … . در رابطه با جستجو در فضای حالت در مقایسه با mutation rate بالاتر، جمعیت بزرگتر ترجیح داده می شود.

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

Exploitation = (crossover +  انتخاب بر اساس فیتنس) ما را به جواب بهینه نهایی می رساند.

این طور گفته می شود که اندازه جمعیت کوچکتر سرعت همگرایی بیشتری به الگوریتم می دهد ولی الگوریتم راحتتر در بهینه محلی گرفتار می شود. احتیاط بر این است که از جمعیت های بیش از حد کوچک استفاده نشود. معمولا به احتمال crossover و mutation بسیار بزرگ نیاز نخواهید داشت و جمعیتی با اندازه متوسط مناسب است.

است.
مسئله چند وزیر قسمت 1
مسئله چند وزیر قسمت 2
مسئله چند وزیر قسمت 3
مسئله چند وزیر قسمت 4