وبلاگ دانشجویان معماری مرند

وبلاگ دانشجویان معماری مرند

خدمات توسعه نرم افزار - برنامه نویسی - بومی سازی - مدیریت اطلاعات

دستیابی به نرم افزارهای کارا و با کیفیت مناسب و پاسخگوی همه نیازهای موجود، برخلاف ظاهر ساده آن، کاری بس دشوار است. با توجه به حجم زیادی از نرم افزارهای کاربردی در زمینه های مختلف حسابداری، انبارداری، حقوق و دستمزد، اتوماسیون اداری، اتوماسیون صنعتی، گردش کار، مدیریت اطلاعات، مدیریت منابع انسانی و ... که هریک با توجه به زمینه تخصصی نرم افزار دارای مزایا و معایبی هستند، همواره نیاز به تولید نرم افزار برحسب نیازهای فعلی مجموعه شما و سفارشی کردن قابلیتهای استاندارد نرم افزارهای موجود از موارد اجتناب ناپذیر در صنعت نرم افزار بوده است. تولید نرم افزار فرآیندی است که در صورت عدم مبتنی بودن بر فرآیندهای مهندسی نرم افزار ، نه تنها از مسیر اصلی خود که دستیابی به یک نرم افزار کارآمد جهت مدیریت امور در نظر گرفته شده می باشد، دور می شویم ، بلکه مشکلات مجموعه ، نسبت به حالت سنتی، گاهی تا چندین برابر افزایش می یابد. از طرفی نگهداری نرم افزار که همواره یکی از مهمترین خدماتی است که باید به مشتری ارائه شود، به سختی انجام شده و در پاره ای از مواقع غیر ممکن می شود. تحلیل و طراحی دقیق و مبتنی بر بررسی نیازهای مشتری اولین گام و مهمترین گام در فرآیند تولید و توسعه نرم افزار می باشد. این تحلیل و طراحی باید بگونه ای انجام شود که نیازهایی که مشتری به علل مختلف از قبیل عدم آشنایی با سیستم های نرم افزاری با آنها برخورد نداشته است و تولید کننده نرم افزار به علت عدم آشنایی با فرآیند کاری مشتری شناختی نسبت به آن نداشته است، به راحتی ، در طی زمانی کوتاه و با هزینه کم قابل تعبیه در سیستم باشد. انتخاب بستر مناسب جهت تولید نرم افزار یکی دیگر از گامهای اساسی در تولید نرم افزار می باشد. انتخاب زبانهای برنامه نویسی مناسب و به روز، تکنیکهای پیشرفته ذخیره سازی و بازیابی اطلاعات ، نوع پایگاه داده مورد استفاده در تولید و ... همگی از عوامل تاثیر گذار در محصول تولید شده می باشند. آی تی ریسرچز با در اختیار داشتن نیروهای کارآمد و متخصص جوان و مجرب در امر توسعه و تولید نرم افزار با استفاده از آخرین دانش و تکنولوژی روز سعی نموده است تا با ارائه خدمات حرفه ای به شرکتها ، موسسات و اشخاص حقیقی و حقوقی در جهت رفع نیازهای نرم افزاری و ایجاد بستر مناسب IT قدم بردارد این شرکت با تکیه بر اصول مهندسی نرم افزار و با استفاده از جدیدترین و مناسبترین روشها آمادگی دارد طراحی ، برنامه نویسی و اجرائی نمودن پروژه های نرم افزاری را طبق نیازهای واقعی شما بعهده گیرد . خدمات قابل ارائه در بخش نرم افزار به شرح زیر می باشد : طراحی و برنامه نویسی کلیه نرم افزارهای مبتنی بر وب ( Web Application) طراحی و برنامه نویسی کلیه نرم افزارها تحت ویندوز ( Windows Application ) طراحی و برنامه نویسی کلیه نرم افزارهای قابل اجرا بروی انواع تلفن های همراه (Mobile Application) یک پروژه نرم افزاری زمانی موفق و اجرایی می شود که کلیه نیازهای سیستم ( حال و آینده ) در آن دیده شده و قبل از اقدام به برنامه نویسی و اجرایی نمودن آن ، و بعد از پیاده سازی کلیه نیازها ، امکان بسط و گسترش موضوعی امکان پذیر باشد ، و کلیه موارد تجزیه و تحلیل شده و مناسبترین شیوه در طراحی و برنامه نویسی آن اجرا گردد و در جهت رعایت حقوق مشتری ، تضمین ارائه خدمات سرویسهای پشتیبانی و تضمین کیفیت ، پس از استقرار نرم افزار انجام گردد . این شرکت با تکیه بر تجربه خود در زمینه پیاده سازی و تولید نرم افزار و برنامه کاربردی و با بهره گیری از کارشناسان خبره در امور تحلیل و طراحی سیستم و برنامه نویسی، این توانمندی را در مجموعه نرم افزاری خود ایجاد نموده است تا نسبت به اجرا و پیاده سازی برنامه های کاربردی به سفارش مشتری با استفاده از سبکهای مختلف معماری نرم افزار، در حوزه های مختلف اقدام نماید استفاده از تکنولوژی و متدولوژی های روز دنیا در طراحی و پیاده سازی نرم افزار و همچنین بکارگیری سبکهای نوین معماری نرم افزار همواره در پروژه های نرم افزاری و تولید سامانه های اطلاعاتی این شرکت مدنظر بوده است. طراحی و ایجاد سامانه های اطلاعاتی، پیاده سازی سیستم نرم افزاری اطلاعات مدیریت، سیستم های مدیریت محتوا، سامانه های هوشمند، سیستم های نرم افزاری مدیریت و کنترل پروژه برای مشتریان متعدد از جمله زمینه های فعالیت شرکت درحوزه تولید برنامه های کاربردی خاص است. تفاوت ما با اغلب شرکت های تولید کننده نرم افزار در این است که ما محصولات نرم افزاری خود را اغلب بصورت یک بسته یا پکیج نرم افزاری به فروش نمی گذاریم بلکه هر محصول نرم افزاری را براساس نیاز مشتری بومی سازی (Customize) می نماییم . اغلب سازمانها، مراکز و شرکتهای ایرانی در فرآیندهای داخلی خود، نیازمندیهای خاص خود را دارند که می بایست در سیستم های نرم افزاری آنها پیش بینی گردد و خرید محصولات نرم افزاری آماده بصورت بسته نرم افزاری جوابگوی نیاز آنها نیست. بدین منظور ما نیازمندیهای خاص مشتریان را در نرم افزار بومی سازی نموده و در غالب برنامه های کاربری خاص به آنها ارائه می کنیم. لیست برخی از خدمات ما در این زمینه به شرح زیر است : تولید نرم افزار کاربردی سفارش مشتری (سامانه هوشمند ، سیستم مدیریت دانش ، سامانه اطلاعات مدیریت ، سیستم مدیریت محتوا و ...) - معماری نرم افزار و معماری اطلاعات - نیازسنجی - تحلیل و طراحی - پیاده سازی و برنامه نویسی - کنترل کیفیت - استقرار، نصب و راه اندازی - آموزش راهبری و کاربری - پشتیبانی و نگهداری فنی - مدیریت پروژه نرم افزاری طراحی وب و پورتال - طراحی وب سایت - سیستم مدیریت محتوا (CMS) - پورتال (پرتال) سازمانی - بهینه سازی وب سایت در موتورهای جستجو (SEO) پیاده سازی راه حل های جامع فناوری اطلاعات مبتنی بر وب مشاوره و مدیریت پروژه فناوری اطلاعات گرافیک ، هنر دیجیتال و مولتی مدیا هوشمند سازی و بکارگیری سیستم مدیریت دانش بومی سازی (Customization) نرم افزار های خارجی بر اساس نیاز سازمان ها ارائه سرویس ها و خدمات Online طراحی و بکارگیری پایگاه و بانک اطلاعاتی

+ نوشته شده در  چهارشنبه نوزدهم فروردین ۱۳۹۴ساعت 16:57  توسط ادمین  | 

سیستم های فازی

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

+ نوشته شده در  چهارشنبه نوزدهم فروردین ۱۳۹۴ساعت 16:55  توسط ادمین  | 

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

الگوریتم های ژنتیک (به انگلیسی: Genetic Algorithm)، (با نماد اختصاری GA) تکنیک جستجویی در علم رایانه برای یافتن راه‌حل تقریبی برای بهینه‌سازی و مسائل جستجو است. الگوریتم ژنتیک نوع خاصی از الگوریتم‌های تکامل است که از تکنیک‌های زیست‌شناسی فرگشتی مانند وراثت و جهش استفاده می‌کند. این الگوریتم برای اولین بار توسط جان هلند معرفی شد. در واقع الگوریتم‌های ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیش‌بینی یا تطبیق الگو استفاده می‌کنند. الگوریتم‌های ژنتیک اغلب گزینه خوبی برای تکنیک‌های پیش‌بینی بر مبنای رگرسیون هستند. در هوش مصنوعی الگوریتم ژنتیک (یا GA) یک تکنیک برنامه‌نویسی است که از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده می‌کند. مسئله‌ای که باید حل شود دارای ورودی‌هایی می‌باشد که طی یک فرایند الگوبرداری شده از تکامل ژنتیکی به راه‌حلها تبدیل می‌شود سپس راه حلها بعنوان کاندیداها توسط تابع ارزیاب (Fitness Function) مورد ارزیابی قرار می‌گیرند و چنانچه شرط خروج مسئله فراهم شده باشد الگوریتم خاتمه می‌یابد. الگوریتم ژنتیک بطور کلی یک الگوریتم مبتنی بر تکرار است که اغلب بخش‌های آن به صورت فرایندهای تصادفی انتخاب می‌شوند. این الگوریتم‌ها از بخش‌های زیر تشکیل می‌شوند: تابع برازش - نمایش – انتخاب – تغییر مقدمه هنگامی که لغت تنازع بقا به کار می‌رود اغلب بار ارزشی منفی آن به ذهن می‌آید. شاید همزمان قانون جنگل به ذهن برسد و حکم بقای قوی‌ترها! البته همیشه هم قوی‌ترین‌ها برنده نبوده‌اند. مثلاً دایناسورها با وجود جثه عظیم و قوی‌تر بودن در طی روندی کاملاً طبیعی بازیِ بقا و ادامه نسل را واگذار کردند در حالی که موجوداتی بسیار ضعیف‌تر از آنها حیات خویش را ادامه دادند. ظاهراً طبیعت، بهترین‌ها را تنها بر اساس هیکل انتخاب نمی‌کند! در واقع درست‌تر آنست که بگوییم طبیعت مناسب ترین‌ها (Fittest) را انتخاب می‌کند نه بهترین‌ها. قانون انتخاب طبیعی بدین صورت است که تنها گونه‌هایی از یک جمعیت ادامه نسل می‌دهند که بهترین خصوصیات را داشته باشند و آنهایی که این خصوصیات را نداشته باشند به تدریج و در طی زمان از بین می‌روند. الگوریتم‌های ژنتیک یکی از الگوریتم‌های جستجوی تصادفی است که ایده آن برگرفته از طبیعت می‌باشد. الگوریتم‌های ژنتیک برای روش‌های کلاسیک بهینه‌سازی در حل مسائل خطی، محدب و برخی مشکلات مشابه بسیار موفق بوده‌اند ولی الگوریتم‌های ژنتیک برای حل مسائل گسسته و غیر خطی بسیار کاراتر می‌باشند. به عنوان مثال می‌توان به مسئله فروشنده دوره گرد اشاره کرد. در طبیعت از ترکیب کروموزوم‌های بهتر، نسل‌های بهتری پدید می‌آیند. در این بین گاهی اوقات جهش‌هایی نیز در کروموزوم‌ها روی می‌دهد که ممکن است باعث بهتر شدن نسل بعدی شوند. الگوریتم ژنتیک نیز با استفاده از این ایده اقدام به حل مسائل می‌کند. روند استفاده از الگوریتم‌های ژنتیک به صورت زیر می‌باشد: الف) معرفی جواب‌های مسئله به عنوان کروموزوم ب) معرفی تابع فیت نس ج) جمع‌آوری اولین جمعیت د) معرفی عملگرهای انتخاب ه) معرفی عملگرهای تولید مثل در الگوریتم‌های ژنتیک ابتدا به طور تصادفی یا الگوریتمیک، چندین جواب برای مسئله تولید می‌کنیم. این مجموعه جواب را جمعیت اولیه می‌نامیم. هر جواب را یک کروموزوم می‌نامیم. سپس با استفاده از عملگرهای الگوریتم ژنتیک پس از انتخاب کروموزوم‌های بهتر، کروموزوم‌ها را باهم ترکیب کرده و جهشی در آنها ایجاد می‌کنیم. در نهایت نیز جمعیت فعلی را با جمعیت جدیدی که از ترکیب و جهش در کروموزوم‌ها حاصل می‌شود، ترکیب می‌کنیم. مثلاً فرض کنید گونه خاصی از افراد، هوش بیشتری از بقیه افرادِ یک جامعه یا کولونی دارند. در شرایط کاملاً طبیعی، این افراد پیشرفت بهتری خواهند کرد و رفاه نسبتاً بالاتری خواهند داشت و این رفاه، خود باعث طول عمر بیشتر و باروری بهتر خواهد بود (توجه کنید شرایط، طبیعیست نه در یک جامعه سطح بالا با ملاحظات امروزی؛ یعنی طول عمر بیشتر در این جامعه نمونه با زاد و ولد بیشتر همراه است). حال اگر این خصوصیت (هوش) ارثی باشد بالطبع در نسل بعدی همان جامعه تعداد افراد باهوش به دلیل زاد و ولد بیشترِ این‌گونه افراد، بیشتر خواهد بود. اگر همین روند را ادامه دهید خواهید دید که در طی نسل‌های متوالی دائماً جامعه نمونه ما باهوش و باهوش‌تر می‌شود. بدین ترتیب یک مکانیزم ساده طبیعی توانسته است در طی چند نسل عملاً افراد کم هوش را از جامعه حذف کند علاوه بر اینکه میزان هوش متوسط جامعه نیز دائماً در حال افزایش است. بدین ترتیب می‌توان دید که طبیعت با بهره‌گیری از یک روش بسیار ساده (حذف تدریجی گونه‌های نامناسب و در عین حال تکثیر بالاتر گونه‌های بهینه)، توانسته است دائماً هر نسل را از لحاظ خصوصیات مختلف ارتقاء بخشد. البته آنچه در بالا ذکر شد به تنهایی توصیف کننده آنچه واقعاً در قالب تکامل در طبیعت اتفاق می‌افتد نیست. بهینه‌سازی و تکامل تدریجی به خودی خود نمی‌تواند طبیعت را در دسترسی به بهترین نمونه‌ها یاری دهد. اجازه دهید تا این مسأله را با یک مثال شرح دهیم: پس از اختراع اتومبیل به تدریج و در طی سال‌ها اتومبیل‌های بهتری با سرعت‌های بالاتر و قابلیت‌های بیشتر نسبت به نمونه‌های اولیه تولید شدند. طبیعیست که این نمونه‌های متأخر حاصل تلاش مهندسان طراح جهت بهینه‌سازی طراحی‌های قبلی بوده‌اند. اما دقت کنید که بهینه‌سازی یک اتومبیل، تنها یک «اتومبیل بهتر» را نتیجه می‌دهد. اما آیا می‌توان گفت اختراع هواپیما نتیجه همین تلاش بوده است؟ یا فرضاً می‌توان گفت فضاپیماها حاصل بهینه‌سازی طرح اولیه هواپیماها بوده‌اند؟ پاسخ اینست که گرچه اختراع هواپیما قطعاً تحت تأثیر دستاوردهای‌های صنعت اتومبیل بوده است؛ اما به‌هیچ وجه نمی‌توان گفت که هواپیما صرفاً حاصل بهینه‌سازی اتومبیل و یا فضاپیما حاصل بهینه‌سازی هواپیماست. در طبیعت هم عیناً همین روند حکم‌فرماست. گونه‌های متکامل‌تری وجود دارند که نمی‌توان گفت صرفاً حاصل تکامل تدریجی گونه قبلی هستند. در این میان آنچه شاید بتواند تا حدودی ما را در فهم این مسأله یاری کند مفهومیست به نام تصادف یا جهش. به عبارتی طرح هواپیما نسبت به طرح اتومبیل یک جهش بود و نه یک حرکت تدریجی. در طبیعت نیز به همین گونه‌است. در هر نسل جدید بعضی از خصوصیات به صورتی کاملاً تصادفی تغییر می‌یابند سپس بر اثر تکامل تدریجی که پیشتر توضیح دادیم در صورتی که این خصوصیت تصادفی شرایط طبیعت را ارضا کند حفظ می‌شود در غیر این‌صورت به شکل اتوماتیک از چرخه طبیعت حذف می‌گردد. در واقع می‌توان تکامل طبیعی را به این‌صورت خلاصه کرد: جستجوی کورکورانه (تصادف یا Blind Search) + بقای قوی‌تر. حال ببینیم که رابطه تکامل طبیعی با روش‌های هوش مصنوعی چیست. هدف اصلی روش‌های هوشمندِ به کار گرفته شده در هوش مصنوعی، یافتن پاسخ بهینه مسائل مهندسی است. بعنوان مثال اینکه چگونه یک موتور را طراحی کنیم تا بهترین بازدهی را داشته باشد یا چگونه بازوهای یک ربات را متحرک کنیم تا کوتاه‌ترین مسیر را تا مقصد طی کند (دقت کنید که در صورت وجود مانع یافتن کوتاه‌ترین مسیر دیگر به سادگی کشیدن یک خط راست بین مبدأ و مقصد نیست) همگی مسائل بهینه‌سازی هستند. روش‌های کلاسیک ریاضیات دارای دو اشکال اساسی هستند. اغلب این روش‌ها نقطه بهینه محلی (Local Optima) را بعنوان نقطه بهینه کلی در نظر می‌گیرند و نیز هر یک از این روش‌ها تنها برای مسأله خاصی کاربرد دارند. الگوریتم ژنتیک چیست؟ الگوریتم‌های ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیش‌بینی یا تطبیق الگو استفاده می‌کنند. الگوریتم‌های ژنتیک اغلب گزینه خوبی برای تکنیک‌های پیش‌بینی بر مبنای رگرسیون هستند. برای مثال اگر بخواهیم نوسانات قیمت نفت را با استفاده از عوامل خارجی و ارزش رگرسیون خطی ساده مدل کنیم، این فرمول را تولید خواهیم کرد: قیمت نفت در زمان t = ضریب ۱ نرخ بهره در زمان t + ضریب ۲ نرخ بیکاری در زمان t + ثابت ۱. سپس از یک معیار برای پیدا کردن بهترین مجموعه ضرایب و ثابت‌ها جهت مدل کردن قیمت نفت استفاده خواهیم کرد. در این روش ۲ نکته اساسی وجود دارد. اول این که روش خطی است و مسئله دوم این است که ما به جای اینکه در میان «فضای پارامترها» جستجو کنیم، پارامترهای مورد استفاده را مشخص کرده‌ایم. با استفاده از الگوریتم‌های ژنتیک ما یک ابر فرمول یا طرح، تنظیم می‌کنیم که چیزی شبیه «قیمت نفت در زمان t تابعی از حداکثر ۴ متغیر است» را بیان می‌کند. سپس داده‌هایی برای گروهی از متغیرهای مختلف، شاید در حدود ۲۰ متغیر فراهم خواهیم کرد. سپس الگوریتم ژنتیک اجرا خواهد شد که بهترین تابع و متغیرها را مورد جستجو قرار می‌دهد. روش کار الگوریتم ژنتیک به طور فریبنده‌ای ساده، خیلی قابل درک و به طور قابل ملاحظه‌ای روشی است که ما معتقدیم حیوانات آنگونه تکامل یافته‌اند. هر فرمولی که از طرح داده شده بالا تبعیت کند فردی از جمعیت فرمول‌های ممکن تلقی می‌شود. متغیرهایی که هر فرمول داده‌شده را مشخص می‌کنند به عنوان یکسری از اعداد نشان داده‌شده‌اند که معادلدی. ان. ای آن فرد را تشکیل می‌دهند. موتور الگوریتم ژنتیک یک جمعیت اولیه از فرمول ایجاد می‌کند. هر فرد در برابر مجموعه‌ای از داده‌های مورد آزمایش قرار می‌گیرند و مناسبترین آنها (شاید ۱۰ درصد از مناسبترین‌ها) باقی می‌مانند؛ بقیه کنار گذاشته می‌شوند. مناسبترین افراد با هم جفتگیری (جابجایی عناصر دی ان ای) و تغییر (تغییر تصادفی عناصر دی ان ای) کرده‌اند. مشاهده می‌شود که با گذشت از میان تعداد زیادی از نسلها، الگوریتم ژنتیک به سمت ایجاد فرمول‌هایی که دقیقتر هستند، میل می‌کنند. در حالی که شبکه‌های عصبی هم غیرخطی و غیرپارامتریک هستند، جذابیت زیاد الگوریتم‌های ژنتیک این است نتایج نهایی قابل ملاحظه‌ترند. فرمول نهایی برای کاربر انسانی قابل مشاهده خواهد بود، و برای ارائه سطح اطمینان نتایج می‌توان تکنیک‌های آماری متعارف را بر روی این فرمول‌ها اعمال کرد. فناوری الگوریتم‌های ژنتیک همواره در حال بهبود است و برای مثال با مطرح کردن معادله ویروس‌ها که در کنار فرمول‌ها و برای نقض کردن فرمول‌های ضعیف تولید می‌شوند و در نتیجه جمعیت را کلاً قویتر می‌سازند. مختصراً گفته می‌شود که الگوریتم ژنتیک (یا GA) یک تکنیک برنامه‌نویسی است که از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده می‌کند. مسئله‌ای که باید حل شود ورودی است و راه حلها طبق یک الگو کدگذاری می‌شوند که تابع fitness نام دارد و هر راه حل کاندید را ارزیابی می‌کند که اکثر آنها به صورت تصادفی انتخاب می‌شوند. الگوریتم ژنتیک (GA) یک تکنیک جستجو در علم رایانه برای یافتن راه حل بهینه و مسائل جستجو است. الگوریتم‌های ژنتیک یکی از انواع الگوریتم‌های تکاملی‌اند که از علم زیست‌شناسی مثل وراثت، جهش، انتخاب ناگهانی (زیست‌شناسی)، انتخاب طبیعی و ترکیب الهام گرفته شده. عموماً راه‌حلها به صورت ۲ تایی ۰ و ۱ نشان داده می‌شوند، ولی روشهای نمایش دیگری هم وجود دارد. تکامل از یک مجموعه کاملاً تصادفی از موجودیت‌ها شروع می‌شود و در نسلهای بعدی تکرار می‌شود. در هر نسل، مناسبترین‌ها انتخاب می‌شوند نه بهترین‌ها. یک راه‌حل برای مسئله مورد نظر، با یک لیست از پارامترها نشان داده می‌شود که به آنها کروموزوم یا ژنوم می‌گویند. کروموزوم‌ها عموماً به صورت یک رشته ساده از داده‌ها نمایش داده می‌شوند، البته انواع ساختمان داده‌های دیگر هم می‌توانند مورد استفاده قرار گیرند. در ابتدا چندین مشخصه به صورت تصادفی برای ایجاد نسل اول تولید می‌شوند. در طول هر نسل، هر مشخصه ارزیابی می‌شود وارزش تناسب (fitness) توسط تابع تناسب اندازه‌گیری می‌شود. گام بعدی ایجاد دومین نسل از جامعه است که بر پایه فرایندهای انتخاب، تولید از روی مشخصه‌های انتخاب شده با عملگرهای ژنتیکی است: اتصال کروموزوم‌ها به سر یکدیگر و تغییر. برای هر فرد، یک جفت والد انتخاب می‌شود. انتخاب‌ها به گونه‌ای‌اند که مناسبترین عناصر انتخاب شوند تا حتی ضعیفترین عناصر هم شانس انتخاب داشته باشند تا از نزدیک شدن به جواب محلی جلوگیری شود. چندین الگوی انتخاب وجود دارد: چرخ منگنه‌دار)رولت(، انتخاب مسابقه‌ای (Tournament) ،... . معمولاً الگوریتم‌های ژنتیک یک عدد احتمال اتصال دارد که بین ۰٫۶ و ۱ است که احتمال به وجود آمدن فرزند را نشان می‌دهد. ارگانیسم‌ها با این احتمال دوباره با هم ترکیب می‌شوند. اتصال ۲ کروموزوم فرزند ایجاد می‌کند، که به نسل بعدی اضافه می‌شوند. این کارها انجام می‌شوند تا این که کاندیدهای مناسبی برای جواب، در نسل بعدی پیدا شوند. مرحله بعدی تغییر دادن فرزندان جدید است. الگوریتم‌های ژنتیک یک احتمال تغییر کوچک و ثابت دارند که معمولاً درجه‌ای در حدود ۰٫۰۱ یا کمتر دارد. بر اساس این احتمال، کروموزوم‌های فرزند به طور تصادفی تغییر می‌کنند یا جهش می‌یابند، مخصوصاً با جهش بیت‌ها در کروموزوم ساختمان داده‌مان. این فرایند باعث به وجود آمدن نسل جدیدی از کروموزوم‌هایی می‌شود، که با نسل قبلی متفاوت است. کل فرایند برای نسل بعدی هم تکرار می‌شود، جفت‌ها برای ترکیب انتخاب می‌شوند، جمعیت نسل سوم به وجود می‌آیند و ... این فرایند تکرار می‌شود تا این که به آخرین مرحله برسیم. شرایط خاتمه الگوریتم‌های ژنتیک عبارتند از: به تعداد ثابتی از نسل‌ها برسیم. بودجه اختصاص داده‌شده تمام شود (زمان محاسبه/پول). یک فرد (فرزند تولید شده) پیدا شود که مینیمم (کمترین) ملاک را برآورده کند. بیشترین درجه برازش فرزندان حاصل شود یا دیگر نتایج بهتری حاصل نشود. بازرسی دستی. ترکیبهای بالا. روش‌های نمایش قبل از این که یک الگوریتم ژنتیک برای یک مسئله اجرا شود، یک روش برای کد کردن ژنوم‌ها به زبان کامپیوتر باید به کار رود. یکی از روش‌های معمول کد کردن به صورت رشته‌های باینری است: رشته‌های ۰و۱. یک راه حل مشابه دیگر کدکردن راه حل‌ها در آرایه‌ای از اعداد صحیح یا اعشاری است، که دوباره هر جایگاه یک جنبه از ویژگی‌ها را نشان می‌دهد. این راه حل در مقایسه با قبلی پیچیده‌تر و مشکل‌تر است. مثلاً این روش توسط استفان کرمر، برای حدس ساختار ۳ بعدی یک پروتئین موجود در آمینو اسیدها استفاده شد. الگوریتم‌های ژنتیکی که برای آموزش شبکه‌های عصبی استفاده می‌شوند، از این روش بهره می‌گیرند. سومین روش برای نمایش صفات در یک GA یک رشته از حروف است، که هر حرف دوباره نمایش دهنده یک خصوصیت از راه حل است. خاصیت هر ۳تای این روش‌ها این است که آنها تعریف سازنده‌ایی را که تغییرات تصادفی در آنها ایجاد می‌کنند را آسان می‌کنند: ۰ را به ۱ وبرعکس، اضافه یا کم کردن ارزش یک عدد یا تبدیل یک حرف به حرف دیگر. یک روش دیگر که توسط John Koza توسعه یافت، برنامه‌نویسی ژنتیک (genetic programming)است؛ که برنامه‌ها را به عنوان شاخه‌های داده در ساختار درخت نشان می‌دهد. در این روش تغییرات تصادفی می‌توانند با عوض کردن عملگرها یا تغییر دادن ارزش یک گره داده شده در درخت، یا عوض کردن یک زیر درخت با دیگری به وجود آیند. عملگرهای یک الگوریتم ژنتیک در هر مسئله قبل از آنکه بتوان الگوریتم ژنتیک را برای یافتن یک پاسخ به کار برد به دو عنصر نیاز است:در ابتدا روشی برای ارائه یک جواب به شکلی که الگوریتم ژنتیک بتواند روی آن عمل کند لازم است. در روش سنتی یک جواب به صورت یک رشته از بیتها، اعداد یا نویسهها نمایش داده می‌شود. دومین جزء اساسی الگوریتم ژنتیک روشی است که بتواند کیفیت هر جواب پیشنهاد شده را با استفاده از توابع تناسب محاسبه نماید. مثلاً اگر مسئله هر مقدار وزن ممکن را برای یک کوله پشتی مناسب بداند بدون اینکه کوله پشتی پاره شود، (مسئله کوله پشتی را ببینید) یک روش برای ارائه پاسخ می‌تواند به شکل رشته ای از بیتهای ۰ و۱ در نظر گرفته شود، که ۱ یا ۰ بودن نشانه اضافه شدن یا نشدن وزن به کوله پشتی است. تناسب پاسخ، با تعیین وزن کل برای جواب پیشنهاد شده اندازه‌گیری می‌شود. ایده اصلی در دهه هفتاد میلادی دانشمندی از دانشگاه میشیگان به نام جان هلند ایده استفاده از الگوریتم ژنتیک را در بهینه‌سازی‌های مهندسی مطرح کرد. ایده اساسی این الگوریتم انتقال خصوصیات موروثی توسط ژن‌هاست. فرض کنید مجموعه خصوصیات انسان توسط کروموزوم‌های او به نسل بعدی منتقل می‌شوند. هر ژن در این کروموزوم‌ها نماینده یک خصوصیت است. بعنوان مثال ژن ۱ می‌تواند رنگ چشم باشد، ژن ۲ طول قد، ژن ۳ رنگ مو و الی آخر. حال اگر این کروموزوم به تمامی، به نسل بعد انتقال یابد، تمامی خصوصیات نسل بعدی شبیه به خصوصیات نسل قبل خواهد بود. بدیهیست که در عمل چنین اتفاقی رخ نمی‌دهد. در واقع بصورت همزمان دو اتفاق برای کروموزوم‌ها می‌افتد. اتفاق اول جهش (Mutation) است. «جهش» به این صورت است که بعضی ژن‌ها بصورت کاملاً تصادفی تغییر می‌کنند. البته تعداد این گونه ژن‌ها بسیار کم می‌باشد اما در هر حال این تغییر تصادفی همانگونه که پیشتر دیدیم بسیار مهم است. مثلاً ژن رنگ چشم می‌تواند بصورت تصادفی باعث شود تا در نسل بعدی یک نفر دارای چشمان سبز باشد. در حالی که تمامی نسل قبل دارای چشم قهوه‌ای بوده‌اند. علاوه بر «جهش» اتفاق دیگری که می‌افتد و البته این اتفاق به تعداد بسیار بیشتری نسبت به «جهش» رخ می‌دهد چسبیدن دو کروموزوم از طول به یکدیگر و تبادل برخی قطعات بین دو کروموزوم است. این مسأله با نام Crossover شناخته می‌شود. این همان چیزیست که باعث می‌شود تا فرزندان ترکیب ژنهای متفاوتی را (نسبت به والدین خود) به فرزندان خود انتقال دهند. روش‌های انتخاب روش‌های مختلفی برای الگوریتم‌های ژنتیک وجود دارند که می‌توان برای انتخاب ژنوم‌ها از آن‌ها استفاده کرد. اما روش‌های لیست شده در پایین از معمول‌ترین روش‌ها هستند. انتخاب Elitist مناسب‌ترین عضو هر اجتماع انتخاب می‌شود.Elitist Selection انتخاب Roulette یک روش انتخاب است که در آن عنصری که عدد برازش (تناسب) بیشتری داشته باشد، انتخاب می‌شود. در واقع به نسبت عدد برازش برای هر عنصر یک احتمال تجمعی نسبت می‌دهیم و با این احتمال است که شانس انتخاب هر عنصر تعیین می‌شود. Roulette Selection انتخاب Scaling به موازات افزایش متوسط عدد برازش جامعه، سنگینی انتخاب هم بیشتر می‌شود و جزئی‌تر. این روش وقتی کاربرد دارد که مجموعه دارای عناصری باشد که عدد برازش بزرگی دارند و فقط تفاوت‌های کوچکی آن‌ها را از هم تفکیک می‌کند.Scaling Selection انتخاب Tournament یک زیر مجموعه از صفات یک جامعه انتخاب می‌شوند و اعضای آن مجموعه با هم رقابت می‌کنند و سرانجام فقط یک صفت از هر زیرگروه برای تولید انتخاب می‌شوند.Tournament Selection بعضی از روش‌های دیگر عبارتند از:Hierarchical Selection, Steady-State Selection, Rank Selection, Tournament Selection مثال عملی در این مثال می‌خواهیم مسئلهٔ ۸ وزیر را بوسیلهٔ این الگوریتم حل کنیم. هدف مشخص کردن چیدمانی از ۸ وزیر در صفحهٔ شطرنج است به نحوی که هیچ‌یک همدیگر را تهدید نکند. ابتدا باید نسل اولیه را تولید کنیم. صفحه شطرنج ۸ در ۸ را در نظر بگیرید. ستونها را با اعداد ۰ تا ۷ و سطرها را هم از ۰ تا ۷ مشخص می‌کنیم. برای تولید حالات (کروموزومها) اولیه بصورت تصادفی وزیرها را در ستونهای مختلف قرار می‌دهیم. باید در نظر داشت که وجود نسل اولیه با شرایط بهتر سرعت رسیدن به جواب را افزایش می‌دهد (اصالت نژاد) به همین خاطر وزیر i ام را در خانهٔ تصادفی در ستون i ام قرار می‌دهیم (به جای اینکه هر مهره‌ای بتواند در هر خانه خالی قرار بگیرد). با اینکار حداقل از برخورد ستونی وزیرها جلوگیری می‌شود. توضیح بیشتر اینکه مثلاً وزیر اول را بطور تصادفی در خانه‌های ستون اول که با ۰ مشخص شده قرار می‌دهیم تا به اخر. i=۰،۱، ... ۷ حال باید این حالت را به نحوی کمی مدل کرد. چون در هر ستون یک وزیر قرار دادیم هر حالت را بوسیلهٔ رشته اعدادی که عدد k ام در این رشته شمارهٔ سطر وزیر موجود در ستون i ام را نشان می‌دهد. یعنی یک حالت که انتخاب کردیم می‌تواند بصورت زیر باشد: ۶۷۲۰۳۴۲۲ که ۶ شمارهٔ سطر ۶ است که وزیر اول که شمارهٔ ستونش ۰ است می‌باشد تا اخر. فرض کنید ۴ حالت زیر به تصادف تولید شده‌اند. این چهار حالت را بعنوان کروموزومهای اولیه بکار می‌گیریم. ) ۶۷۲۰۳۴۲۲ ) ۷۰۰۶۳۳۵۴ ) ۱۷۵۲۲۰۶۳ )۴۳۶۰۲۴۷۱ حال نوبت به تابع برازش fitness function می‌رسد. تابعی را که در نظر می‌گیریم تابعی است که برای هر حالت تعداد برخوردها (تهدیدها) را در نظر می‌گیرد. هدف صفر کردن یا حداقل کردن این تابع است. پس احتمال انتخاب کروموزومی برای تولید نسل بیشتر است که مقدار محاسبه شده توسط تابع برازش برای آن کمتر باشد.(روشهای دیگری نیز برای انتخاب وجود دارد) مقدار برازش برای حالات اولیه بصورت زیر می‌باشد: (مقدار عدد برازش در جلوی هر کروموزوم (با رنگ قرمز)همان تعداد برخوردهای وزیران می‌باشد) )۶۷۲۰۳۴۲۰ ← ۶ )۷۰۰۶۳۳۵۴ ← ۸ )۱۷۵۲۲۰۶۳ ← ۲ )۴۳۶۰۲۴۷۱ ← ۴ پس احتمالها بصورت زیر است: p(۳)>p(۴)>p(۱)>p(۲ در اینجا کروموزومهایی را انتخاب می‌کنیم که برازندگی کمتری دارند. پس کروموزوم ۳ برای crossover با کروموزومهای ۴ و ۱ انتخاب می‌شود. نقطهٔ ترکیب را بین ارقام ۶ و ۷ در نظر می‌گیریم. ۴ و ۳: )۱۷۵۲۲۰۷۱ )۴۳۶۰۲۴۶۳ ۱ و ۳: )۱۷۵۲۲۰۲۰ )۶۷۲۰۳۴۶۳ حال نوبت به جهش می‌رسد. در جهش باید یکی از ژنها تغییر کند . فرض کنید از بین کروموزومهای ۵ تا ۸ کروموزوم شمارهٔ ۷ و از بین ژن چهارم از ۲ به ۳ جهش یابد. پس نسل ما شامل کروموزومهای زیر با امتیازات نشان داده شده می‌باشد: (امتیازات تعداد برخوردها می‌باشد) )۶۷۲۰۳۴۲۰ ← ۶ )۷۰۰۶۳۳۵۴ ← ۸ )۱۷۵۲۲۰۶۳ ← ۲ )۴۳۶۰۲۴۷۱ ← ۴ )۱۷۵۲۲۰۷۱ ← ۶ )۴۳۶۰۲۴۶۳ ← ۴ )۱۷۵۳۲۰۲۰ ← ۴ )۶۷۲۰۳۴۶۳ ← ۵ کروموزوم ۳ کاندیدای خوبی برای ترکیب با ۶ و ۷ می‌باشد. (فرض در این مرحله جهشی صورت نگیرد و نقطهٔ اتصال بین ژنهای ۱ و ۲ باشد) )۶۷۲۰۳۴۲۰ ← ۶ )۷۰۰۶۳۳۵۴ ← ۸ )۱۷۵۲۲۰۶۳ ← ۲ )۴۳۶۰۲۴۷۱ ← ۴ )۱۷۵۲۲۰۷۱ ← ۶ )۴۳۶۰۲۴۶۳ ← ۴ )۱۷۵۳۲۰۳۰ ← ۴ )۶۷۲۰۳۴۶۳ ← ۵ )۱۳۶۰۲۴۶۳ ← ۲ )۴۷۵۲۲۰۶۳ ← ۲ )۱۷۵۲۲۰۲۰ ← ۴ )۱۷۵۲۲۰۶۳ ← ۲ کروموزومهای از ۹ تا ۱۲ را نسل جدید می‌گوییم. بطور مشخص کروموزوم‌های تولید شده در نسل جدید به جواب مسئله نزدیکتر شده‌اند. با ادامهٔ همین روند پس از چند مرحله به جواب مورد نظر خواهیم رسید. پایان فرق این مقاله با مقاله‌های مشابه با این موضوع در این می‌باشد که در این جا از نگاه کاربردی به الگوریتم های ژنتیکی نگاه شده است و از این منظر در این مقاله به چند نمونه کاربرد این تکنیک در مسائل معروف اشاره شده است. در این مقاله در ابتدا به جایگاه الگوریتم های ژنتیکی و کاربرد آن ها در علم هوش مصنوعی می پردازیم و سپس به توضیح این الگوریتم و انواع آن و همچنین به نحوهٔ نمایش آن می پردازیم. همچنین در انتها به چند منبع برای نمونه‌های کد باز(متن‌باز) اشاره می کنیم که خوانندگان در صورت علاقه به کار عملی این الگوریتم را به صورت عملی اجرا کنند تا با عملکرد آن آشنا شوند. روش جستجوی تکاملی روش های جستجوی ناآگاهانه، اگاهانه و متاهیوریستیک برای حل مسائل هوش مصنوعی بسیار کارآمد می‌باشند. همچنین می دانیم که در مورد مسائل بهینه سازی اغلب روش های آگاهانه و ناآگاهانه جوابگوی نیاز ما نخواهند بود. چرا که بیشتر مسائل بهینه سازی در رده مسائل NP قرار دارند. بنابراین نیاز به روش جستجوی دیگری داریم که بتواند در فضای حالت مسائل NP به طرف جواب بهینه سراسری حرکت کند. بدین منظور روش های جستجوی متاهیوریستیک را مطرح می کنیم، این روش های جستجو می‌توانند به سمت بهینگی های سراسری مسئله حرکت کنند. در کنار روش های جستجوی متاهیوریستیکی، روش های جستجوی دیگری نیز وجود دارند که به روش های تکاملی معروفند. در ادامه با این نوع الگوریتم بیشتر آشنا می شویم.(لازم به ذکر است که در نگاه کاربردی به الگوریتم های ژنتیکی، اولین قدم در فهم آن، تفهیم الگوریتم های تکامل و تفاوت آن با دیگر الگوریتم های مشابه است.)

+ نوشته شده در  چهارشنبه نوزدهم فروردین ۱۳۹۴ساعت 16:54  توسط ادمین  | 

شبکه عصبی مصنوعی

شبکه عصبی مصنوعی شبکه‌های عصبی مصنوعی (Artificial Neural Network - ANN) یا به زبان ساده‌تر شبکه‌های عصبی سیستم‌ها و روش‌های محاسباتی نوینی هستند برای یادگیری ماشینی، نمایش دانش، و در انتها اعمال دانش به دست آمده در جهت بیش‌بینی پاسخ‌های خروجی از سامانه‌های پیچیده. ایدهٔ اصلی این گونه شبکه‌ها (تا حدودی) الهام‌گرفته از شیوهٔ کارکرد سیستم عصبی زیستی، برای پردازش داده‌ها، و اطلاعات به منظور یادگیری و ایجاد دانش قرار دارد. عنصر کلیدی این ایده، ایجاد ساختارهایی جدید برای سامانهٔ پردازش اطلاعات است. این سیستم از شمار زیادی عناصر پردازشی فوق العاده بهم‌پیوسته با نام نورون تشکیل شده که برای حل یک مسأله با هم هماهنگ عمل می‌کنند و توسط سیناپس‎ها(ارتباطات الکترومغناطیسی) اطلاعات را منتقل می‎کنند. در این شبکه‌ها اگر یک سلول آسیب ببیند بقیه سلول‎ها می‌توانند نبود آنرا جبران کرده، و نیز در بازسازی آن سهیم باشند. این شبکه‌ها قادر به یادگیری‎اند. مثلاً با اعمال سوزش به سلول‎های عصبی لامسه، سلول‎ها یاد می‌گیرند که به طرف جسم داغ نروند و با این الگوریتم سیستم می‌آموزد که خطای خود را اصلاح کند. یادگیری در این سیستم‎ها به صورت تطبیقی صورت می‌گیرد، یعنی با استفاده ازمثال‎ها وزن سیناپس‎ها به گونه‌ای تغییر می‌کند که در صورت دادن ورودی‎های جدید، سیستم پاسخ درستی تولید کند. توافق دقیقی بر تعریف شبکه عصبی در میان محققان وجود ندارد؛ اما اغلب آنها موافقند که شبکه عصبی شامل شبکه‎ای از عناصر پردازش ساده (نورونها) است، که می‌تواند رفتار پیچیده کلی تعیین شده‎ای از ارتباط بین عناصر پردازش و پارامترهای عنصر را نمایش دهد. منبع اصلی و الهام بخش برای این تکنیک، از آزمایش سیستم مرکزی عصبی و نورونها (آکسون‎ها، شاخه‌های متعدد سلولهای عصبی و محلهای تماس دو عصب)نشأت گرفته‌است، که یکی از قابل توجه‎ترین عناصر پردازش اطلاعات سیستم عصبی را تشکیل می‎دهد. در یک مدل شبکه عصبی، گره‎های ساده (بطور گسترده «نورون»، «نئورونها»، "PE«ها (»عناصر پردازش«) یا»واحدها«) برای تشکیل شبکه‎ای از گره‎ها، به هم متصل شده اند—به همین دلیل به آن، اصطلاح»شبکه‎های عصبی" اطلاق می‎شود. در حالی که یک شبکه عصبی نباید به خودی خود سازگارپذیر باشد، استفاده عملی از آن بواسطه الگوریتمهایی امکان پذیر است، که جهت تغییر وزن ارتباطات در شبکه (به منظور تولید سیگنال موردنظر) طراحی شده باشد. با استفاده از دانش برنامه‌نویسی رایانه می‌توان ساختار داده‌ای طراحی کرد که همانند یک نرون عمل نماید. سپس با ایجاد شبکه‌ای از این نورون‌های مصنوعی به هم پیوسته، ایجاد یک الگوریتم آموزشی برای شبکه و اعمال این الگوریتم به شبکه آن را آموزش داد. این شبکه‌ها برای تخمین (Estimation) و تقریب (Approximation)کارایی بسیار بالایی از خود نشان داده‌اند. گستره کاربرد این مدل‌های ریاضی بر گرفته از عملکرد مغز انسان، بسیار وسیع می‌باشد که به عنوان چند نمونه کوچک می‌توان استفاده از این ابزار ریاضی در پردازش سیگنال‌های بیولوییکی، مخابراتی و الکترونیکی تا کمک در نجوم و فضا نوردی را نام برد. اگر یک شبکه را هم‌ارز با یک گراف بدانیم، فرایند آموزش شبکه تعیین نمودن وزن هر یال و bias اولیهٔ خواهد بود. شبکه عصبی شبکه عصبی یک سیستم ارگانی شامل نورون‌ها می‌باشد که اعمال و واکنش جانداران را هماهنگ می‌سازد و سیگنال‌ها را به بخشهای متفاوت بدن می‌فرستد. در بیشتر جانداران سیستم عصبی شامل دو بخش مرکزی و بخش جانبی است. در استفاده‌های جدیدتر این عبارت به شبکه عصبی مصنوعی که از نورون‌هایی مصنوعی ساخته شده‌است هم اشاره دارد. بنابراین عبارت 'شبکه عصبی' در حالت کلی به دو مفهوم مختلف شبکهٔ عصبی زیستی و شبکهٔ عصبی مصنوعی مختلف اشاره دارد. توصیف نام سیستم عصبی از اعصاب گرفته می‌شود. در حالت کلی، یک شبکه عصبی زیستی از مجموعه یا مجموعه‌ای از نورون‌های به صورت فیزیکی به هم متصل یا از لحاظ عملکردی به هم وابسته تشکیل شده‌است. هر نورون می‌تواند به تعداد بسیار زیادی از نورون‌ها وصل باشد و تعداد کل نورون‌ها و اتصالات بین آن‌ها می‌تواند بسیار زیاد باشد. اتصالات، که به آن‌ها سیناپس گفته می‌شود، معمولاً از آکسون‌ها و دندریت‌ها تشکلیل شده‌اند. هوش مصنوعی و مدل سازی شناختی سعی بر این دارند که بعضی از خصوصیات شبکه‌های عصبی را شبیه سازی کنند. این دو اگرچه در روش‌هاشان به هم شبیه هستند اما هدف هوش مصنوعی حل مسائل مشخصی است در حالی که هدف مدل سازی شناختی ساخت مدل‌های ریاضی سامانه‌های نورونی زیستی است. شبکه‌های عصبی زیستی شبکه‌های عصبی زیستی مجموعه‌ای بسیار عظیم از پردازشگرهای موازی به نام نورون اند که به صورت هماهنگ برای حل مسئله عمل می‌کنند و توسط سیناپس‌ها (ارتباط‌های الکترومغناطیسی) اطلاعات را منتقل می‌کنند. در این شبکه‌ها اگر یک سلول آسیب ببیند بقیه سلول‌ها می‌توانند نبود آنرا جبران کرده و نیز در بازسازی آن سهیم باشند. این شبکه‌ها قادر به یادگیری اند. مثلا با اعمال سوزش به سلول‌های عصبی لامسه، سلول‌ها یاد می‌گیرند که به طرف جسم داغ نروند و با این الگوریتم سامانه می‌آموزد که خطای خود را اصلاح کند. یادگیری در این سامانه‌ها به صورت تطبیقی صورت می‌گیرد، یعنی با استفاده ازمثال‌ها وزن سیناپس‌ها به گونه‌ای تغییر می‌کند که در صورت دادن ورودی‌های تازه سامانه پاسخ درستی تولید کند. معرفی شبکه عصبی مصنوعی شبکه عصبی مصنوعی یک سامانه پردازشی داده‌ها است که از مغز انسان ایده گرفته و پردازش داده‌ها را به عهدهٔ پردازنده‌های کوچک و بسیار زیادی سپرده که به صورت شبکه‌ای به هم پیوسته و موازی با یکدیگر رفتار می‌کنند تا یک مسئله را حل نمایند. در این شبکه‌ها به کمک دانش برنامه نویسی، ساختار داده‌ای طراحی می‌شود که می‌تواند همانند نورون عمل کند. که به این ساختارداده نورون گفته می‌شود. بعد باایجاد شبکه‌ای بین این نورونها و اعمال یک الگوریتم آموزشی به آن، شبکه را آموزش می‌دهند. در این حافظه یا شبکهٔ عصبی نورونها دارای دو حالت فعال (روشن یا ۱) و غیرفعال (خاموش یا ۰) اند و هر یال (سیناپس یا ارتباط بین گره‌ها) دارای یک وزن می‌باشد. یال‌های با وزن مثبت، موجب تحریک یا فعال کردن گره غیر فعال بعدی می‌شوند و یال‌های با وزن منفی، گره متصل بعدی را غیر فعال یا مهار (در صورتی که فعال بوده باشد) می‌کنند. نورون مصنوعی یک نورون مصنوعی سامانه‌ای است با تعداد زیادی ورودی و تنها یک خروجی. نورون دارای دو حالت می‌باشد، حالت آموزش و حالت عملکرد. در حالت آموزش نورون یاد می‌گیرد که در مقابل الگوهای ورودی خاص برانگیخته شود و یا در اصطلاح آتش کند. در حالت عملکرد وقتی یک الگوی ورودی شناسایی شده وارد شود، خروجی متناظر با آن ارائه می‌شود. اگر ورودی جزء ورودی‌های از پیش شناسایی شده نباشد، قوانین آتش برای بر انگیختگی یا عدم آن تصمیم گیری می‌کند. از نورون‌های انسان تا نورون مصنوعی با کنار گذاشتن برخی از خواص حیاتی نورون‌ها و ارتباطات درونی آنها می‌توان یک مدل ابتدایی از نورون را به وسیله کامپیوتر شبیه سازی کرد. ساختار شبکه‌های عصبی یک شبکه عصبی شامل اجزای سازنده لایه‌ها و وزن‌ها می‌باشد. رفتار شبکه نیز وابسته به ارتباط بین اعضا است. در حالت کلی در شبکه‌های عصبی سه نوع لایه نورونی وجود دارد: لایه ورودی: دریافت اطلاعات خامی که به شبکه تغذیه شده‌است. لایه‌های پنهان: عملکرد این لایه‌ها به وسیله ورودی‌ها و وزن ارتباط بین آنها و لایه‌های پنهان تعیین می‌شود. وزن‌های بین واحدهای ورودی و پنهان تعیین می‌کند که چه وقت یک واحد پنهان باید فعال شود. لایه خروجی: عملکرد واحد خروجی بسته به فعالیت واحد پنهان و وزن ارتباط بین واحد پنهان و خروجی می‌باشد. شبکه‌های تک لایه و چند لایه‌ای نیز وجود دارند که سازماندهی تک لایه که در آن تمام واحدها به یک لایه اتصال دارند بیشترین مورد استفاده را دارد و پتانسیل محاسباتی بیشتری نسبت به سازماندهی‌های چند لایه دارد. در شبکه‌های چند لایه واحدها به وسیله لایه‌ها شماره گذاری می‌شوند (به جای دنبال کردن شماره گذاری سراسری). هر دو لایه از یک شبکه به وسیله وزن‌ها و در واقع اتصالات با هم ارتباط می‌یابند. در شبکه‌های عصبی چند نوع اتصال و یا پیوند وزنی وجود دارد: پیشرو: بیشترین پیوندها از این نوع است که در آن سیگنال‌ها تنها در یک جهت حرکت می‌کنند. از ورودی به خروجی هیچ بازخوردی (حلقه) وجود ندارد. خروجی هر لایه بر همان لایه تاثیری ندارد. پسرو: داده‌ها از گره‌های لایه بالا به گره‌های لایه پایین بازخورانده می‌شوند. جانبی: خروجی گره‌های هر لایه به عنوان ورودی گره‌های همان لایه استفاده می‌شوند. تقسیم بندی شبکه‌های عصبی بر مبنای روش آموزش به چهار دسته تقسیم می‌شوند: وزن ثابت: آموزشی در کار نیست و مقادیر وزن‌ها به هنگام نمی‌شود. کاربرد: بهینه سازی اطلاعات (کاهش حجم، تفکیک پذیری و فشرده سازی) و حافظه‌های تناظری آموزش بدون سرپرست: وزن‌ها فقط بر اساس ورودی‌ها اصلاح می‌شوند و خروجی مطلوب وجود ندارد تا با مقایسه خروجی شبکه با آن و تعیین مقدار خطا وزن‌ها اصلاح شود. وزن‌ها فقط بر اساس اطلاعات الگوهای ورودی به هنگام می‌شوند. هدف استخراج مشخصه‌های الگوهای ورودی بر اساس راهبرد خوشه یابی و یا دسته‌بندی و تشخیص شباهت‌ها (تشکیل گروه‌هایی با الگوی مشابه) می‌باشد، بدون اینکه خروجی یا کلاس‌های متناظر با الگوهای ورودی از قبل مشخص باشد. این یاد گیری معمولاً بر پایه شیوه برترین هم خوانی انجام می‌گیرد. شبکه بدون سرپرست وزن‌های خود را بر پایه خروجی حاصل شده از ورودی تغییر می‌دهد تا در برخورد بعدی پاسخ مناسبی را برای این ورودی داشته باشد. در نتیجه شبکه یاد می‌گیرد چگونه به ورودی پاسخ بدهد. اصولا هدف این است که با تکنیک نورون غالب نورونی که بیشترین تحریک آغازین را دارد برگزیده شود. بنابر این در شبکه‌های بدون سرپرست یافتن نورون غالب یکی از مهمترین کارها است. آموزش با سرپرست: به ازای هر دسته از الگوهای ورودی خروجی‌های متناظر نیز به شبکه نشان داده می‌شود و تغییر وزن‌ها تا موقعی صورت می‌گیرد که اختلاف خروجی شبکه به ازای الگوهای آموزشی از خروجی‌های مطلوب در حد خطای قابل قبولی باشد. در این روش‌ها یا از خروجی‌ها به وزن‌ها ارتباط وجود دارد یا خلا به صورت پس انتشار از لایه خروجی به ورودی توزیع شده‌است و وزن‌ها اصلاح می‌شوند. هدف طرح شبکه‌ای است که ابتدا با استفاده از داده‌های آموزشی موجود، آموزش ببیند و سپس با ارائه بردار ورودی به شبکه که ممکن است شبکه آن را قبلا فراگرفته یا نگرفته باشد کلاس آن را تشخیص دهد. چنین شبکه‌ای به طور گسترده برای کارهای تشخیص الگو به کار گرفته می‌شود. آموزش تقویتی: کیفیت عملکرد سامانه به صورت گام به گام نسبت به زمان بهبود می‌یابد. الگوهای آموزشی وجود ندارد اما با استفاده از سیگنالی به نام نقاد بیانی از خوب و یا بد بودن رفتار سامانه بدست می‌آید (حالتی بین یادگیری با سرپرست و بدون سرپرست). کاربرد شبکه‌های عصبی شبکه‌های عصبی مصنوعی دارای دامنه کاربرد وسیعی می‌باشند از جمله سامانه‌های آنالیز ریسک، کنترل هواپیما بدون خلبان، آنالیز کیفیت جوشکاری، آنالیز کیفیت کامپیوتر، آزمایش اتاق اورژانس، اکتشاف نفت و گاز، سامانه‌های تشخیص ترمز کامیون، تخمین ریسک وام، شناسایی طیفی، تشخیص دارو، فرآیندهای کنترل صنعتی، مدیریت خطا، تشخیص صدا، تشخیص هپاتیت، بازیابی اطلاعات راه دور، شناسایی مین‌های زیردریایی، تشخیص اشیاء سه بعدی و دست نوشته‌ها و چهره و... در کل می‌توان کاربردهای شبکه‌های عصبی را به صورت زیر دسته بندی کرد: تناظر (شبکه الگوهای مغشوش وبه هم ریختهرا بازشناسی می‌کند)، خوشه یابی، دسته بندی، شناسایی، بازسازی الگو، تعمیم دهی (به دست آوردن یک پاسخ صحیح برای محرک ورودی که قبلا به شبکه آموزش داده نشده)، بهینه سازی. امروزه شبکه‌های عصبی در کاربردهای مختلفی نظیر مسائل تشخیص الگو که خود شامل مسائلی مانند تشخیص خط، شناسایی گفتار، پردازش تصویر و مسائلی از این دست می‌شود و نیز مسائل دسته بندی مانند دسته بندی متون یا تصاویر، به کار می‌روند. در کنترل یا مدل سازی سامانه‌هایی که ساختار داخلی ناشناخته یا بسیار پیچیده‌ای دارند نیز به صورت روز افزون از شبکه‌های عصبی مصنوعی استفاده می‌شود. به عنوان مثال می‌توان در کنترل ورودی یک موتور از یک شبکه عصبی استفاده نمود که در این صورت شبکه عصبی خود تابع کنترل را یاد خواهد گرفت. معایب شبکه‌های عصبی با وجود برتری‌هایی که شبکه‌های عصبی نسبت به سامانه‌های مرسوم دارند، معایبی نیز دارند که پژوهشگران این رشته تلاش دارند که آنها را به حداقل برسانند، از جمله: قواعد یا دستورات مشخصی برای طراحی شبکه جهت یک کاربرد اختیاری وجود ندارد. در مورد مسائل مدل سازی، صرفاً نمی‌توان با استفاده از شبکه عصبی به فیزیک مساله پی برد. به عبارت دیگر مرتبط ساختن پارامترها یا ساختار شبکه به پارامترهای فرآیند معمولاً غیر ممکن است. دقت نتایج بستگی زیادی به اندازه مجموعه آموزش دارد. آموزش شبکه ممکن است مشکل ویا حتی غیر ممکن باشد. پیش بینی عملکرد آینده شبکه (عمومیت یافتن) آن به سادگی امکان پذیر نیست. شبکه عصبی و هوش مصنوعی شبکه‌های عصبی مصنوعی (Artificial Neural Network - ANN) یا به زبان ساده‌تر شبکه‌های عصبی سیستم‌ها و روش‌های محاسباتی نوینی هستند برای یادگیری ماشینی، نمایش دانش، و در انتها اعمال دانش به دست آمده در جهت بیش‌بینی پاسخ‌های خروجی از سامانه‌های پیچیده. ایدهٔ اصلی این گونه شبکه‌ها (تا حدودی) الهام‌گرفته از شیوهٔ کارکرد سیستم عصبی زیستی، برای پردازش داده‌ها، و اطلاعات به منظور یادگیری و ایجاد دانش قرار دارد. عنصر کلیدی این ایده، ایجاد ساختارهایی جدید برای سامانهٔ پردازش اطلاعات است. این سیستم از شمار زیادی عناصر پردازشی فوق العاده بهم‌پیوسته با نام نورون تشکیل شده که برای حل یک مسأله با هم هماهنگ عمل می‌کنند و توسط سیناپس‎ها(ارتباطات الکترومغناطیسی) اطلاعات را منتقل می‎کنند. در این شبکه‌ها اگر یک سلول آسیب ببیند بقیه سلول‎ها می‌توانند نبود آنرا جبران کرده، و نیز در بازسازی آن سهیم باشند. این شبکه‌ها قادر به یادگیری‎اند. مثلا با اعمال سوزش به سلول‎های عصبی لامسه، سلول‎ها یاد می‌گیرند که به طرف جسم داغ نروند و با این الگوریتم سیستم می‌آموزد که خطای خود را اصلاح کند. یادگیری در این سیستم‎ها به صورت تطبیقی صورت می‌گیرد، یعنی با استفاده ازمثال‎ها وزن سیناپس‎ها به گونه‌ای تغییر می‌کند که در صورت دادن ورودی‎های جدید، سیستم پاسخ درستی تولید کند. توافق دقیقی بر تعریف شبکه عصبی در میان محققان وجود ندارد؛ اما اغلب آنها موافقند که شبکه عصبی شامل شبکه‎ای از عناصر پردازش ساده (نورونها) است، که می‌تواند رفتار پیچیده کلی تعیین شده‎ای از ارتباط بین عناصر پردازش و پارامترهای عنصر را نمایش دهد. منبع اصلی و الهام بخش برای این تکنیک، از آزمایش سیستم مرکزی عصبی و نورونها (آکسون‎ها، شاخه‌های متعدد سلولهای عصبی و محلهای تماس دو عصب)نشأت گرفته‌است، که یکی از قابل توجه‎ترین عناصر پردازش اطلاعات سیستم عصبی را تشکیل می‎دهد. در یک مدل شبکه عصبی، گره‎های ساده (بطور گسترده «نورون»، «نئورونها»، "PE«ها (»عناصر پردازش«) یا»واحدها«) برای تشکیل شبکه‎ای از گره‎ها، به هم متصل شده اند—به همین دلیل به آن، اصطلاح»شبکه‎های عصبی" اطلاق می‎شود. در حالی که یک شبکه عصبی نباید به خودی خود سازگارپذیر باشد، استفاده عملی از آن بواسطه الگوریتمهایی امکان پذیر است، که جهت تغییر وزن ارتباطات در شبکه (به منظور تولید سیگنال موردنظر) طراحی شده باشد. با استفاده از دانش برنامه‌نویسی رایانه می‌توان ساختار داده‌ای طراحی کرد که همانند یک نرون عمل نماید. سپس با ایجاد شبکه‌ای از این نورون‌های مصنوعی به هم پیوسته، ایجاد یک الگوریتم آموزشی برای شبکه و اعمال این الگوریتم به شبکه آن را آموزش داد. این شبکه‌ها برای تخمین (Estimation) و تقریب (Approximation)کارایی بسیار بالایی از خود نشان داده‌اند. گستره کاربرد این مدل‌های ریاضی بر گرفته از عملکرد مغز انسان، بسیار وسیع می‌باشد که به عنوان چند نمونه کوچک می‌توان استفاده از این ابزار ریاضی در پردازش سیگنال‌های بیولوییکی، مخابراتی و الکترونیکی تا کمک در نجوم و فضا نوردی را نام برد. اگر یک شبکه را هم‌ارز با یک گراف بدانیم، فرآیند آموزش شبکه تعیین نمودن وزن هر یال و bias اولیهٔ خواهد بود. شبکه‌های عصبی مصنوعی (Artificial Neural Network) شبکه‌های عصبی مصنوعی از مباحث جدیدی است که دانشمندان علوم کامپیوتر به آن علاقمند شده‌اند و برای پیشرفت هرچه بیشتر علوم کامپیوتر وقت و هزینه بسیاری را صرف آن کرده و می‌کنند. این موضوع با ایده گرفتن از سیستم عصبی بدن انسان و با هدف شبیه‌سازی هرچه بیشتر کامپیوتر به انسان شکل گرفت و تا حال به خوبی پیشرفته است. از جمله کاربردهای این بحث می‌توان از شناسایی الگوها, پردازش تصویر و رویت, هوش مصنوعی, کنترل رباتها و موارد بسیار دیگر نام برد. ما در این مقاله پس از مقدمه به مسائل در خور شبکه‌های عصبی مصنوعی و نیز کاربردهای آن خواهیم پرداخت, در ادامه Perceptron ها را که یکی از مهمترین الگوریتم‌های شبکه‌های عصبی مصنوعی می‌باشد معرفی می‌کنیم. 1- مقدمه 1-1- ایده پیدایش شبکه‌های عصبی مصنوعی آیا کامپیوتر میتواند همان نوع از محاسباتی را که یک فرد هوشمند انجام میدهد به کار گیرد؟ بسیاری از دانشمندان عقیده داشته ودارند که این بحث باید مورد توجه قرار گیرد. شبکه‌های عصبی در حل مسائل یک جهت جدید و متمایز نسبت به کامپیترهای عمومی می‌گشود. کامپیوترهای عمومی از یک الگوریتم استفاده می‌کنند یعنی برای حل مسائل از یک سری دستورات از پیش تعیین شده پیروی می‌کنند مگر در مواقع ویژه‌ای که کامپیوتر نیاز به یک‌سری اطلاعات برای حل مسئله دارد. و همین مسئله توانایی پردازش را از کامپیوترهای عمومی به مسائلی که ما قبلا فهمیده‌ایم و روش حل آنها را شناخته‌ایم محدود می‌کند و تنها سرعت عمل و قدرت در حل نمونه‌های بزرگتر را به همراه دارند. اما کامپیوترها باید به قدری مفید باشند که بتوانند کارهایی را انجام دهند که واقعا ما نمی‌دانیم چگونه باید آنها را انجام دهیم. 1-2- بررسی سلولهای مغزی افراد تحقیق درباره سلولهای مغزی افراد و همچنین شناخت ‌‌Neuron ها یا رشته‌های مغزی وبیان یک راه نسبتا متفاوت که یک سیستم هوشمند را بنا می‌کند شروع شد. مغز بشر متشکل از میلیونها نرون عصبی منحصر بفرد است واین رشته‌های عصبی به اشکال و اندازه‌های مختلف تغییر می‌کنند.. هر نرون عموما یک هسته دارد و یک‌سری سلولهای عصبی Axon (آکسون)ـ که علائم خروجی را به سلولهای عصبی نرون دیگر حمل می‌کنندـ و Dendrite ها (شاخه‌های سلولهای عصبی). علائم در سلولهای عصبی میان شاخه‌های سلولهای عصبی ونواحی خروجی جریان دارند. در اینجا برای حالت برانگیزش باید آشفتگی از یک حدی تجاوز کند که آستانه یا سرحد نامیده می‌شود و پس از برانگیزش نرون‌ها پیامهایی برای نرون‌های دیگر می‌فرستند و خود را برای دریافت و پاسخ به اطلاعات عمومی آماده می‌کنند. 1-3- تاریخچه شبکه‌های عصبی دهها سال است که جلب توجه می‌کنند وتاکنون راه حلهایی برای استفاده از هوش بشری ارائه شده است. اولین نرون مصنوعی درسال 1943 توسط نروفیزیولوژیست وارن‌مک‌کالوک و منطق دان والتر‌پیتز تولید شد.در دهه 60 به دلایلی که خارج از بحث این مقاله است مردم به‌سوی شبکه‌های عصبی متمایل شدند و تنها در دهه 80 دانشمندان توانایی‌های واقعی شبکه‌های عصبی را دیدند. 2- شبکه‌های عصبی مصنوعی 2-1- شبکه‌های عصبی مصنوعی شبکه‌های عصبی شبیه به مغز انسان اطلاعاتی را پردازش می‌کنند. شبکه‌ از تعداد زیادی سلولهای عصبی(Neuron ها) تشکیل شده با پردازشی بسیار بزرگ و به‌هم پیوسته که در حل موازی مسائل ویژه مشغول به کارند. یادگیری شبکه‌های عصبی از طریق مثالهاست. آنها برای انجام یک کار خاص برنامه‌ریزی نشده‌اند. مثالها باید با دقت بسیار بالایی انتخاب شوند والا زمان مفید هدر خواهد رفت و یا حتی ممکن است شبکه به طور ناقص دایر شود و در اینجا راهی برای فهمیدن اینکه سیستم معیوب است یا خیر وجود ندارد مگر اینکه خطایی رخ دهد. شبکه‌های عصبی مصنوعی یک ترکیبی از مجموعه نرون‌هاست و البته نرونهای مصنوعی‌ای که بسیار شبیه به نرونهای زیستی کار می‌کنند. و بدین گونه است که ورودیهای زیادی با وزنهای مختلف می‌گیرد و یک خروجی که به ورودی وابسته است تولید می‌کند. نرونهای زیستی می‌توانند در حال برانگیزش باشند یا نباشند. ( وقتی یک نرون برانگیخته می‌شود ضربه علائم خروجی آن مقداری کمتر از 100 هرتز است) شبکه‌های عصبی استفاده وسیعی در شناسایی الگوها دارند زیرا از خودشان قابلیت آن را دارند که بطور عمومی به ورودی‌های غیر منتظره نیز پاسخ دهند. در طول ساخت نرونها می‌آموزند که چگونه الگوهای ویژه گوناگون را تشخیص دهند. اگر الگویی پذیرفته شود در حالی که در طول اجرا ورودی با خروجی مرتبط نباشد، نرون از مجموعه‌ای از الگوهایی که سابقا آموخته خروجیی را که شبیه به الگو می‌باشد وکمترین تفاوت را با ورودی دارد انتخاب می‌کند. این روال عموما فراخوانی می‌شود. مثال: وقتی که ورودی نرون 1111 باشد چهار ورودی بر حسب برانگیزش مرتب شده‌اند و وقتی ورودی‌های 0000 را داریم نرون برای برانگیزش مرتب نیست. قاعده عمومی این است که نرونها مایلند برانگیخته شوند وقتی که ورودی‌ها 0111 ، 1011 ، 1101 ، 1110 یا 1111 باشند و در صورتی که ورودی آنها 1000 ، 0001 ، 0010 ، 0100 یا 0000 باشند مایل به برانگیخته شدن نیستند. شناسایی الگوهای پیچیده سطح بالا می‌تواند به وسیله شبکه‌ای از نرونها انجام شود و بدین ترتیب نام آن را شبکه‌های عصبی مصنوعی گذاشتند. اکنون شبکه‌های عصبی کاربردهای زیادی دارند(درمنطق وکلام و شناسایی عکسها)البته شناسایی الگوهامی‌تواند به‌طور موفقیت آمیز بر روی کامپیوترهای عمومی انجام شود. این شبکه‌های عمومی که برای شناسایی الگوها استفاده می‌شوند Feed-Forward نامیده می‌شدند زیرا آنها یک بازخورد (Feed-Back) داشتند. آنها به‌طور ساده ورودی‌ها را با خروجی‌ها می‌آمیختند. اما شناسایی الگوها به تدریج کاملتر شد به‌طوریکه بر روی کامپیوترهای عمومی با سیستم خاص خودشان به‌سختی انجام می‌شد پس برای شناسایی الگوها شبکه‌های Feed-Forward کافی نبودند. در شبکه‌های عصبی خروجی هر نرون به ورودی نرونهای مجاورش متصل شده است. شبکه‌های عصبی نمی‌توانند معجزه کنند اما اگر به درستی استفاده شوند نتایج شگفت‌انگیزی خواهند داشت. 2-2- مشخصات مسائل در خور شبکه‌های عصبی مصنوعی Artificial Neural Network تقلید از ساختارهای محاسباتی سیستم زیستی ممکن است ایده اصلی نمونه‌های محاسباتی برای ساخت کلاسهایی از مسائل باشد. از جمله این مسائل می‌توان از مسائل مشکل NP که شامل مسائل طبقه‌بندی شده، زمانبندی‌شده، جستجو وغیره نام برد، کلاس مسائل شناسایی الگوها، افراد و موضوعات مشخص را در دیدار و تماس با آنها می‌شناسد و کلاس مربوط به داده‌های ناقص، اشتباه، متناقض، فازی و احتمالی. این مسائل توسط همه یا برخی از موارد زیر توصیف می‌شوند: یک فضای مسئله با بعد بزرگ، پیچیده، ناشناخته با اثرات متقابل پیچیده ریاضی‌وار بین متغییرها و یک فضای راه‌حل که ممکن است خالی باشد(شامل یک راه‌حل یکتا یا بیشتر ، شامل تعدادی از راه‌حلهای مفید)به نظر می‌رسد ANN ها راه‌حلهایی برای مسائلی که با ورودی‌های حسی بیشتر درگیرند ارائه می‌دهد(صحبت‌کردن، دیدن، شناسایی دستخط و…). 2-3- کاربردهای شبکه‌های عصبی مصنوعی ANN می‌توان موارد زیر را از کاربردهای شبکه‌های عصبی مصنوعی ذکر کرد: پردازش تصویر و دید( Image processing and computer vision ) پردازش علائم( Signal processing ): شامل ریخت‌شناسی و تجزیه و تحلیل علائم مربوط به زمین‌لرزه‌ها و… شناسایی الگوها( Pattern recognition ): شامل شناسایی چهره، اثر انگشت، تشخیص نوع صدا و نوع صحبت کردن، دستخط و … پزشکی( Medicine ): شامل تجزیه و تحلیل و تشخیص علائم دستگاه ضربان‌نگار قلب (الکتروکاردیوگرافیک)، تشخیص امراض گوناگون و … سیستم‌های نظامی( Military systems ): شامل ردیابی مین‌های زیردریایی، دسته‌بندی صداهای نابه‌هنجار و مخل در رادارها و شناسایی گوینده رزمی. سیستم‌های تجاری( Financial systems ): شامل تجزیه و تحلیل انبار مغازه‌ها، ارزیابی واقعی املاک و … برنامه‌ریزی، کنترل و جستجو( Planning, control, and search ): شامل اجرای موازی مسائل و کنترل رباتها. هوش مصنوعی( Artificial intelligence ): شامل برخی سیستم‌های طبی و اجرای سیستم‌های خبره. سیستم‌های قدرت( Power systems ): شامل برآورد وضعیت سیستم، ردیابی سریع و دسته‌بندی ردیابی، ردیابی خطا و ترمیم آن، پیش‌بینی و برآورد تخمین امنیت. --انواع یادگیری برای شبکه های عصبی: 1.یادگیری با ناظر در یادگیری با ناظر به قانون یاد گیری مجموعه ای از زوجهای داده ها به نام داده های یادگیری (Pi,Ti)i={1 … l } می دهند که در آن Pi ورودی به شبکه و Ti خروجی مطلوب شبکه برای ورودی Pi است. پس از اعمال ورودی Pi به شبکه عصبی در خروجی شبکه ai با Ti مقایسه شده و سپس خطای یادگیری محاسبه و از آن در جهت تنظیم پارامترهای شبکه استفاده می شود به گونه ای که اگر دفعه بعد به شبکه همان ورودی Pi اعمال شود خروجی شبکه به Ti نزدیکتر می گردد با توجه به این نکته که معلم سیستمی است که بر محیط وقوف دارد ( مثلا می داند که برای ورودی Pi خروجی مطلوب Ti است ).توجه داریم که محیط برای شبکه عصبی مجهول است . در لحظه k بردار ورودی Pi(k) با تابع توضیع احتمال معینی که برای شبکه عصبی نا معلوماست انتخاب و بطور همزمان به شبکه عصبی و معلم اعمال می شود . جواب مطلوب Ti(k) نیز توسط معلم به شبکه عصبی داده می شود . در حقیقت پاسخ مطلوب پاسخ بهینه ای است که شبکه عصبی برای ورودی مفروض باید به آن برسد . پارامترهای شبکه عصبی توسط دو سیگنال ورودی و خطا تنظیم می شود.به این صورت که پس از چند تکرار الگوریتم یادگیری که عموما توسط معادله تفاضلی بیان می شودبه پارامترهایی در فضای پارامترهای شبکه همگرا می شوند که برای آنها خطای یادگیری بسیار کوچک است و عملا شبکه عصبی شبکه عصبی معادل معلم می شود . یا به عبارتی دیگر اطلاعات مربوط به محیط (نگاشت بین TiوPi )که برای معلم روشن است به شبکه عصبی منتقل می شود و پس از این مرحله عملا می توان بجای معلم از شبکه عصبی استفاده کرد تا یادگیری تکمیل شود . --2.یادگیری تشدیدی: یک اشکال یادگیری با ناظر این است که شبکه عصبی ممکن است بدون معلم نتواند مواضع جدیدی را که توسط مجموعه داده های جدید تجربی پوشانده نشده است یاد بگیرد . یادگیری از نوع تشدیدی این محدودیت را برطرف می کند . این نوع یادگیری بطور on-line صورت می گیرد در حالی که یادگیری با ناظر را به دو صورت on-line & off-line می توان انجام داد. در حالت off-line می توان از یک سیستم محاسب با در اختیار داشتن داده های یادگیری استفاده کرد و طراحی شبکه عصبی را به پایان رساند . پس از مرحله طراحی و یادگیری شبکه عصبی به عنوان یک سیستم استاتیکی عمل می کند . اما در یادگیری on-line شبکه عصبی همراه با خود سیستم یادگیر در حال انجام کار است و از این رو مثل یک سیستم دینامیکی عمل می کند . یادگیری از نوع تشدیدی یک یادگیری on-line از یک نگاشت ورودی-خروجی است . این کار از طریق یک پروسه سعی و خطا به صورتی انجام می پذیرد که یک شاخص اجرایی موسوم به سیگنال تشدید ماکزیمم شود و بنابر این الگوریتم نوعی از یادگیری با ناظر است که در آن به جای فراهم نمودن جواب واقعی ، به شبکه عددی که نشانگر میزان عملکرد شبکه است ارایه می شود. این بدین معنی است که اگر شبکه عصبی پارامترهایش را به گونه ای تغییر داد که منجر به یک حالت مساعد شد آنگاه تمایل سیستم یادگیر جهت تولید آن عمل خاص تقویت یا تشدید می شود . در غیر این صورت تمایل شبکه عصبی جهت تولید آن عمل خاص تضعیف می شود . یادگیری تقویتی مثل یادگیری با ناظر نیست و این الگوریتم بیشتر برای سیستمهای کنترلی کاربرد دارد . --3. یادگیری بدون ناظر در یادگیری بدون ناظر یا یادگیری خود سامانده پارامترهای شبکه عصبی تنها توسط پاسخ سیستم اصلاح و تنظیم می شوند . به عبارتی تنها اطلاعات دریافتی از محیط به شبکه را برداغرهای ورودی تشکیل می دهند. و در مقایسه با مورد بالا (یادگیری با ناظر) بردار جواب مطلوب به شبکه اعمال نمی شود . به عبارتی به شبکه عصبی هیچ نمونه ای از تابعی که قرار است بیاموزد داده نمی شود . در عمل می بینیم که یادگیری با ناظر در مورد شبکه هایی که از تعداد زیادی لایه های نرونی تشکیل شده باشند بسیار کند عمل می کند و در این گونه موارد تلفیق یادگیری با ناظر و بدون ناظر پیشنهاد می گردد .

+ نوشته شده در  چهارشنبه نوزدهم فروردین ۱۳۹۴ساعت 16:52  توسط ادمین  | 

راه های خرید و رزرو بلیط هواپیما ارزان

شاید برای شما هم اتفاق افتاده است که قصد خرید بلیط هواپیما داشته اید اما آژانس های مسافرتی قیمت های مختلفی را به شما ارائه کرده و شما را در شرایط سختی برای تصمیم گیری قرار داده اند. از اول تیر سال 93 با اجرای قانون آزاد سازی قیمت بلیط هواپیما این شرایط دشوار تر نیز شده است. یکی از مناسبترین راه ها جستجوی پرواز بر روی اینترنت بدون نیاز به مراجعه حضوری به آژانس های مسافرتی برای رزرو بلیط هواپیما است. وب سایت AirplaneTicket.ir یک مرجع خدمات گردشگری آنلاین در کشور است که با جستجوی همه پروازهای سیستمی و چارتری به شما کمک می کند تا انتخاب راحت تری داشته و رزرو بلیط هواپیما را خودتان آنلاین انجام دهید. از طریق این وب سایت که دارای مجوز رسمی از سازمان هواپیمایی کشوری است فروش بلیط هواپیما شرکت های هواپیمایی ایران ایر، آسمان، ایران ایر تور، آتا، قشم ایر، تابان، ماهان، کیش ایر، کاسپین، زاگرس، اترک و معراج، همگی یکجا انجام می شود. ************************************* از طریق این صفحه همین حالا یک پرواز را جستجو کنید: -------------------------------------------------------- http://airplaneticket.ir/booking-airline-tickets.html ************************************* پروازهای سیستمی چه پروازهایی است؟ به پروازهای متداولی گفته می شود که بلیتشان از طریق دفاتر مسافرتی کل کشور با قیمت یکسان قابل خرید است. برای ابطال اینگونه بلیت ها می توانید از طریق آژانس مسافرتی صادر کننده، دفاتر مرکزی فروش و ایستگاه های فرودگاهی شرکت هواپیمایی (Airline) اقدام کنید. همچنین قیمت بلیت این پروازها برای بزرگسال، کودک و نوزاد متفاوت بوده و مقادیر مشخصی دارد. پروازهای چارتری چه پروازهایی است؟ بلیت های چارتری مربوط به پروازهایی است که آژانس های چارترکننده تعداد صندلی درخواستیشان را از شرکت های هواپیمایی پیش خرید کرده اند و مسئول قیمت گذاری و فروش این بلیت ها شده اند. نرخ پروازهای چارتری به شدت متغیر بوده و متناسب با تقاضای مسافرین افزایش یا کاهش می یابد. در پروازهای چارتری هزینه مسافرین بالای دو سال به طور کامل محاسبه می شود. لازم به ذکر است پروازهای چارتری صرفا از طریق آژانس صادر کننده قابل ابطال می باشد! |||||||||||||||||||||AirplaneTicket.ir||||||||||||||||||||| شرکت خدمات مسافرتی عتیق گشت اصفهان آدرس: اصفهان، خیابان کمال، روبروی شهرداری منطقه سه تلفن: (خط ویژه) 32287560-031 فکس: داخلی 110 وب سایت: www.airplaneticket.ir ایمیل: info@airplaneticket.ir |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| http://www.airplaneticket.ir/

+ نوشته شده در  چهارشنبه نوزدهم فروردین ۱۳۹۴ساعت 16:51  توسط ادمین  | 

خدمات توسعه نرم افزار - برنامه نویسی - بومی سازی - مدیریت اطلاعات

دستیابی به نرم افزارهای کارا و با کیفیت مناسب و پاسخگوی همه نیازهای موجود، برخلاف ظاهر ساده آن، کاری بس دشوار است. با توجه به حجم زیادی از نرم افزارهای کاربردی در زمینه های مختلف حسابداری، انبارداری، حقوق و دستمزد، اتوماسیون اداری، اتوماسیون صنعتی، گردش کار، مدیریت اطلاعات، مدیریت منابع انسانی و ... که هریک با توجه به زمینه تخصصی نرم افزار دارای مزایا و معایبی هستند، همواره نیاز به تولید نرم افزار برحسب نیازهای فعلی مجموعه شما و سفارشی کردن قابلیتهای استاندارد نرم افزارهای موجود از موارد اجتناب ناپذیر در صنعت نرم افزار بوده است. تولید نرم افزار فرآیندی است که در صورت عدم مبتنی بودن بر فرآیندهای مهندسی نرم افزار ، نه تنها از مسیر اصلی خود که دستیابی به یک نرم افزار کارآمد جهت مدیریت امور در نظر گرفته شده می باشد، دور می شویم ، بلکه مشکلات مجموعه ، نسبت به حالت سنتی، گاهی تا چندین برابر افزایش می یابد. از طرفی نگهداری نرم افزار که همواره یکی از مهمترین خدماتی است که باید به مشتری ارائه شود، به سختی انجام شده و در پاره ای از مواقع غیر ممکن می شود. تحلیل و طراحی دقیق و مبتنی بر بررسی نیازهای مشتری اولین گام و مهمترین گام در فرآیند تولید و توسعه نرم افزار می باشد. این تحلیل و طراحی باید بگونه ای انجام شود که نیازهایی که مشتری به علل مختلف از قبیل عدم آشنایی با سیستم های نرم افزاری با آنها برخورد نداشته است و تولید کننده نرم افزار به علت عدم آشنایی با فرآیند کاری مشتری شناختی نسبت به آن نداشته است، به راحتی ، در طی زمانی کوتاه و با هزینه کم قابل تعبیه در سیستم باشد. انتخاب بستر مناسب جهت تولید نرم افزار یکی دیگر از گامهای اساسی در تولید نرم افزار می باشد. انتخاب زبانهای برنامه نویسی مناسب و به روز، تکنیکهای پیشرفته ذخیره سازی و بازیابی اطلاعات ، نوع پایگاه داده مورد استفاده در تولید و ... همگی از عوامل تاثیر گذار در محصول تولید شده می باشند. آی تی ریسرچز با در اختیار داشتن نیروهای کارآمد و متخصص جوان و مجرب در امر توسعه و تولید نرم افزار با استفاده از آخرین دانش و تکنولوژی روز سعی نموده است تا با ارائه خدمات حرفه ای به شرکتها ، موسسات و اشخاص حقیقی و حقوقی در جهت رفع نیازهای نرم افزاری و ایجاد بستر مناسب IT قدم بردارد این شرکت با تکیه بر اصول مهندسی نرم افزار و با استفاده از جدیدترین و مناسبترین روشها آمادگی دارد طراحی ، برنامه نویسی و اجرائی نمودن پروژه های نرم افزاری را طبق نیازهای واقعی شما بعهده گیرد . خدمات قابل ارائه در بخش نرم افزار به شرح زیر می باشد : طراحی و برنامه نویسی کلیه نرم افزارهای مبتنی بر وب ( Web Application) طراحی و برنامه نویسی کلیه نرم افزارها تحت ویندوز ( Windows Application ) طراحی و برنامه نویسی کلیه نرم افزارهای قابل اجرا بروی انواع تلفن های همراه (Mobile Application) یک پروژه نرم افزاری زمانی موفق و اجرایی می شود که کلیه نیازهای سیستم ( حال و آینده ) در آن دیده شده و قبل از اقدام به برنامه نویسی و اجرایی نمودن آن ، و بعد از پیاده سازی کلیه نیازها ، امکان بسط و گسترش موضوعی امکان پذیر باشد ، و کلیه موارد تجزیه و تحلیل شده و مناسبترین شیوه در طراحی و برنامه نویسی آن اجرا گردد و در جهت رعایت حقوق مشتری ، تضمین ارائه خدمات سرویسهای پشتیبانی و تضمین کیفیت ، پس از استقرار نرم افزار انجام گردد . این شرکت با تکیه بر تجربه خود در زمینه پیاده سازی و تولید نرم افزار و برنامه کاربردی و با بهره گیری از کارشناسان خبره در امور تحلیل و طراحی سیستم و برنامه نویسی، این توانمندی را در مجموعه نرم افزاری خود ایجاد نموده است تا نسبت به اجرا و پیاده سازی برنامه های کاربردی به سفارش مشتری با استفاده از سبکهای مختلف معماری نرم افزار، در حوزه های مختلف اقدام نماید استفاده از تکنولوژی و متدولوژی های روز دنیا در طراحی و پیاده سازی نرم افزار و همچنین بکارگیری سبکهای نوین معماری نرم افزار همواره در پروژه های نرم افزاری و تولید سامانه های اطلاعاتی این شرکت مدنظر بوده است. طراحی و ایجاد سامانه های اطلاعاتی، پیاده سازی سیستم نرم افزاری اطلاعات مدیریت، سیستم های مدیریت محتوا، سامانه های هوشمند، سیستم های نرم افزاری مدیریت و کنترل پروژه برای مشتریان متعدد از جمله زمینه های فعالیت شرکت درحوزه تولید برنامه های کاربردی خاص است. تفاوت ما با اغلب شرکت های تولید کننده نرم افزار در این است که ما محصولات نرم افزاری خود را اغلب بصورت یک بسته یا پکیج نرم افزاری به فروش نمی گذاریم بلکه هر محصول نرم افزاری را براساس نیاز مشتری بومی سازی (Customize) می نماییم . اغلب سازمانها، مراکز و شرکتهای ایرانی در فرآیندهای داخلی خود، نیازمندیهای خاص خود را دارند که می بایست در سیستم های نرم افزاری آنها پیش بینی گردد و خرید محصولات نرم افزاری آماده بصورت بسته نرم افزاری جوابگوی نیاز آنها نیست. بدین منظور ما نیازمندیهای خاص مشتریان را در نرم افزار بومی سازی نموده و در غالب برنامه های کاربری خاص به آنها ارائه می کنیم. لیست برخی از خدمات ما در این زمینه به شرح زیر است : تولید نرم افزار کاربردی سفارش مشتری (سامانه هوشمند ، سیستم مدیریت دانش ، سامانه اطلاعات مدیریت ، سیستم مدیریت محتوا و ...) - معماری نرم افزار و معماری اطلاعات - نیازسنجی - تحلیل و طراحی - پیاده سازی و برنامه نویسی - کنترل کیفیت - استقرار، نصب و راه اندازی - آموزش راهبری و کاربری - پشتیبانی و نگهداری فنی - مدیریت پروژه نرم افزاری طراحی وب و پورتال - طراحی وب سایت - سیستم مدیریت محتوا (CMS) - پورتال (پرتال) سازمانی - بهینه سازی وب سایت در موتورهای جستجو (SEO) پیاده سازی راه حل های جامع فناوری اطلاعات مبتنی بر وب مشاوره و مدیریت پروژه فناوری اطلاعات گرافیک ، هنر دیجیتال و مولتی مدیا هوشمند سازی و بکارگیری سیستم مدیریت دانش بومی سازی (Customization) نرم افزار های خارجی بر اساس نیاز سازمان ها ارائه سرویس ها و خدمات Online طراحی و بکارگیری پایگاه و بانک اطلاعاتی

+ نوشته شده در  چهارشنبه نوزدهم فروردین ۱۳۹۴ساعت 16:51  توسط ادمین  | 

سیستم های فازی

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

+ نوشته شده در  چهارشنبه نوزدهم فروردین ۱۳۹۴ساعت 16:50  توسط ادمین  | 

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

الگوریتم های ژنتیک (به انگلیسی: Genetic Algorithm)، (با نماد اختصاری GA) تکنیک جستجویی در علم رایانه برای یافتن راه‌حل تقریبی برای بهینه‌سازی و مسائل جستجو است. الگوریتم ژنتیک نوع خاصی از الگوریتم‌های تکامل است که از تکنیک‌های زیست‌شناسی فرگشتی مانند وراثت و جهش استفاده می‌کند. این الگوریتم برای اولین بار توسط جان هلند معرفی شد. در واقع الگوریتم‌های ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیش‌بینی یا تطبیق الگو استفاده می‌کنند. الگوریتم‌های ژنتیک اغلب گزینه خوبی برای تکنیک‌های پیش‌بینی بر مبنای رگرسیون هستند. در هوش مصنوعی الگوریتم ژنتیک (یا GA) یک تکنیک برنامه‌نویسی است که از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده می‌کند. مسئله‌ای که باید حل شود دارای ورودی‌هایی می‌باشد که طی یک فرایند الگوبرداری شده از تکامل ژنتیکی به راه‌حلها تبدیل می‌شود سپس راه حلها بعنوان کاندیداها توسط تابع ارزیاب (Fitness Function) مورد ارزیابی قرار می‌گیرند و چنانچه شرط خروج مسئله فراهم شده باشد الگوریتم خاتمه می‌یابد. الگوریتم ژنتیک بطور کلی یک الگوریتم مبتنی بر تکرار است که اغلب بخش‌های آن به صورت فرایندهای تصادفی انتخاب می‌شوند. این الگوریتم‌ها از بخش‌های زیر تشکیل می‌شوند: تابع برازش - نمایش – انتخاب – تغییر مقدمه هنگامی که لغت تنازع بقا به کار می‌رود اغلب بار ارزشی منفی آن به ذهن می‌آید. شاید همزمان قانون جنگل به ذهن برسد و حکم بقای قوی‌ترها! البته همیشه هم قوی‌ترین‌ها برنده نبوده‌اند. مثلاً دایناسورها با وجود جثه عظیم و قوی‌تر بودن در طی روندی کاملاً طبیعی بازیِ بقا و ادامه نسل را واگذار کردند در حالی که موجوداتی بسیار ضعیف‌تر از آنها حیات خویش را ادامه دادند. ظاهراً طبیعت، بهترین‌ها را تنها بر اساس هیکل انتخاب نمی‌کند! در واقع درست‌تر آنست که بگوییم طبیعت مناسب ترین‌ها (Fittest) را انتخاب می‌کند نه بهترین‌ها. قانون انتخاب طبیعی بدین صورت است که تنها گونه‌هایی از یک جمعیت ادامه نسل می‌دهند که بهترین خصوصیات را داشته باشند و آنهایی که این خصوصیات را نداشته باشند به تدریج و در طی زمان از بین می‌روند. الگوریتم‌های ژنتیک یکی از الگوریتم‌های جستجوی تصادفی است که ایده آن برگرفته از طبیعت می‌باشد. الگوریتم‌های ژنتیک برای روش‌های کلاسیک بهینه‌سازی در حل مسائل خطی، محدب و برخی مشکلات مشابه بسیار موفق بوده‌اند ولی الگوریتم‌های ژنتیک برای حل مسائل گسسته و غیر خطی بسیار کاراتر می‌باشند. به عنوان مثال می‌توان به مسئله فروشنده دوره گرد اشاره کرد. در طبیعت از ترکیب کروموزوم‌های بهتر، نسل‌های بهتری پدید می‌آیند. در این بین گاهی اوقات جهش‌هایی نیز در کروموزوم‌ها روی می‌دهد که ممکن است باعث بهتر شدن نسل بعدی شوند. الگوریتم ژنتیک نیز با استفاده از این ایده اقدام به حل مسائل می‌کند. روند استفاده از الگوریتم‌های ژنتیک به صورت زیر می‌باشد: الف) معرفی جواب‌های مسئله به عنوان کروموزوم ب) معرفی تابع فیت نس ج) جمع‌آوری اولین جمعیت د) معرفی عملگرهای انتخاب ه) معرفی عملگرهای تولید مثل در الگوریتم‌های ژنتیک ابتدا به طور تصادفی یا الگوریتمیک، چندین جواب برای مسئله تولید می‌کنیم. این مجموعه جواب را جمعیت اولیه می‌نامیم. هر جواب را یک کروموزوم می‌نامیم. سپس با استفاده از عملگرهای الگوریتم ژنتیک پس از انتخاب کروموزوم‌های بهتر، کروموزوم‌ها را باهم ترکیب کرده و جهشی در آنها ایجاد می‌کنیم. در نهایت نیز جمعیت فعلی را با جمعیت جدیدی که از ترکیب و جهش در کروموزوم‌ها حاصل می‌شود، ترکیب می‌کنیم. مثلاً فرض کنید گونه خاصی از افراد، هوش بیشتری از بقیه افرادِ یک جامعه یا کولونی دارند. در شرایط کاملاً طبیعی، این افراد پیشرفت بهتری خواهند کرد و رفاه نسبتاً بالاتری خواهند داشت و این رفاه، خود باعث طول عمر بیشتر و باروری بهتر خواهد بود (توجه کنید شرایط، طبیعیست نه در یک جامعه سطح بالا با ملاحظات امروزی؛ یعنی طول عمر بیشتر در این جامعه نمونه با زاد و ولد بیشتر همراه است). حال اگر این خصوصیت (هوش) ارثی باشد بالطبع در نسل بعدی همان جامعه تعداد افراد باهوش به دلیل زاد و ولد بیشترِ این‌گونه افراد، بیشتر خواهد بود. اگر همین روند را ادامه دهید خواهید دید که در طی نسل‌های متوالی دائماً جامعه نمونه ما باهوش و باهوش‌تر می‌شود. بدین ترتیب یک مکانیزم ساده طبیعی توانسته است در طی چند نسل عملاً افراد کم هوش را از جامعه حذف کند علاوه بر اینکه میزان هوش متوسط جامعه نیز دائماً در حال افزایش است. بدین ترتیب می‌توان دید که طبیعت با بهره‌گیری از یک روش بسیار ساده (حذف تدریجی گونه‌های نامناسب و در عین حال تکثیر بالاتر گونه‌های بهینه)، توانسته است دائماً هر نسل را از لحاظ خصوصیات مختلف ارتقاء بخشد. البته آنچه در بالا ذکر شد به تنهایی توصیف کننده آنچه واقعاً در قالب تکامل در طبیعت اتفاق می‌افتد نیست. بهینه‌سازی و تکامل تدریجی به خودی خود نمی‌تواند طبیعت را در دسترسی به بهترین نمونه‌ها یاری دهد. اجازه دهید تا این مسأله را با یک مثال شرح دهیم: پس از اختراع اتومبیل به تدریج و در طی سال‌ها اتومبیل‌های بهتری با سرعت‌های بالاتر و قابلیت‌های بیشتر نسبت به نمونه‌های اولیه تولید شدند. طبیعیست که این نمونه‌های متأخر حاصل تلاش مهندسان طراح جهت بهینه‌سازی طراحی‌های قبلی بوده‌اند. اما دقت کنید که بهینه‌سازی یک اتومبیل، تنها یک «اتومبیل بهتر» را نتیجه می‌دهد. اما آیا می‌توان گفت اختراع هواپیما نتیجه همین تلاش بوده است؟ یا فرضاً می‌توان گفت فضاپیماها حاصل بهینه‌سازی طرح اولیه هواپیماها بوده‌اند؟ پاسخ اینست که گرچه اختراع هواپیما قطعاً تحت تأثیر دستاوردهای‌های صنعت اتومبیل بوده است؛ اما به‌هیچ وجه نمی‌توان گفت که هواپیما صرفاً حاصل بهینه‌سازی اتومبیل و یا فضاپیما حاصل بهینه‌سازی هواپیماست. در طبیعت هم عیناً همین روند حکم‌فرماست. گونه‌های متکامل‌تری وجود دارند که نمی‌توان گفت صرفاً حاصل تکامل تدریجی گونه قبلی هستند. در این میان آنچه شاید بتواند تا حدودی ما را در فهم این مسأله یاری کند مفهومیست به نام تصادف یا جهش. به عبارتی طرح هواپیما نسبت به طرح اتومبیل یک جهش بود و نه یک حرکت تدریجی. در طبیعت نیز به همین گونه‌است. در هر نسل جدید بعضی از خصوصیات به صورتی کاملاً تصادفی تغییر می‌یابند سپس بر اثر تکامل تدریجی که پیشتر توضیح دادیم در صورتی که این خصوصیت تصادفی شرایط طبیعت را ارضا کند حفظ می‌شود در غیر این‌صورت به شکل اتوماتیک از چرخه طبیعت حذف می‌گردد. در واقع می‌توان تکامل طبیعی را به این‌صورت خلاصه کرد: جستجوی کورکورانه (تصادف یا Blind Search) + بقای قوی‌تر. حال ببینیم که رابطه تکامل طبیعی با روش‌های هوش مصنوعی چیست. هدف اصلی روش‌های هوشمندِ به کار گرفته شده در هوش مصنوعی، یافتن پاسخ بهینه مسائل مهندسی است. بعنوان مثال اینکه چگونه یک موتور را طراحی کنیم تا بهترین بازدهی را داشته باشد یا چگونه بازوهای یک ربات را متحرک کنیم تا کوتاه‌ترین مسیر را تا مقصد طی کند (دقت کنید که در صورت وجود مانع یافتن کوتاه‌ترین مسیر دیگر به سادگی کشیدن یک خط راست بین مبدأ و مقصد نیست) همگی مسائل بهینه‌سازی هستند. روش‌های کلاسیک ریاضیات دارای دو اشکال اساسی هستند. اغلب این روش‌ها نقطه بهینه محلی (Local Optima) را بعنوان نقطه بهینه کلی در نظر می‌گیرند و نیز هر یک از این روش‌ها تنها برای مسأله خاصی کاربرد دارند. الگوریتم ژنتیک چیست؟ الگوریتم‌های ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیش‌بینی یا تطبیق الگو استفاده می‌کنند. الگوریتم‌های ژنتیک اغلب گزینه خوبی برای تکنیک‌های پیش‌بینی بر مبنای رگرسیون هستند. برای مثال اگر بخواهیم نوسانات قیمت نفت را با استفاده از عوامل خارجی و ارزش رگرسیون خطی ساده مدل کنیم، این فرمول را تولید خواهیم کرد: قیمت نفت در زمان t = ضریب ۱ نرخ بهره در زمان t + ضریب ۲ نرخ بیکاری در زمان t + ثابت ۱. سپس از یک معیار برای پیدا کردن بهترین مجموعه ضرایب و ثابت‌ها جهت مدل کردن قیمت نفت استفاده خواهیم کرد. در این روش ۲ نکته اساسی وجود دارد. اول این که روش خطی است و مسئله دوم این است که ما به جای اینکه در میان «فضای پارامترها» جستجو کنیم، پارامترهای مورد استفاده را مشخص کرده‌ایم. با استفاده از الگوریتم‌های ژنتیک ما یک ابر فرمول یا طرح، تنظیم می‌کنیم که چیزی شبیه «قیمت نفت در زمان t تابعی از حداکثر ۴ متغیر است» را بیان می‌کند. سپس داده‌هایی برای گروهی از متغیرهای مختلف، شاید در حدود ۲۰ متغیر فراهم خواهیم کرد. سپس الگوریتم ژنتیک اجرا خواهد شد که بهترین تابع و متغیرها را مورد جستجو قرار می‌دهد. روش کار الگوریتم ژنتیک به طور فریبنده‌ای ساده، خیلی قابل درک و به طور قابل ملاحظه‌ای روشی است که ما معتقدیم حیوانات آنگونه تکامل یافته‌اند. هر فرمولی که از طرح داده شده بالا تبعیت کند فردی از جمعیت فرمول‌های ممکن تلقی می‌شود. متغیرهایی که هر فرمول داده‌شده را مشخص می‌کنند به عنوان یکسری از اعداد نشان داده‌شده‌اند که معادلدی. ان. ای آن فرد را تشکیل می‌دهند. موتور الگوریتم ژنتیک یک جمعیت اولیه از فرمول ایجاد می‌کند. هر فرد در برابر مجموعه‌ای از داده‌های مورد آزمایش قرار می‌گیرند و مناسبترین آنها (شاید ۱۰ درصد از مناسبترین‌ها) باقی می‌مانند؛ بقیه کنار گذاشته می‌شوند. مناسبترین افراد با هم جفتگیری (جابجایی عناصر دی ان ای) و تغییر (تغییر تصادفی عناصر دی ان ای) کرده‌اند. مشاهده می‌شود که با گذشت از میان تعداد زیادی از نسلها، الگوریتم ژنتیک به سمت ایجاد فرمول‌هایی که دقیقتر هستند، میل می‌کنند. در حالی که شبکه‌های عصبی هم غیرخطی و غیرپارامتریک هستند، جذابیت زیاد الگوریتم‌های ژنتیک این است نتایج نهایی قابل ملاحظه‌ترند. فرمول نهایی برای کاربر انسانی قابل مشاهده خواهد بود، و برای ارائه سطح اطمینان نتایج می‌توان تکنیک‌های آماری متعارف را بر روی این فرمول‌ها اعمال کرد. فناوری الگوریتم‌های ژنتیک همواره در حال بهبود است و برای مثال با مطرح کردن معادله ویروس‌ها که در کنار فرمول‌ها و برای نقض کردن فرمول‌های ضعیف تولید می‌شوند و در نتیجه جمعیت را کلاً قویتر می‌سازند. مختصراً گفته می‌شود که الگوریتم ژنتیک (یا GA) یک تکنیک برنامه‌نویسی است که از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده می‌کند. مسئله‌ای که باید حل شود ورودی است و راه حلها طبق یک الگو کدگذاری می‌شوند که تابع fitness نام دارد و هر راه حل کاندید را ارزیابی می‌کند که اکثر آنها به صورت تصادفی انتخاب می‌شوند. الگوریتم ژنتیک (GA) یک تکنیک جستجو در علم رایانه برای یافتن راه حل بهینه و مسائل جستجو است. الگوریتم‌های ژنتیک یکی از انواع الگوریتم‌های تکاملی‌اند که از علم زیست‌شناسی مثل وراثت، جهش، انتخاب ناگهانی (زیست‌شناسی)، انتخاب طبیعی و ترکیب الهام گرفته شده. عموماً راه‌حلها به صورت ۲ تایی ۰ و ۱ نشان داده می‌شوند، ولی روشهای نمایش دیگری هم وجود دارد. تکامل از یک مجموعه کاملاً تصادفی از موجودیت‌ها شروع می‌شود و در نسلهای بعدی تکرار می‌شود. در هر نسل، مناسبترین‌ها انتخاب می‌شوند نه بهترین‌ها. یک راه‌حل برای مسئله مورد نظر، با یک لیست از پارامترها نشان داده می‌شود که به آنها کروموزوم یا ژنوم می‌گویند. کروموزوم‌ها عموماً به صورت یک رشته ساده از داده‌ها نمایش داده می‌شوند، البته انواع ساختمان داده‌های دیگر هم می‌توانند مورد استفاده قرار گیرند. در ابتدا چندین مشخصه به صورت تصادفی برای ایجاد نسل اول تولید می‌شوند. در طول هر نسل، هر مشخصه ارزیابی می‌شود وارزش تناسب (fitness) توسط تابع تناسب اندازه‌گیری می‌شود. گام بعدی ایجاد دومین نسل از جامعه است که بر پایه فرایندهای انتخاب، تولید از روی مشخصه‌های انتخاب شده با عملگرهای ژنتیکی است: اتصال کروموزوم‌ها به سر یکدیگر و تغییر. برای هر فرد، یک جفت والد انتخاب می‌شود. انتخاب‌ها به گونه‌ای‌اند که مناسبترین عناصر انتخاب شوند تا حتی ضعیفترین عناصر هم شانس انتخاب داشته باشند تا از نزدیک شدن به جواب محلی جلوگیری شود. چندین الگوی انتخاب وجود دارد: چرخ منگنه‌دار)رولت(، انتخاب مسابقه‌ای (Tournament) ،... . معمولاً الگوریتم‌های ژنتیک یک عدد احتمال اتصال دارد که بین ۰٫۶ و ۱ است که احتمال به وجود آمدن فرزند را نشان می‌دهد. ارگانیسم‌ها با این احتمال دوباره با هم ترکیب می‌شوند. اتصال ۲ کروموزوم فرزند ایجاد می‌کند، که به نسل بعدی اضافه می‌شوند. این کارها انجام می‌شوند تا این که کاندیدهای مناسبی برای جواب، در نسل بعدی پیدا شوند. مرحله بعدی تغییر دادن فرزندان جدید است. الگوریتم‌های ژنتیک یک احتمال تغییر کوچک و ثابت دارند که معمولاً درجه‌ای در حدود ۰٫۰۱ یا کمتر دارد. بر اساس این احتمال، کروموزوم‌های فرزند به طور تصادفی تغییر می‌کنند یا جهش می‌یابند، مخصوصاً با جهش بیت‌ها در کروموزوم ساختمان داده‌مان. این فرایند باعث به وجود آمدن نسل جدیدی از کروموزوم‌هایی می‌شود، که با نسل قبلی متفاوت است. کل فرایند برای نسل بعدی هم تکرار می‌شود، جفت‌ها برای ترکیب انتخاب می‌شوند، جمعیت نسل سوم به وجود می‌آیند و ... این فرایند تکرار می‌شود تا این که به آخرین مرحله برسیم. شرایط خاتمه الگوریتم‌های ژنتیک عبارتند از: به تعداد ثابتی از نسل‌ها برسیم. بودجه اختصاص داده‌شده تمام شود (زمان محاسبه/پول). یک فرد (فرزند تولید شده) پیدا شود که مینیمم (کمترین) ملاک را برآورده کند. بیشترین درجه برازش فرزندان حاصل شود یا دیگر نتایج بهتری حاصل نشود. بازرسی دستی. ترکیبهای بالا. روش‌های نمایش قبل از این که یک الگوریتم ژنتیک برای یک مسئله اجرا شود، یک روش برای کد کردن ژنوم‌ها به زبان کامپیوتر باید به کار رود. یکی از روش‌های معمول کد کردن به صورت رشته‌های باینری است: رشته‌های ۰و۱. یک راه حل مشابه دیگر کدکردن راه حل‌ها در آرایه‌ای از اعداد صحیح یا اعشاری است، که دوباره هر جایگاه یک جنبه از ویژگی‌ها را نشان می‌دهد. این راه حل در مقایسه با قبلی پیچیده‌تر و مشکل‌تر است. مثلاً این روش توسط استفان کرمر، برای حدس ساختار ۳ بعدی یک پروتئین موجود در آمینو اسیدها استفاده شد. الگوریتم‌های ژنتیکی که برای آموزش شبکه‌های عصبی استفاده می‌شوند، از این روش بهره می‌گیرند. سومین روش برای نمایش صفات در یک GA یک رشته از حروف است، که هر حرف دوباره نمایش دهنده یک خصوصیت از راه حل است. خاصیت هر ۳تای این روش‌ها این است که آنها تعریف سازنده‌ایی را که تغییرات تصادفی در آنها ایجاد می‌کنند را آسان می‌کنند: ۰ را به ۱ وبرعکس، اضافه یا کم کردن ارزش یک عدد یا تبدیل یک حرف به حرف دیگر. یک روش دیگر که توسط John Koza توسعه یافت، برنامه‌نویسی ژنتیک (genetic programming)است؛ که برنامه‌ها را به عنوان شاخه‌های داده در ساختار درخت نشان می‌دهد. در این روش تغییرات تصادفی می‌توانند با عوض کردن عملگرها یا تغییر دادن ارزش یک گره داده شده در درخت، یا عوض کردن یک زیر درخت با دیگری به وجود آیند. عملگرهای یک الگوریتم ژنتیک در هر مسئله قبل از آنکه بتوان الگوریتم ژنتیک را برای یافتن یک پاسخ به کار برد به دو عنصر نیاز است:در ابتدا روشی برای ارائه یک جواب به شکلی که الگوریتم ژنتیک بتواند روی آن عمل کند لازم است. در روش سنتی یک جواب به صورت یک رشته از بیتها، اعداد یا نویسهها نمایش داده می‌شود. دومین جزء اساسی الگوریتم ژنتیک روشی است که بتواند کیفیت هر جواب پیشنهاد شده را با استفاده از توابع تناسب محاسبه نماید. مثلاً اگر مسئله هر مقدار وزن ممکن را برای یک کوله پشتی مناسب بداند بدون اینکه کوله پشتی پاره شود، (مسئله کوله پشتی را ببینید) یک روش برای ارائه پاسخ می‌تواند به شکل رشته ای از بیتهای ۰ و۱ در نظر گرفته شود، که ۱ یا ۰ بودن نشانه اضافه شدن یا نشدن وزن به کوله پشتی است. تناسب پاسخ، با تعیین وزن کل برای جواب پیشنهاد شده اندازه‌گیری می‌شود. ایده اصلی در دهه هفتاد میلادی دانشمندی از دانشگاه میشیگان به نام جان هلند ایده استفاده از الگوریتم ژنتیک را در بهینه‌سازی‌های مهندسی مطرح کرد. ایده اساسی این الگوریتم انتقال خصوصیات موروثی توسط ژن‌هاست. فرض کنید مجموعه خصوصیات انسان توسط کروموزوم‌های او به نسل بعدی منتقل می‌شوند. هر ژن در این کروموزوم‌ها نماینده یک خصوصیت است. بعنوان مثال ژن ۱ می‌تواند رنگ چشم باشد، ژن ۲ طول قد، ژن ۳ رنگ مو و الی آخر. حال اگر این کروموزوم به تمامی، به نسل بعد انتقال یابد، تمامی خصوصیات نسل بعدی شبیه به خصوصیات نسل قبل خواهد بود. بدیهیست که در عمل چنین اتفاقی رخ نمی‌دهد. در واقع بصورت همزمان دو اتفاق برای کروموزوم‌ها می‌افتد. اتفاق اول جهش (Mutation) است. «جهش» به این صورت است که بعضی ژن‌ها بصورت کاملاً تصادفی تغییر می‌کنند. البته تعداد این گونه ژن‌ها بسیار کم می‌باشد اما در هر حال این تغییر تصادفی همانگونه که پیشتر دیدیم بسیار مهم است. مثلاً ژن رنگ چشم می‌تواند بصورت تصادفی باعث شود تا در نسل بعدی یک نفر دارای چشمان سبز باشد. در حالی که تمامی نسل قبل دارای چشم قهوه‌ای بوده‌اند. علاوه بر «جهش» اتفاق دیگری که می‌افتد و البته این اتفاق به تعداد بسیار بیشتری نسبت به «جهش» رخ می‌دهد چسبیدن دو کروموزوم از طول به یکدیگر و تبادل برخی قطعات بین دو کروموزوم است. این مسأله با نام Crossover شناخته می‌شود. این همان چیزیست که باعث می‌شود تا فرزندان ترکیب ژنهای متفاوتی را (نسبت به والدین خود) به فرزندان خود انتقال دهند. روش‌های انتخاب روش‌های مختلفی برای الگوریتم‌های ژنتیک وجود دارند که می‌توان برای انتخاب ژنوم‌ها از آن‌ها استفاده کرد. اما روش‌های لیست شده در پایین از معمول‌ترین روش‌ها هستند. انتخاب Elitist مناسب‌ترین عضو هر اجتماع انتخاب می‌شود.Elitist Selection انتخاب Roulette یک روش انتخاب است که در آن عنصری که عدد برازش (تناسب) بیشتری داشته باشد، انتخاب می‌شود. در واقع به نسبت عدد برازش برای هر عنصر یک احتمال تجمعی نسبت می‌دهیم و با این احتمال است که شانس انتخاب هر عنصر تعیین می‌شود. Roulette Selection انتخاب Scaling به موازات افزایش متوسط عدد برازش جامعه، سنگینی انتخاب هم بیشتر می‌شود و جزئی‌تر. این روش وقتی کاربرد دارد که مجموعه دارای عناصری باشد که عدد برازش بزرگی دارند و فقط تفاوت‌های کوچکی آن‌ها را از هم تفکیک می‌کند.Scaling Selection انتخاب Tournament یک زیر مجموعه از صفات یک جامعه انتخاب می‌شوند و اعضای آن مجموعه با هم رقابت می‌کنند و سرانجام فقط یک صفت از هر زیرگروه برای تولید انتخاب می‌شوند.Tournament Selection بعضی از روش‌های دیگر عبارتند از:Hierarchical Selection, Steady-State Selection, Rank Selection, Tournament Selection مثال عملی در این مثال می‌خواهیم مسئلهٔ ۸ وزیر را بوسیلهٔ این الگوریتم حل کنیم. هدف مشخص کردن چیدمانی از ۸ وزیر در صفحهٔ شطرنج است به نحوی که هیچ‌یک همدیگر را تهدید نکند. ابتدا باید نسل اولیه را تولید کنیم. صفحه شطرنج ۸ در ۸ را در نظر بگیرید. ستونها را با اعداد ۰ تا ۷ و سطرها را هم از ۰ تا ۷ مشخص می‌کنیم. برای تولید حالات (کروموزومها) اولیه بصورت تصادفی وزیرها را در ستونهای مختلف قرار می‌دهیم. باید در نظر داشت که وجود نسل اولیه با شرایط بهتر سرعت رسیدن به جواب را افزایش می‌دهد (اصالت نژاد) به همین خاطر وزیر i ام را در خانهٔ تصادفی در ستون i ام قرار می‌دهیم (به جای اینکه هر مهره‌ای بتواند در هر خانه خالی قرار بگیرد). با اینکار حداقل از برخورد ستونی وزیرها جلوگیری می‌شود. توضیح بیشتر اینکه مثلاً وزیر اول را بطور تصادفی در خانه‌های ستون اول که با ۰ مشخص شده قرار می‌دهیم تا به اخر. i=۰،۱، ... ۷ حال باید این حالت را به نحوی کمی مدل کرد. چون در هر ستون یک وزیر قرار دادیم هر حالت را بوسیلهٔ رشته اعدادی که عدد k ام در این رشته شمارهٔ سطر وزیر موجود در ستون i ام را نشان می‌دهد. یعنی یک حالت که انتخاب کردیم می‌تواند بصورت زیر باشد: ۶۷۲۰۳۴۲۲ که ۶ شمارهٔ سطر ۶ است که وزیر اول که شمارهٔ ستونش ۰ است می‌باشد تا اخر. فرض کنید ۴ حالت زیر به تصادف تولید شده‌اند. این چهار حالت را بعنوان کروموزومهای اولیه بکار می‌گیریم. ) ۶۷۲۰۳۴۲۲ ) ۷۰۰۶۳۳۵۴ ) ۱۷۵۲۲۰۶۳ )۴۳۶۰۲۴۷۱ حال نوبت به تابع برازش fitness function می‌رسد. تابعی را که در نظر می‌گیریم تابعی است که برای هر حالت تعداد برخوردها (تهدیدها) را در نظر می‌گیرد. هدف صفر کردن یا حداقل کردن این تابع است. پس احتمال انتخاب کروموزومی برای تولید نسل بیشتر است که مقدار محاسبه شده توسط تابع برازش برای آن کمتر باشد.(روشهای دیگری نیز برای انتخاب وجود دارد) مقدار برازش برای حالات اولیه بصورت زیر می‌باشد: (مقدار عدد برازش در جلوی هر کروموزوم (با رنگ قرمز)همان تعداد برخوردهای وزیران می‌باشد) )۶۷۲۰۳۴۲۰ ← ۶ )۷۰۰۶۳۳۵۴ ← ۸ )۱۷۵۲۲۰۶۳ ← ۲ )۴۳۶۰۲۴۷۱ ← ۴ پس احتمالها بصورت زیر است: p(۳)>p(۴)>p(۱)>p(۲ در اینجا کروموزومهایی را انتخاب می‌کنیم که برازندگی کمتری دارند. پس کروموزوم ۳ برای crossover با کروموزومهای ۴ و ۱ انتخاب می‌شود. نقطهٔ ترکیب را بین ارقام ۶ و ۷ در نظر می‌گیریم. ۴ و ۳: )۱۷۵۲۲۰۷۱ )۴۳۶۰۲۴۶۳ ۱ و ۳: )۱۷۵۲۲۰۲۰ )۶۷۲۰۳۴۶۳ حال نوبت به جهش می‌رسد. در جهش باید یکی از ژنها تغییر کند . فرض کنید از بین کروموزومهای ۵ تا ۸ کروموزوم شمارهٔ ۷ و از بین ژن چهارم از ۲ به ۳ جهش یابد. پس نسل ما شامل کروموزومهای زیر با امتیازات نشان داده شده می‌باشد: (امتیازات تعداد برخوردها می‌باشد) )۶۷۲۰۳۴۲۰ ← ۶ )۷۰۰۶۳۳۵۴ ← ۸ )۱۷۵۲۲۰۶۳ ← ۲ )۴۳۶۰۲۴۷۱ ← ۴ )۱۷۵۲۲۰۷۱ ← ۶ )۴۳۶۰۲۴۶۳ ← ۴ )۱۷۵۳۲۰۲۰ ← ۴ )۶۷۲۰۳۴۶۳ ← ۵ کروموزوم ۳ کاندیدای خوبی برای ترکیب با ۶ و ۷ می‌باشد. (فرض در این مرحله جهشی صورت نگیرد و نقطهٔ اتصال بین ژنهای ۱ و ۲ باشد) )۶۷۲۰۳۴۲۰ ← ۶ )۷۰۰۶۳۳۵۴ ← ۸ )۱۷۵۲۲۰۶۳ ← ۲ )۴۳۶۰۲۴۷۱ ← ۴ )۱۷۵۲۲۰۷۱ ← ۶ )۴۳۶۰۲۴۶۳ ← ۴ )۱۷۵۳۲۰۳۰ ← ۴ )۶۷۲۰۳۴۶۳ ← ۵ )۱۳۶۰۲۴۶۳ ← ۲ )۴۷۵۲۲۰۶۳ ← ۲ )۱۷۵۲۲۰۲۰ ← ۴ )۱۷۵۲۲۰۶۳ ← ۲ کروموزومهای از ۹ تا ۱۲ را نسل جدید می‌گوییم. بطور مشخص کروموزوم‌های تولید شده در نسل جدید به جواب مسئله نزدیکتر شده‌اند. با ادامهٔ همین روند پس از چند مرحله به جواب مورد نظر خواهیم رسید. پایان فرق این مقاله با مقاله‌های مشابه با این موضوع در این می‌باشد که در این جا از نگاه کاربردی به الگوریتم های ژنتیکی نگاه شده است و از این منظر در این مقاله به چند نمونه کاربرد این تکنیک در مسائل معروف اشاره شده است. در این مقاله در ابتدا به جایگاه الگوریتم های ژنتیکی و کاربرد آن ها در علم هوش مصنوعی می پردازیم و سپس به توضیح این الگوریتم و انواع آن و همچنین به نحوهٔ نمایش آن می پردازیم. همچنین در انتها به چند منبع برای نمونه‌های کد باز(متن‌باز) اشاره می کنیم که خوانندگان در صورت علاقه به کار عملی این الگوریتم را به صورت عملی اجرا کنند تا با عملکرد آن آشنا شوند. روش جستجوی تکاملی روش های جستجوی ناآگاهانه، اگاهانه و متاهیوریستیک برای حل مسائل هوش مصنوعی بسیار کارآمد می‌باشند. همچنین می دانیم که در مورد مسائل بهینه سازی اغلب روش های آگاهانه و ناآگاهانه جوابگوی نیاز ما نخواهند بود. چرا که بیشتر مسائل بهینه سازی در رده مسائل NP قرار دارند. بنابراین نیاز به روش جستجوی دیگری داریم که بتواند در فضای حالت مسائل NP به طرف جواب بهینه سراسری حرکت کند. بدین منظور روش های جستجوی متاهیوریستیک را مطرح می کنیم، این روش های جستجو می‌توانند به سمت بهینگی های سراسری مسئله حرکت کنند. در کنار روش های جستجوی متاهیوریستیکی، روش های جستجوی دیگری نیز وجود دارند که به روش های تکاملی معروفند. در ادامه با این نوع الگوریتم بیشتر آشنا می شویم.(لازم به ذکر است که در نگاه کاربردی به الگوریتم های ژنتیکی، اولین قدم در فهم آن، تفهیم الگوریتم های تکامل و تفاوت آن با دیگر الگوریتم های مشابه است.)

+ نوشته شده در  چهارشنبه نوزدهم فروردین ۱۳۹۴ساعت 16:49  توسط ادمین  | 

شبکه عصبی مصنوعی

شبکه عصبی مصنوعی شبکه‌های عصبی مصنوعی (Artificial Neural Network - ANN) یا به زبان ساده‌تر شبکه‌های عصبی سیستم‌ها و روش‌های محاسباتی نوینی هستند برای یادگیری ماشینی، نمایش دانش، و در انتها اعمال دانش به دست آمده در جهت بیش‌بینی پاسخ‌های خروجی از سامانه‌های پیچیده. ایدهٔ اصلی این گونه شبکه‌ها (تا حدودی) الهام‌گرفته از شیوهٔ کارکرد سیستم عصبی زیستی، برای پردازش داده‌ها، و اطلاعات به منظور یادگیری و ایجاد دانش قرار دارد. عنصر کلیدی این ایده، ایجاد ساختارهایی جدید برای سامانهٔ پردازش اطلاعات است. این سیستم از شمار زیادی عناصر پردازشی فوق العاده بهم‌پیوسته با نام نورون تشکیل شده که برای حل یک مسأله با هم هماهنگ عمل می‌کنند و توسط سیناپس‎ها(ارتباطات الکترومغناطیسی) اطلاعات را منتقل می‎کنند. در این شبکه‌ها اگر یک سلول آسیب ببیند بقیه سلول‎ها می‌توانند نبود آنرا جبران کرده، و نیز در بازسازی آن سهیم باشند. این شبکه‌ها قادر به یادگیری‎اند. مثلاً با اعمال سوزش به سلول‎های عصبی لامسه، سلول‎ها یاد می‌گیرند که به طرف جسم داغ نروند و با این الگوریتم سیستم می‌آموزد که خطای خود را اصلاح کند. یادگیری در این سیستم‎ها به صورت تطبیقی صورت می‌گیرد، یعنی با استفاده ازمثال‎ها وزن سیناپس‎ها به گونه‌ای تغییر می‌کند که در صورت دادن ورودی‎های جدید، سیستم پاسخ درستی تولید کند. توافق دقیقی بر تعریف شبکه عصبی در میان محققان وجود ندارد؛ اما اغلب آنها موافقند که شبکه عصبی شامل شبکه‎ای از عناصر پردازش ساده (نورونها) است، که می‌تواند رفتار پیچیده کلی تعیین شده‎ای از ارتباط بین عناصر پردازش و پارامترهای عنصر را نمایش دهد. منبع اصلی و الهام بخش برای این تکنیک، از آزمایش سیستم مرکزی عصبی و نورونها (آکسون‎ها، شاخه‌های متعدد سلولهای عصبی و محلهای تماس دو عصب)نشأت گرفته‌است، که یکی از قابل توجه‎ترین عناصر پردازش اطلاعات سیستم عصبی را تشکیل می‎دهد. در یک مدل شبکه عصبی، گره‎های ساده (بطور گسترده «نورون»، «نئورونها»، "PE«ها (»عناصر پردازش«) یا»واحدها«) برای تشکیل شبکه‎ای از گره‎ها، به هم متصل شده اند—به همین دلیل به آن، اصطلاح»شبکه‎های عصبی" اطلاق می‎شود. در حالی که یک شبکه عصبی نباید به خودی خود سازگارپذیر باشد، استفاده عملی از آن بواسطه الگوریتمهایی امکان پذیر است، که جهت تغییر وزن ارتباطات در شبکه (به منظور تولید سیگنال موردنظر) طراحی شده باشد. با استفاده از دانش برنامه‌نویسی رایانه می‌توان ساختار داده‌ای طراحی کرد که همانند یک نرون عمل نماید. سپس با ایجاد شبکه‌ای از این نورون‌های مصنوعی به هم پیوسته، ایجاد یک الگوریتم آموزشی برای شبکه و اعمال این الگوریتم به شبکه آن را آموزش داد. این شبکه‌ها برای تخمین (Estimation) و تقریب (Approximation)کارایی بسیار بالایی از خود نشان داده‌اند. گستره کاربرد این مدل‌های ریاضی بر گرفته از عملکرد مغز انسان، بسیار وسیع می‌باشد که به عنوان چند نمونه کوچک می‌توان استفاده از این ابزار ریاضی در پردازش سیگنال‌های بیولوییکی، مخابراتی و الکترونیکی تا کمک در نجوم و فضا نوردی را نام برد. اگر یک شبکه را هم‌ارز با یک گراف بدانیم، فرایند آموزش شبکه تعیین نمودن وزن هر یال و bias اولیهٔ خواهد بود. شبکه عصبی شبکه عصبی یک سیستم ارگانی شامل نورون‌ها می‌باشد که اعمال و واکنش جانداران را هماهنگ می‌سازد و سیگنال‌ها را به بخشهای متفاوت بدن می‌فرستد. در بیشتر جانداران سیستم عصبی شامل دو بخش مرکزی و بخش جانبی است. در استفاده‌های جدیدتر این عبارت به شبکه عصبی مصنوعی که از نورون‌هایی مصنوعی ساخته شده‌است هم اشاره دارد. بنابراین عبارت 'شبکه عصبی' در حالت کلی به دو مفهوم مختلف شبکهٔ عصبی زیستی و شبکهٔ عصبی مصنوعی مختلف اشاره دارد. توصیف نام سیستم عصبی از اعصاب گرفته می‌شود. در حالت کلی، یک شبکه عصبی زیستی از مجموعه یا مجموعه‌ای از نورون‌های به صورت فیزیکی به هم متصل یا از لحاظ عملکردی به هم وابسته تشکیل شده‌است. هر نورون می‌تواند به تعداد بسیار زیادی از نورون‌ها وصل باشد و تعداد کل نورون‌ها و اتصالات بین آن‌ها می‌تواند بسیار زیاد باشد. اتصالات، که به آن‌ها سیناپس گفته می‌شود، معمولاً از آکسون‌ها و دندریت‌ها تشکلیل شده‌اند. هوش مصنوعی و مدل سازی شناختی سعی بر این دارند که بعضی از خصوصیات شبکه‌های عصبی را شبیه سازی کنند. این دو اگرچه در روش‌هاشان به هم شبیه هستند اما هدف هوش مصنوعی حل مسائل مشخصی است در حالی که هدف مدل سازی شناختی ساخت مدل‌های ریاضی سامانه‌های نورونی زیستی است. شبکه‌های عصبی زیستی شبکه‌های عصبی زیستی مجموعه‌ای بسیار عظیم از پردازشگرهای موازی به نام نورون اند که به صورت هماهنگ برای حل مسئله عمل می‌کنند و توسط سیناپس‌ها (ارتباط‌های الکترومغناطیسی) اطلاعات را منتقل می‌کنند. در این شبکه‌ها اگر یک سلول آسیب ببیند بقیه سلول‌ها می‌توانند نبود آنرا جبران کرده و نیز در بازسازی آن سهیم باشند. این شبکه‌ها قادر به یادگیری اند. مثلا با اعمال سوزش به سلول‌های عصبی لامسه، سلول‌ها یاد می‌گیرند که به طرف جسم داغ نروند و با این الگوریتم سامانه می‌آموزد که خطای خود را اصلاح کند. یادگیری در این سامانه‌ها به صورت تطبیقی صورت می‌گیرد، یعنی با استفاده ازمثال‌ها وزن سیناپس‌ها به گونه‌ای تغییر می‌کند که در صورت دادن ورودی‌های تازه سامانه پاسخ درستی تولید کند. معرفی شبکه عصبی مصنوعی شبکه عصبی مصنوعی یک سامانه پردازشی داده‌ها است که از مغز انسان ایده گرفته و پردازش داده‌ها را به عهدهٔ پردازنده‌های کوچک و بسیار زیادی سپرده که به صورت شبکه‌ای به هم پیوسته و موازی با یکدیگر رفتار می‌کنند تا یک مسئله را حل نمایند. در این شبکه‌ها به کمک دانش برنامه نویسی، ساختار داده‌ای طراحی می‌شود که می‌تواند همانند نورون عمل کند. که به این ساختارداده نورون گفته می‌شود. بعد باایجاد شبکه‌ای بین این نورونها و اعمال یک الگوریتم آموزشی به آن، شبکه را آموزش می‌دهند. در این حافظه یا شبکهٔ عصبی نورونها دارای دو حالت فعال (روشن یا ۱) و غیرفعال (خاموش یا ۰) اند و هر یال (سیناپس یا ارتباط بین گره‌ها) دارای یک وزن می‌باشد. یال‌های با وزن مثبت، موجب تحریک یا فعال کردن گره غیر فعال بعدی می‌شوند و یال‌های با وزن منفی، گره متصل بعدی را غیر فعال یا مهار (در صورتی که فعال بوده باشد) می‌کنند. نورون مصنوعی یک نورون مصنوعی سامانه‌ای است با تعداد زیادی ورودی و تنها یک خروجی. نورون دارای دو حالت می‌باشد، حالت آموزش و حالت عملکرد. در حالت آموزش نورون یاد می‌گیرد که در مقابل الگوهای ورودی خاص برانگیخته شود و یا در اصطلاح آتش کند. در حالت عملکرد وقتی یک الگوی ورودی شناسایی شده وارد شود، خروجی متناظر با آن ارائه می‌شود. اگر ورودی جزء ورودی‌های از پیش شناسایی شده نباشد، قوانین آتش برای بر انگیختگی یا عدم آن تصمیم گیری می‌کند. از نورون‌های انسان تا نورون مصنوعی با کنار گذاشتن برخی از خواص حیاتی نورون‌ها و ارتباطات درونی آنها می‌توان یک مدل ابتدایی از نورون را به وسیله کامپیوتر شبیه سازی کرد. ساختار شبکه‌های عصبی یک شبکه عصبی شامل اجزای سازنده لایه‌ها و وزن‌ها می‌باشد. رفتار شبکه نیز وابسته به ارتباط بین اعضا است. در حالت کلی در شبکه‌های عصبی سه نوع لایه نورونی وجود دارد: لایه ورودی: دریافت اطلاعات خامی که به شبکه تغذیه شده‌است. لایه‌های پنهان: عملکرد این لایه‌ها به وسیله ورودی‌ها و وزن ارتباط بین آنها و لایه‌های پنهان تعیین می‌شود. وزن‌های بین واحدهای ورودی و پنهان تعیین می‌کند که چه وقت یک واحد پنهان باید فعال شود. لایه خروجی: عملکرد واحد خروجی بسته به فعالیت واحد پنهان و وزن ارتباط بین واحد پنهان و خروجی می‌باشد. شبکه‌های تک لایه و چند لایه‌ای نیز وجود دارند که سازماندهی تک لایه که در آن تمام واحدها به یک لایه اتصال دارند بیشترین مورد استفاده را دارد و پتانسیل محاسباتی بیشتری نسبت به سازماندهی‌های چند لایه دارد. در شبکه‌های چند لایه واحدها به وسیله لایه‌ها شماره گذاری می‌شوند (به جای دنبال کردن شماره گذاری سراسری). هر دو لایه از یک شبکه به وسیله وزن‌ها و در واقع اتصالات با هم ارتباط می‌یابند. در شبکه‌های عصبی چند نوع اتصال و یا پیوند وزنی وجود دارد: پیشرو: بیشترین پیوندها از این نوع است که در آن سیگنال‌ها تنها در یک جهت حرکت می‌کنند. از ورودی به خروجی هیچ بازخوردی (حلقه) وجود ندارد. خروجی هر لایه بر همان لایه تاثیری ندارد. پسرو: داده‌ها از گره‌های لایه بالا به گره‌های لایه پایین بازخورانده می‌شوند. جانبی: خروجی گره‌های هر لایه به عنوان ورودی گره‌های همان لایه استفاده می‌شوند. تقسیم بندی شبکه‌های عصبی بر مبنای روش آموزش به چهار دسته تقسیم می‌شوند: وزن ثابت: آموزشی در کار نیست و مقادیر وزن‌ها به هنگام نمی‌شود. کاربرد: بهینه سازی اطلاعات (کاهش حجم، تفکیک پذیری و فشرده سازی) و حافظه‌های تناظری آموزش بدون سرپرست: وزن‌ها فقط بر اساس ورودی‌ها اصلاح می‌شوند و خروجی مطلوب وجود ندارد تا با مقایسه خروجی شبکه با آن و تعیین مقدار خطا وزن‌ها اصلاح شود. وزن‌ها فقط بر اساس اطلاعات الگوهای ورودی به هنگام می‌شوند. هدف استخراج مشخصه‌های الگوهای ورودی بر اساس راهبرد خوشه یابی و یا دسته‌بندی و تشخیص شباهت‌ها (تشکیل گروه‌هایی با الگوی مشابه) می‌باشد، بدون اینکه خروجی یا کلاس‌های متناظر با الگوهای ورودی از قبل مشخص باشد. این یاد گیری معمولاً بر پایه شیوه برترین هم خوانی انجام می‌گیرد. شبکه بدون سرپرست وزن‌های خود را بر پایه خروجی حاصل شده از ورودی تغییر می‌دهد تا در برخورد بعدی پاسخ مناسبی را برای این ورودی داشته باشد. در نتیجه شبکه یاد می‌گیرد چگونه به ورودی پاسخ بدهد. اصولا هدف این است که با تکنیک نورون غالب نورونی که بیشترین تحریک آغازین را دارد برگزیده شود. بنابر این در شبکه‌های بدون سرپرست یافتن نورون غالب یکی از مهمترین کارها است. آموزش با سرپرست: به ازای هر دسته از الگوهای ورودی خروجی‌های متناظر نیز به شبکه نشان داده می‌شود و تغییر وزن‌ها تا موقعی صورت می‌گیرد که اختلاف خروجی شبکه به ازای الگوهای آموزشی از خروجی‌های مطلوب در حد خطای قابل قبولی باشد. در این روش‌ها یا از خروجی‌ها به وزن‌ها ارتباط وجود دارد یا خلا به صورت پس انتشار از لایه خروجی به ورودی توزیع شده‌است و وزن‌ها اصلاح می‌شوند. هدف طرح شبکه‌ای است که ابتدا با استفاده از داده‌های آموزشی موجود، آموزش ببیند و سپس با ارائه بردار ورودی به شبکه که ممکن است شبکه آن را قبلا فراگرفته یا نگرفته باشد کلاس آن را تشخیص دهد. چنین شبکه‌ای به طور گسترده برای کارهای تشخیص الگو به کار گرفته می‌شود. آموزش تقویتی: کیفیت عملکرد سامانه به صورت گام به گام نسبت به زمان بهبود می‌یابد. الگوهای آموزشی وجود ندارد اما با استفاده از سیگنالی به نام نقاد بیانی از خوب و یا بد بودن رفتار سامانه بدست می‌آید (حالتی بین یادگیری با سرپرست و بدون سرپرست). کاربرد شبکه‌های عصبی شبکه‌های عصبی مصنوعی دارای دامنه کاربرد وسیعی می‌باشند از جمله سامانه‌های آنالیز ریسک، کنترل هواپیما بدون خلبان، آنالیز کیفیت جوشکاری، آنالیز کیفیت کامپیوتر، آزمایش اتاق اورژانس، اکتشاف نفت و گاز، سامانه‌های تشخیص ترمز کامیون، تخمین ریسک وام، شناسایی طیفی، تشخیص دارو، فرآیندهای کنترل صنعتی، مدیریت خطا، تشخیص صدا، تشخیص هپاتیت، بازیابی اطلاعات راه دور، شناسایی مین‌های زیردریایی، تشخیص اشیاء سه بعدی و دست نوشته‌ها و چهره و... در کل می‌توان کاربردهای شبکه‌های عصبی را به صورت زیر دسته بندی کرد: تناظر (شبکه الگوهای مغشوش وبه هم ریختهرا بازشناسی می‌کند)، خوشه یابی، دسته بندی، شناسایی، بازسازی الگو، تعمیم دهی (به دست آوردن یک پاسخ صحیح برای محرک ورودی که قبلا به شبکه آموزش داده نشده)، بهینه سازی. امروزه شبکه‌های عصبی در کاربردهای مختلفی نظیر مسائل تشخیص الگو که خود شامل مسائلی مانند تشخیص خط، شناسایی گفتار، پردازش تصویر و مسائلی از این دست می‌شود و نیز مسائل دسته بندی مانند دسته بندی متون یا تصاویر، به کار می‌روند. در کنترل یا مدل سازی سامانه‌هایی که ساختار داخلی ناشناخته یا بسیار پیچیده‌ای دارند نیز به صورت روز افزون از شبکه‌های عصبی مصنوعی استفاده می‌شود. به عنوان مثال می‌توان در کنترل ورودی یک موتور از یک شبکه عصبی استفاده نمود که در این صورت شبکه عصبی خود تابع کنترل را یاد خواهد گرفت. معایب شبکه‌های عصبی با وجود برتری‌هایی که شبکه‌های عصبی نسبت به سامانه‌های مرسوم دارند، معایبی نیز دارند که پژوهشگران این رشته تلاش دارند که آنها را به حداقل برسانند، از جمله: قواعد یا دستورات مشخصی برای طراحی شبکه جهت یک کاربرد اختیاری وجود ندارد. در مورد مسائل مدل سازی، صرفاً نمی‌توان با استفاده از شبکه عصبی به فیزیک مساله پی برد. به عبارت دیگر مرتبط ساختن پارامترها یا ساختار شبکه به پارامترهای فرآیند معمولاً غیر ممکن است. دقت نتایج بستگی زیادی به اندازه مجموعه آموزش دارد. آموزش شبکه ممکن است مشکل ویا حتی غیر ممکن باشد. پیش بینی عملکرد آینده شبکه (عمومیت یافتن) آن به سادگی امکان پذیر نیست. شبکه عصبی و هوش مصنوعی شبکه‌های عصبی مصنوعی (Artificial Neural Network - ANN) یا به زبان ساده‌تر شبکه‌های عصبی سیستم‌ها و روش‌های محاسباتی نوینی هستند برای یادگیری ماشینی، نمایش دانش، و در انتها اعمال دانش به دست آمده در جهت بیش‌بینی پاسخ‌های خروجی از سامانه‌های پیچیده. ایدهٔ اصلی این گونه شبکه‌ها (تا حدودی) الهام‌گرفته از شیوهٔ کارکرد سیستم عصبی زیستی، برای پردازش داده‌ها، و اطلاعات به منظور یادگیری و ایجاد دانش قرار دارد. عنصر کلیدی این ایده، ایجاد ساختارهایی جدید برای سامانهٔ پردازش اطلاعات است. این سیستم از شمار زیادی عناصر پردازشی فوق العاده بهم‌پیوسته با نام نورون تشکیل شده که برای حل یک مسأله با هم هماهنگ عمل می‌کنند و توسط سیناپس‎ها(ارتباطات الکترومغناطیسی) اطلاعات را منتقل می‎کنند. در این شبکه‌ها اگر یک سلول آسیب ببیند بقیه سلول‎ها می‌توانند نبود آنرا جبران کرده، و نیز در بازسازی آن سهیم باشند. این شبکه‌ها قادر به یادگیری‎اند. مثلا با اعمال سوزش به سلول‎های عصبی لامسه، سلول‎ها یاد می‌گیرند که به طرف جسم داغ نروند و با این الگوریتم سیستم می‌آموزد که خطای خود را اصلاح کند. یادگیری در این سیستم‎ها به صورت تطبیقی صورت می‌گیرد، یعنی با استفاده ازمثال‎ها وزن سیناپس‎ها به گونه‌ای تغییر می‌کند که در صورت دادن ورودی‎های جدید، سیستم پاسخ درستی تولید کند. توافق دقیقی بر تعریف شبکه عصبی در میان محققان وجود ندارد؛ اما اغلب آنها موافقند که شبکه عصبی شامل شبکه‎ای از عناصر پردازش ساده (نورونها) است، که می‌تواند رفتار پیچیده کلی تعیین شده‎ای از ارتباط بین عناصر پردازش و پارامترهای عنصر را نمایش دهد. منبع اصلی و الهام بخش برای این تکنیک، از آزمایش سیستم مرکزی عصبی و نورونها (آکسون‎ها، شاخه‌های متعدد سلولهای عصبی و محلهای تماس دو عصب)نشأت گرفته‌است، که یکی از قابل توجه‎ترین عناصر پردازش اطلاعات سیستم عصبی را تشکیل می‎دهد. در یک مدل شبکه عصبی، گره‎های ساده (بطور گسترده «نورون»، «نئورونها»، "PE«ها (»عناصر پردازش«) یا»واحدها«) برای تشکیل شبکه‎ای از گره‎ها، به هم متصل شده اند—به همین دلیل به آن، اصطلاح»شبکه‎های عصبی" اطلاق می‎شود. در حالی که یک شبکه عصبی نباید به خودی خود سازگارپذیر باشد، استفاده عملی از آن بواسطه الگوریتمهایی امکان پذیر است، که جهت تغییر وزن ارتباطات در شبکه (به منظور تولید سیگنال موردنظر) طراحی شده باشد. با استفاده از دانش برنامه‌نویسی رایانه می‌توان ساختار داده‌ای طراحی کرد که همانند یک نرون عمل نماید. سپس با ایجاد شبکه‌ای از این نورون‌های مصنوعی به هم پیوسته، ایجاد یک الگوریتم آموزشی برای شبکه و اعمال این الگوریتم به شبکه آن را آموزش داد. این شبکه‌ها برای تخمین (Estimation) و تقریب (Approximation)کارایی بسیار بالایی از خود نشان داده‌اند. گستره کاربرد این مدل‌های ریاضی بر گرفته از عملکرد مغز انسان، بسیار وسیع می‌باشد که به عنوان چند نمونه کوچک می‌توان استفاده از این ابزار ریاضی در پردازش سیگنال‌های بیولوییکی، مخابراتی و الکترونیکی تا کمک در نجوم و فضا نوردی را نام برد. اگر یک شبکه را هم‌ارز با یک گراف بدانیم، فرآیند آموزش شبکه تعیین نمودن وزن هر یال و bias اولیهٔ خواهد بود. شبکه‌های عصبی مصنوعی (Artificial Neural Network) شبکه‌های عصبی مصنوعی از مباحث جدیدی است که دانشمندان علوم کامپیوتر به آن علاقمند شده‌اند و برای پیشرفت هرچه بیشتر علوم کامپیوتر وقت و هزینه بسیاری را صرف آن کرده و می‌کنند. این موضوع با ایده گرفتن از سیستم عصبی بدن انسان و با هدف شبیه‌سازی هرچه بیشتر کامپیوتر به انسان شکل گرفت و تا حال به خوبی پیشرفته است. از جمله کاربردهای این بحث می‌توان از شناسایی الگوها, پردازش تصویر و رویت, هوش مصنوعی, کنترل رباتها و موارد بسیار دیگر نام برد. ما در این مقاله پس از مقدمه به مسائل در خور شبکه‌های عصبی مصنوعی و نیز کاربردهای آن خواهیم پرداخت, در ادامه Perceptron ها را که یکی از مهمترین الگوریتم‌های شبکه‌های عصبی مصنوعی می‌باشد معرفی می‌کنیم. 1- مقدمه 1-1- ایده پیدایش شبکه‌های عصبی مصنوعی آیا کامپیوتر میتواند همان نوع از محاسباتی را که یک فرد هوشمند انجام میدهد به کار گیرد؟ بسیاری از دانشمندان عقیده داشته ودارند که این بحث باید مورد توجه قرار گیرد. شبکه‌های عصبی در حل مسائل یک جهت جدید و متمایز نسبت به کامپیترهای عمومی می‌گشود. کامپیوترهای عمومی از یک الگوریتم استفاده می‌کنند یعنی برای حل مسائل از یک سری دستورات از پیش تعیین شده پیروی می‌کنند مگر در مواقع ویژه‌ای که کامپیوتر نیاز به یک‌سری اطلاعات برای حل مسئله دارد. و همین مسئله توانایی پردازش را از کامپیوترهای عمومی به مسائلی که ما قبلا فهمیده‌ایم و روش حل آنها را شناخته‌ایم محدود می‌کند و تنها سرعت عمل و قدرت در حل نمونه‌های بزرگتر را به همراه دارند. اما کامپیوترها باید به قدری مفید باشند که بتوانند کارهایی را انجام دهند که واقعا ما نمی‌دانیم چگونه باید آنها را انجام دهیم. 1-2- بررسی سلولهای مغزی افراد تحقیق درباره سلولهای مغزی افراد و همچنین شناخت ‌‌Neuron ها یا رشته‌های مغزی وبیان یک راه نسبتا متفاوت که یک سیستم هوشمند را بنا می‌کند شروع شد. مغز بشر متشکل از میلیونها نرون عصبی منحصر بفرد است واین رشته‌های عصبی به اشکال و اندازه‌های مختلف تغییر می‌کنند.. هر نرون عموما یک هسته دارد و یک‌سری سلولهای عصبی Axon (آکسون)ـ که علائم خروجی را به سلولهای عصبی نرون دیگر حمل می‌کنندـ و Dendrite ها (شاخه‌های سلولهای عصبی). علائم در سلولهای عصبی میان شاخه‌های سلولهای عصبی ونواحی خروجی جریان دارند. در اینجا برای حالت برانگیزش باید آشفتگی از یک حدی تجاوز کند که آستانه یا سرحد نامیده می‌شود و پس از برانگیزش نرون‌ها پیامهایی برای نرون‌های دیگر می‌فرستند و خود را برای دریافت و پاسخ به اطلاعات عمومی آماده می‌کنند. 1-3- تاریخچه شبکه‌های عصبی دهها سال است که جلب توجه می‌کنند وتاکنون راه حلهایی برای استفاده از هوش بشری ارائه شده است. اولین نرون مصنوعی درسال 1943 توسط نروفیزیولوژیست وارن‌مک‌کالوک و منطق دان والتر‌پیتز تولید شد.در دهه 60 به دلایلی که خارج از بحث این مقاله است مردم به‌سوی شبکه‌های عصبی متمایل شدند و تنها در دهه 80 دانشمندان توانایی‌های واقعی شبکه‌های عصبی را دیدند. 2- شبکه‌های عصبی مصنوعی 2-1- شبکه‌های عصبی مصنوعی شبکه‌های عصبی شبیه به مغز انسان اطلاعاتی را پردازش می‌کنند. شبکه‌ از تعداد زیادی سلولهای عصبی(Neuron ها) تشکیل شده با پردازشی بسیار بزرگ و به‌هم پیوسته که در حل موازی مسائل ویژه مشغول به کارند. یادگیری شبکه‌های عصبی از طریق مثالهاست. آنها برای انجام یک کار خاص برنامه‌ریزی نشده‌اند. مثالها باید با دقت بسیار بالایی انتخاب شوند والا زمان مفید هدر خواهد رفت و یا حتی ممکن است شبکه به طور ناقص دایر شود و در اینجا راهی برای فهمیدن اینکه سیستم معیوب است یا خیر وجود ندارد مگر اینکه خطایی رخ دهد. شبکه‌های عصبی مصنوعی یک ترکیبی از مجموعه نرون‌هاست و البته نرونهای مصنوعی‌ای که بسیار شبیه به نرونهای زیستی کار می‌کنند. و بدین گونه است که ورودیهای زیادی با وزنهای مختلف می‌گیرد و یک خروجی که به ورودی وابسته است تولید می‌کند. نرونهای زیستی می‌توانند در حال برانگیزش باشند یا نباشند. ( وقتی یک نرون برانگیخته می‌شود ضربه علائم خروجی آن مقداری کمتر از 100 هرتز است) شبکه‌های عصبی استفاده وسیعی در شناسایی الگوها دارند زیرا از خودشان قابلیت آن را دارند که بطور عمومی به ورودی‌های غیر منتظره نیز پاسخ دهند. در طول ساخت نرونها می‌آموزند که چگونه الگوهای ویژه گوناگون را تشخیص دهند. اگر الگویی پذیرفته شود در حالی که در طول اجرا ورودی با خروجی مرتبط نباشد، نرون از مجموعه‌ای از الگوهایی که سابقا آموخته خروجیی را که شبیه به الگو می‌باشد وکمترین تفاوت را با ورودی دارد انتخاب می‌کند. این روال عموما فراخوانی می‌شود. مثال: وقتی که ورودی نرون 1111 باشد چهار ورودی بر حسب برانگیزش مرتب شده‌اند و وقتی ورودی‌های 0000 را داریم نرون برای برانگیزش مرتب نیست. قاعده عمومی این است که نرونها مایلند برانگیخته شوند وقتی که ورودی‌ها 0111 ، 1011 ، 1101 ، 1110 یا 1111 باشند و در صورتی که ورودی آنها 1000 ، 0001 ، 0010 ، 0100 یا 0000 باشند مایل به برانگیخته شدن نیستند. شناسایی الگوهای پیچیده سطح بالا می‌تواند به وسیله شبکه‌ای از نرونها انجام شود و بدین ترتیب نام آن را شبکه‌های عصبی مصنوعی گذاشتند. اکنون شبکه‌های عصبی کاربردهای زیادی دارند(درمنطق وکلام و شناسایی عکسها)البته شناسایی الگوهامی‌تواند به‌طور موفقیت آمیز بر روی کامپیوترهای عمومی انجام شود. این شبکه‌های عمومی که برای شناسایی الگوها استفاده می‌شوند Feed-Forward نامیده می‌شدند زیرا آنها یک بازخورد (Feed-Back) داشتند. آنها به‌طور ساده ورودی‌ها را با خروجی‌ها می‌آمیختند. اما شناسایی الگوها به تدریج کاملتر شد به‌طوریکه بر روی کامپیوترهای عمومی با سیستم خاص خودشان به‌سختی انجام می‌شد پس برای شناسایی الگوها شبکه‌های Feed-Forward کافی نبودند. در شبکه‌های عصبی خروجی هر نرون به ورودی نرونهای مجاورش متصل شده است. شبکه‌های عصبی نمی‌توانند معجزه کنند اما اگر به درستی استفاده شوند نتایج شگفت‌انگیزی خواهند داشت. 2-2- مشخصات مسائل در خور شبکه‌های عصبی مصنوعی Artificial Neural Network تقلید از ساختارهای محاسباتی سیستم زیستی ممکن است ایده اصلی نمونه‌های محاسباتی برای ساخت کلاسهایی از مسائل باشد. از جمله این مسائل می‌توان از مسائل مشکل NP که شامل مسائل طبقه‌بندی شده، زمانبندی‌شده، جستجو وغیره نام برد، کلاس مسائل شناسایی الگوها، افراد و موضوعات مشخص را در دیدار و تماس با آنها می‌شناسد و کلاس مربوط به داده‌های ناقص، اشتباه، متناقض، فازی و احتمالی. این مسائل توسط همه یا برخی از موارد زیر توصیف می‌شوند: یک فضای مسئله با بعد بزرگ، پیچیده، ناشناخته با اثرات متقابل پیچیده ریاضی‌وار بین متغییرها و یک فضای راه‌حل که ممکن است خالی باشد(شامل یک راه‌حل یکتا یا بیشتر ، شامل تعدادی از راه‌حلهای مفید)به نظر می‌رسد ANN ها راه‌حلهایی برای مسائلی که با ورودی‌های حسی بیشتر درگیرند ارائه می‌دهد(صحبت‌کردن، دیدن، شناسایی دستخط و…). 2-3- کاربردهای شبکه‌های عصبی مصنوعی ANN می‌توان موارد زیر را از کاربردهای شبکه‌های عصبی مصنوعی ذکر کرد: پردازش تصویر و دید( Image processing and computer vision ) پردازش علائم( Signal processing ): شامل ریخت‌شناسی و تجزیه و تحلیل علائم مربوط به زمین‌لرزه‌ها و… شناسایی الگوها( Pattern recognition ): شامل شناسایی چهره، اثر انگشت، تشخیص نوع صدا و نوع صحبت کردن، دستخط و … پزشکی( Medicine ): شامل تجزیه و تحلیل و تشخیص علائم دستگاه ضربان‌نگار قلب (الکتروکاردیوگرافیک)، تشخیص امراض گوناگون و … سیستم‌های نظامی( Military systems ): شامل ردیابی مین‌های زیردریایی، دسته‌بندی صداهای نابه‌هنجار و مخل در رادارها و شناسایی گوینده رزمی. سیستم‌های تجاری( Financial systems ): شامل تجزیه و تحلیل انبار مغازه‌ها، ارزیابی واقعی املاک و … برنامه‌ریزی، کنترل و جستجو( Planning, control, and search ): شامل اجرای موازی مسائل و کنترل رباتها. هوش مصنوعی( Artificial intelligence ): شامل برخی سیستم‌های طبی و اجرای سیستم‌های خبره. سیستم‌های قدرت( Power systems ): شامل برآورد وضعیت سیستم، ردیابی سریع و دسته‌بندی ردیابی، ردیابی خطا و ترمیم آن، پیش‌بینی و برآورد تخمین امنیت. --انواع یادگیری برای شبکه های عصبی: 1.یادگیری با ناظر در یادگیری با ناظر به قانون یاد گیری مجموعه ای از زوجهای داده ها به نام داده های یادگیری (Pi,Ti)i={1 … l } می دهند که در آن Pi ورودی به شبکه و Ti خروجی مطلوب شبکه برای ورودی Pi است. پس از اعمال ورودی Pi به شبکه عصبی در خروجی شبکه ai با Ti مقایسه شده و سپس خطای یادگیری محاسبه و از آن در جهت تنظیم پارامترهای شبکه استفاده می شود به گونه ای که اگر دفعه بعد به شبکه همان ورودی Pi اعمال شود خروجی شبکه به Ti نزدیکتر می گردد با توجه به این نکته که معلم سیستمی است که بر محیط وقوف دارد ( مثلا می داند که برای ورودی Pi خروجی مطلوب Ti است ).توجه داریم که محیط برای شبکه عصبی مجهول است . در لحظه k بردار ورودی Pi(k) با تابع توضیع احتمال معینی که برای شبکه عصبی نا معلوماست انتخاب و بطور همزمان به شبکه عصبی و معلم اعمال می شود . جواب مطلوب Ti(k) نیز توسط معلم به شبکه عصبی داده می شود . در حقیقت پاسخ مطلوب پاسخ بهینه ای است که شبکه عصبی برای ورودی مفروض باید به آن برسد . پارامترهای شبکه عصبی توسط دو سیگنال ورودی و خطا تنظیم می شود.به این صورت که پس از چند تکرار الگوریتم یادگیری که عموما توسط معادله تفاضلی بیان می شودبه پارامترهایی در فضای پارامترهای شبکه همگرا می شوند که برای آنها خطای یادگیری بسیار کوچک است و عملا شبکه عصبی شبکه عصبی معادل معلم می شود . یا به عبارتی دیگر اطلاعات مربوط به محیط (نگاشت بین TiوPi )که برای معلم روشن است به شبکه عصبی منتقل می شود و پس از این مرحله عملا می توان بجای معلم از شبکه عصبی استفاده کرد تا یادگیری تکمیل شود . --2.یادگیری تشدیدی: یک اشکال یادگیری با ناظر این است که شبکه عصبی ممکن است بدون معلم نتواند مواضع جدیدی را که توسط مجموعه داده های جدید تجربی پوشانده نشده است یاد بگیرد . یادگیری از نوع تشدیدی این محدودیت را برطرف می کند . این نوع یادگیری بطور on-line صورت می گیرد در حالی که یادگیری با ناظر را به دو صورت on-line & off-line می توان انجام داد. در حالت off-line می توان از یک سیستم محاسب با در اختیار داشتن داده های یادگیری استفاده کرد و طراحی شبکه عصبی را به پایان رساند . پس از مرحله طراحی و یادگیری شبکه عصبی به عنوان یک سیستم استاتیکی عمل می کند . اما در یادگیری on-line شبکه عصبی همراه با خود سیستم یادگیر در حال انجام کار است و از این رو مثل یک سیستم دینامیکی عمل می کند . یادگیری از نوع تشدیدی یک یادگیری on-line از یک نگاشت ورودی-خروجی است . این کار از طریق یک پروسه سعی و خطا به صورتی انجام می پذیرد که یک شاخص اجرایی موسوم به سیگنال تشدید ماکزیمم شود و بنابر این الگوریتم نوعی از یادگیری با ناظر است که در آن به جای فراهم نمودن جواب واقعی ، به شبکه عددی که نشانگر میزان عملکرد شبکه است ارایه می شود. این بدین معنی است که اگر شبکه عصبی پارامترهایش را به گونه ای تغییر داد که منجر به یک حالت مساعد شد آنگاه تمایل سیستم یادگیر جهت تولید آن عمل خاص تقویت یا تشدید می شود . در غیر این صورت تمایل شبکه عصبی جهت تولید آن عمل خاص تضعیف می شود . یادگیری تقویتی مثل یادگیری با ناظر نیست و این الگوریتم بیشتر برای سیستمهای کنترلی کاربرد دارد . --3. یادگیری بدون ناظر در یادگیری بدون ناظر یا یادگیری خود سامانده پارامترهای شبکه عصبی تنها توسط پاسخ سیستم اصلاح و تنظیم می شوند . به عبارتی تنها اطلاعات دریافتی از محیط به شبکه را برداغرهای ورودی تشکیل می دهند. و در مقایسه با مورد بالا (یادگیری با ناظر) بردار جواب مطلوب به شبکه اعمال نمی شود . به عبارتی به شبکه عصبی هیچ نمونه ای از تابعی که قرار است بیاموزد داده نمی شود . در عمل می بینیم که یادگیری با ناظر در مورد شبکه هایی که از تعداد زیادی لایه های نرونی تشکیل شده باشند بسیار کند عمل می کند و در این گونه موارد تلفیق یادگیری با ناظر و بدون ناظر پیشنهاد می گردد .

+ نوشته شده در  چهارشنبه نوزدهم فروردین ۱۳۹۴ساعت 16:49  توسط ادمین  | 

رزرو و خرید بلیط هواپیما با چند کلیک

ا به حال چند بار برای خرید بلیط هواپیما به صورت آنلاین تلاش کرده اید اما نتیجه نگرفته اید؟ یا بعدا متوجه شده اید که می توانستید انتخاب های بهتری داشته باشید؟ پیش از این وب سایت شرکت های هواپیمایی و آژانس های چارترکننده برای رزرو بلیط هواپیما فعال بودند که هر کدام سهمیه بلیط خود را آنلاین می فروختند. اما منبعی که بتوان همزمان همه پروازهای سیستمی و چارتری را جستجو و رزرو بلیط را آنلاین انجام داد وجود نداشت. وب سایت AirplaneTicket.ir یک مرجع خدمات گردشگری آنلاین در کشور است که با جستجوی همه پروازهای سیستمی و چارتری به شما کمک می کند انتخاب راحت تری داشته و رزرو بلیط هواپیما را خودتان تنها با چند کلیک انجام دهید. از طریق این وب سایت که دارای مجوز رسمی از سازمان هواپیمایی کشوری است فروش بلیط هواپیما شرکت های هواپیمایی ایران ایر، آسمان، ایران ایر تور، آتا، قشم ایر، تابان، ماهان، کیش ایر، کاسپین، زاگرس، اترک و معراج، همگی یکجا انجام می شود. خرید آنلاین بلیط هواپیما بسیار آسان است! ابتدا پرواز را جستجو کنید، از میان پروازها با قیمت های مختلف مناسبترین را انتخاب کنید، اطلاعات مسافرین را ثبت کنید، پرداخت را آنلاین از طریق کارت های بانکی عضو شبکه شتاب انجام دهید و بلیت خود را بر روی ایمیل و پیامک دریافت نمایید. ************************************* از طریق این صفحه همین حالا یک پرواز را جستجو کنید: -------------------------------------------------------- http://airplaneticket.ir/booking-airline-tickets.html ************************************* همچنین قیمت بلیط هواپیما در مسیرهای مختلف از طریق صفحه زیر قابل مشاهده است: http://airplaneticket.ir/ticket-prices.html پروازهای سیستمی چه پروازهایی است؟ به پروازهای متداولی گفته می شود که بلیتشان از طریق دفاتر مسافرتی کل کشور با قیمت یکسان قابل خرید است. برای ابطال اینگونه بلیت ها می توانید از طریق آژانس مسافرتی صادر کننده، دفاتر مرکزی فروش و ایستگاه های فرودگاهی شرکت هواپیمایی (Airline) اقدام کنید. همچنین قیمت بلیت این پروازها برای بزرگسال، کودک و نوزاد متفاوت بوده و مقادیر مشخصی دارد. پروازهای چارتری چه پروازهایی است؟ بلیت های چارتری مربوط به پروازهایی است که آژانس های چارترکننده تعداد صندلی درخواستیشان را از شرکت های هواپیمایی پیش خرید کرده اند و مسئول قیمت گذاری و فروش این بلیت ها شده اند. نرخ پروازهای چارتری به شدت متغیر بوده و متناسب با تقاضای مسافرین افزایش یا کاهش می یابد. در پروازهای چارتری هزینه مسافرین بالای دو سال به طور کامل محاسبه می شود. لازم به ذکر است پروازهای چارتری صرفا از طریق آژانس صادر کننده قابل ابطال می باشد! |||||||||||||||||||||AirplaneTicket.ir||||||||||||||||||||| شرکت خدمات مسافرتی عتیق گشت اصفهان آدرس: اصفهان، خیابان کمال، روبروی شهرداری منطقه سه تلفن: (خط ویژه) 32287560-031 فکس: داخلی 110 وب سایت: http://airplaneticket.ir/ ایمیل: info@airplaneticket.ir |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| http://www.airplaneticket.ir/

+ نوشته شده در  چهارشنبه نوزدهم فروردین ۱۳۹۴ساعت 16:49  توسط ادمین  | 

مطالب قدیمی‌تر