لینک دانلود و خرید پایین توضیحات
فرمت فایل word و قابل ویرایش و پرینت
تعداد صفحات: 20
الگوریتم
هر برنامه، می بایست دارای یک طرح و یا الگو بوده تا برنامه نویس بر اساس آن عملیات خود را دنبال نماید.از دیدگاه برنامه نویسان ، هر برنامه نیازمند یک الگوریتم است . بعبارت ساده ، الگوریتم ، بیانه ای روشمند بمنظور حل یک مسئله بخصوص است . از منظر برنامه نویسان ،الگوریتم بمنزله یک طرح کلی و یا مجموعه دستورالعمل هائی است که با دنبال نمودن آنان ، برنامه ای تولید می گردد.
الگوریتم های میکرو در مقابل ماکرو
الگوریتم ها دارای ویژگی های متفاوتی می باشند . ما می توانیم در رابطه با الگوریتم استفاده شده به منظور نوشتن یک برنامه مشخص صحبت نمائیم . از این زاویه ، ما صرفا" در رابطه با الگوریتم در سطح ماکرو(macro level) ، صحبت نموده ایم . در چنین مواردی ، الگوریتم ارائه شده ، سعی در بدست آوردن جنبه های عمومی برنامه از طریق یک مرور کلی به برنامه در مقابل درگیر شدن در جزئیات را دارد.ما می توانیم در رابطه با الگوریتم ها ، از سطح "میکرو" صحبت نمائیم . از این زاویه ، به سطوح پایین تر رفته و به عوامل اساسی ونگهدارنده ای که یک جنبه خاص از برنامه را با یکدیگر مرتبط می نماید، صحبت کرد. مثلا" در صورتیکه شما دارای داده هائی هستید که می بایست قبل از استفاده مرتب گردند ،الگوریتم های مرتب سازی متعددی در این زمینه وجود داشته و می توان یکی از آنها را بمنظور تامین اهداف مورد نظر خود انتخاب نمود. انتخاب یک الگوریتم مرتب سازی ، صرفا" باعث حل شدن یکی از جنبه های متفاوت برنامه می گردد . پس از مرتب سازی داده ها ،می بایست از یک الگوریتم میکرو دیگر بمنظور نمایش داده ها ی مرتب شده استفاده گردد .
همانگونه که احتمالا" حدس زده اید ، ما می توانیم تمام الگوریتم های میکرو را بمنظور ایجاد یک الگوریتم ماکرو ، جمع آوری نمائیم . اگر ما با الگوریتم های میکرو ، آغاز نمائیم ، و حرکت خود را بسمت نمایش ماکروی یک برنامه ، پیش ببریم ، کاری را انجام داده ایم که موسوم به طراحی " پایین به بالا" (buttom-up) ، است . اگر ما فعالیت خود را با یک الگوریتم ماکرو آعاز و حرکت خود را بسمت پائین و الگوریتم های میکرو ، ادامه دهیم ، طراحی از نوع " بالا به پایین " (top-down) را انجام داده ایم .
شاید این سوال مطرح گردد که کدام روش بهتر است ؟ اگر شما تمام مقالاتی را که تاکنون در این زمینه نوشته شده اند را دنبال نمائید ، هرگز به یک نتیجه قابل قبول دست نخواهید یافت . هر رویکرد، دارای نکات مثبت و منفی مربوط به خود است . صرفنظر از رویکرد طراحی استفاده شده ، می بایست دارای الگوئی (طرحی) مناسب برای برنامه باشیم .حداقل، نیازمند یک اعلامیه از مسئله برنامه نویسی و یک طرح ( الگو) برای برخورد با مسئله ، خواهیم بود . پس از شناخت مسئله ، می توان نحوه حل مسئله را ترسیم کرد. شناخت عمیق و مناسب نسبت به مسئله ای که قصد حل آن را داریم ، شرط اساسی و ضروری برای طراحی یک برنامه است .با توجه به اینکه این اعتقاد وجود دارد که شناخت جامع و کلی از مسئله ای که حل آن را داریم ، بخشی ضروری در اولین مرحله برنامه نویسی است ، ما در ادامه از رویکرد "بالا - پایین "، تبعیـت می نمائیم . فراموش نکنیم که رویکرد فوق ، امکان مشاهده مجازی از هر مسئله برنامه نویسی را فراهم خواهد نمود.
مراحل پنج گانه
هر برنامه را صرفنظر از میزان پیچیدگی آن ، می توان به پنج مرحله اساسی تجزیه کرد :
مقدار دهی اولیه
ورودی
پردازش
خروجی
پاکسازی
در ادامه به بررسی هریک از مراحل فوق ، خواهیم پرداخت .
مرحله مقداردهی اولیه
مرحله مقداردهی اولیه ، اولین مرحله ای است که می بایست در زمان طراحی یک برنامه در رابطه با آن فکر کرد . مرحله فوق ، شامل تمامی عملیات مورد نیازی است که برنامه می بایست قبل ازبرقراری ارتباط با کاربر ، انجام دهد . در ابتدا ممکن است این موضوع که عملیاتی را قبل از برقراری ارتباط با کاربر می بایست انجام داد ، تا اندازه ای عجیب بنظر رسد ولی احتمالا" برنامه های زیادی را مشاهده نموده اید که در این راستا عملیات مشابهی را انجام می دهند. مثلا" ، در زمان استفاده از برنامه هائی نظیر Word ، Excel و یا برنامه های مشابه دیگر ، با چنین مواردی برخورد نموده ایم . مثلا" با انتخاب گزینه منو File ، می توان لیستی از فایل هائی را که با آنها کار کرده ایم در بخش انتهائی منوفوق ، مشاهده کرد. ( مشاهده آخرین فایل های استفاده شده در یک برنامه خاص ، با استفاده از جادو! میسر نشده است ) . برنامه مورد نظر شاید ، لیست فایل های اخیر را از دیسک خوانده و آنها را به لیست مربوطه در منوی File ، اضافه کرده باشد . با توجه به اینکه لیست فایل های فوق ، می بایست قبل از اینکه برنامه هر چیز دیگر را برای کاربر نمایش دهد ، خوانده و نمایش داده شوند ، می توان انجام عملیات فوق را نمونه ای از مرحله مقداردهی اولیه، در نظر گرفت.یکی دیگر از عملیات متداول که به این مرحله مرتبط می باشد ، خواندن فایل های Setup است . چنین فایل هائی ممکن است حاوی اطلاعاتی در رابطه با نام مسیرهائی باشند که بانک ها ی اطلاعاتی خاصی و یا فایل های ذخیره شده دیگری را بر روی دیسک را مشخص می نمایند . با توجه به نوع برنامه ای که اجراء می گردد ، فایل های Setup می توانند شامل اطلاعاتی در رابطه با فونت های نمایش ، نام و محل چاپگر ، رنگ های زمینه و رویه ، وضوح تصویر صفحه نمایشگر و اطلاعات مشابهی دیگر باشند . سایر برنامه ها ممکن است مستلزم خواندن اطلاعاتی در رابطه با اتصالات شبکه ، مجوزهای امنیتی و دستیابی به اینترنت ، رمزهای عبور و سایر اطلاعات حساس دیگر باشند . در چنین مواردی فایل های Setup دارای نقشی مهم خواهند بود.
لینک دانلود و خرید پایین توضیحات
فرمت فایل word و قابل ویرایش و پرینت
تعداد صفحات: 19
چکیده : در این گزارش ما به بررسی ویژگی های الگوریتمهای کنترل همروندی توزیعی که بر پایه مکانیزم قفل دو مرحله ای(2 Phase Locking) ایجاد شده اند خواهیم پرداخت. محور اصلی این بررسی بر مبنای تجزیه مساله کنترل همروندی به دو حالت read-wirte و write-write میباشد. در این مقال، تعدادی از تکنیکهای همزمان سازی برای حل هر یک از قسمتهای مساله بیان شده و سپس این تکنیکها برای حل کلی مساله با یکدیگر ترکیب میشوند.
در این گزارش بر روی درستی و ساختار الگوریتمها متمرکز خواهیم شد. در این راستا برای ساختار پایگاه داده توزیعی یک سطحی از انتزاع را در نظر میگیریم تا مساله تا حد ممکن ساده سازی شود.
1. مقدمه : کنترل همروندی فرآیندی است که طی آن بین دسترسی های همزمان به یک پایگاه داده در یک سیستم مدیریت پایگاه داده چند کاربره هماهنگی بوجود میآید. کنترل همروندی به کاربران اجازه میدهد تا در یک حالت چند برنامگی با سیستم تعامل داشته باشند در حالیکه رفتار سیستم از دیدگاه کاربر به نحو خواهد بود که کاربر تصور میکند در یک محیط تک برنامه در حال فعالیت است. سخت ترین حالت در این سیستم مقابله با بروز آوری های آزار دهنده ای است که یک کاربر هنگام استخراج داده توسط کاربر دیگر انجام میدهد. به دو دلیل ذیل کنترل همروندی در پایگاه داده های توزیعی از اهمیت بالایی برخوردار است:
کاربراان ممکن است به داده هایی که در کامپیوترهای مختلف در سیستم قرار دارند دسترسی پیدا کنند.
یک مکانیزم کنترل همروندی در یک کامپیوتر از وضعیت دسترسی در سایر کامپیوترها اطلاعی ندارد.
مساله کنترل همروندی در چندین سال قبل کاملا مورد بررسی قرار گفته است و در خصوص پایگاهدادههای متمرکز کاملا شناخته شده است. در خصوص این مسال در پایگاه داده توزیعی با توجه به اینکه مساله در حوزه مساله توزیعی قرار میگیرد بصورت مداوم راهکارهای بهبود مختلف عرضه میشود. یک تئوری ریاضی وسیع برای تحلیل این مساله ارائه شده و یک راهکار قفل دو مرحله ای به عنوان راه حل استاندارد در این خصوص ارائه شده است. بیش از 20 الگوریتم کنترل همروندی توزیعی ارائه شده است که بسیاری از آنها پیاده سازی شده و در حال استفاده میباشند.این الگوریتمها معمولا پیچیده هستند و اثبات درستی آنها بسیار سخت میباشد. یکی از دلایل اینکه این پیچیدگی وجود دارد این است که آنها در اصطلاحات مختلف بیان میشوند و بیان های مختلفی برای آنها وجود دارد. یکی از دلایل اینکه این پیچدگی وجود دارد این است که مساله از زیر قسمتهای مختلف تشکیل شده است و برای هر یک از این زیر قسمتها یک زیر الگوریتم ارائه میشود. بهترین راه برای فائق آمدن بر این پیچدگی این است که زیر مساله ها و الگوریتمهای ارائه شده برای هر یک را در ی.ک سطح از انتزاع نگاه داریم.
با بررسی الگوریتمهای مختلف میتوان به این حقیقت رسید که این الگوریتمها همگی ترکیبی از زیر الگوریتمهای محدودی هستند. در حقیقت این زیر الگوریتمها نسخههای متفاوتی از دو تکنیک اصلی در کنترل همروندی توزیعی به نامهای قفل دو مرحله ای و ترتیب برچسب زمانی میباشند.
همانطور که گفته شد، هدف کنترل همروندی مقابله با تزاحمهایی است که در اثر استفاده چند کاربر از یک سری داده واحد برای کاربران بوجود میآید است. حال ما با ارائه دو مثال در خصوص این مسائل بحث خواهیم نمود. این دو مثال از محک معروف TPC_A مقتبس شده اند. در این مثالها، یک سیستم اطلاعات را از پایگاه داده ها استخراج کرده و محاسبات لازم را انجام داده و در نهایت اطلاعات را در پایگاه داده ذخیره مینماید.
حالت اول را میتوان بروزآوری از دست رفته نامید. حالتی را تصور کنید که دو مشتری از دو سیستم مجزا بخواهند از یک حساب مالی برداشت نمایند. در این حالت فرض کنید در غیاب سیستم کنترل همروندی، هر دو با هم اقدام به خواندن اطلاعات و درج اطلاعات جدید در سیستم میکنند. در این حالت در غیاب سیستم کنترل همروندی تنها آخرین درج در سیستم ثبت میشود. این حالت در شکل 1 نشان داده شده است.
شکل 1 نمایش حالت بروز آوری از دست رفته
حالت دوم حالتی است که در آن اطلاعات صحیح از پایگاه داده استخراج نمیشود. در این حالت فرض کنید دو مشتری بخواهند کارهای ذیل را انجام دهند.
مشتری 1: بخواهد یک چک 1 میلیونی را به حساب X واریز و از حساب Y برداشت نماید.
مشتری 2: بخواهد بیلان حساب مالی X و Y شامل کل موجودی را نمایش دهد.
در غیاب کنترل همروندی همانطور که در شکل 2 نشان داده شدهاست، تزاحم بین پروسس ها بوجود خواهد آمد. فرض کنید در زمانی که مشتری 1 اطلاعات را از حساب Y خوانده و اطلاعات حساب X را دریافت نموده و 1 میلیون از حساب Y برداشت نموده ولی هنوز 1
لینک دانلود و خرید پایین توضیحات
دسته بندی : وورد
نوع فایل : .doc ( قابل ویرایش و آماده پرینت )
تعداد صفحه : 5 صفحه
قسمتی از متن .doc :
الگوریتم ژنتیک چیست؟ الگوریتم های ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیش بینی یا تطبیق الگو استفاده می کنند.الگوریتم های ژنتیک اغلب گزینه خوبی برای تکنیک های پیش بینی بر مبنای رگرسیون هستند.همان طور ساده،خطی وپارامتریک گفته می شود،به الگوریتم های ژنتیک می توان غیر پارامتریک گفت. برای مثال اگر بخواهیم نوسانات قیمت نفت را با استفاده از عوامل خارجی وارزش رگرسیون خطی ساده مدل کنیم،این فرمول را تولید خواهیم کرد:قیمت نفت در زمان t=ضریب 1 نرخ بهره در زمان t+ضریب 2 نرخ بیکاری در زمان t+ثابت 1 . سپس از یک معیار برای پیدا کردن بهترین مجموعه ضرایب و ثابت ها جهت مدل کردن قیمت نفت استفاده خواهیم کرد.در این روش 2 نکته اساسی وجود دارد.اول این روش خطی است و مسئله دوم این است که ما به جای اینکه در میان "فضای پارامترها"جستجو کنیم ،پارامترهای مورد استفاده را مشخص کرده ایم. با استفاده از الگوریتم های ژنتیک ما یک ابر فرمول یا طرح تنظیم می کنیم که چیزی شبیه"قیمت نفت در زمان t تابعی از حداکثر 4 متغیر است"را بیان می کند. سپس داده هایی برای گروهی از متغیرهای مختلف،شاید در حدود 20 متغیر فراهم خواهیم کرد.سپس الگوریتم ژنتیک اجرا خواهد شد که بهترین تابع و متغیرها را مورد جستجو قرار می دهد.روش کار الگوریتم ژنتیک به طور فریبنده ای ساده،خیلی قابل درک وبه طور قابل ملاحظه ای روشی است که ما معتقدیم حیوانات آنگونه تکامل یافته اند.هر فرمولی که از طرح داده شده بالا تبعیت کند فردی از جمعیت فرمول های ممکن تلقی می شود خیلی شبیه به این که بگوییم جرج بوش فردی از جمعیت انسان های ممکن است. متغیر هایی که هر فرمول داده شده را مشخص می کنند به عنوان یکسری از اعداد نشان داده شده اند که معادل دی ان ای آن فرد را تشکیل می دهند. موتور الگوریتم ژنتیک یک جمعیت آغاز از فرمول ایجاد می کند.هر فرد در برابر مجموعه ای از داده ها ی مورد آزمایش قرار می گیرند و مناسبترین آنها شاید 10 درصد از مناسبترین ها باقی می مانند.بقیه کنار گذاشته می شوند. مناسبترین افراد با هم جفتگیری (جابجایی عناصر دی ان ای)وتغییر(تغییر تصادفی عناصر دی ان ای) کرده اند.مشاهده می شود که با گذشت از میان تعدد ریادی از نسلها،الگوریتم ژنتیک به سمت ایجاد فرمول هایی که بیشتر دقیق هستند،میل می کنند.در حالی که شبکه های عصبی هم غیر خطی و غیر پارامتریک هستند،جذابیت زیاد الگوریتم های ژنتیک این است نتایج نهایی قابل ملاحظه ترند.فرمول نهایی برای کاربر انسانی قابل مشاهده خواهد بود،و برای ارائه سطح اطمینان نتایج می توان تکنیک های آماری متعارف رابر روی این فرمول ها اعمال کرد.فناوری الگوریتم های ژنتیک همواره در حال بهبود استفبرای مثال با مطرح کردن معادله ویروس ها که در کنار فرمول ها وبرای نقض کردن فرمول ها ی ضعیف تولید می شوندودر نتیجه جمعیت را کلاً قویتر می سازند. مختصراً گفته می شود که الگوریتم ژنتیک (یا GA) یک تکنیک برنامه نویسی است که از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده می کند.مسئله ای که باید حل شود ورودی است و راه حلها طبق یک الگو کد گذاری می شودومتریک که تابع fitness هم نام دارد هر راه حل کاندید را ارزیابی می کندکه اکثر آنها به صورت تصادفی انتخاب می شوند..........
پاسخ : الگریتم های ژنتیک
« پاسخ #2 : جولای 03, 2007, 11:59:03 pm »
الگوریتم ژنتیک GA یک تکنیک جستجو در علم کامپیوتربرای یافتن راه حل بهینه ومسائل جستجو است.الگوریتم های ژنتیک یکی از انواع الگوریتم های تکاملی اند که از علم زیست شناسی مثل وراثت، جهش،انتخاب ناگهانی ، انتخاب طبیعی و ترکیب الهام گرفته شده . عموماً راه حلها به صورت 2 تایی 0و1 نشان داده می شوند ولی روشهای نمایش دیگری هم وجود دارد.تکامل از یک مجموعه کاملاً تصادفی از موجودیت ها شروع می شود و در نسلهای بعدی تکرار می شود.در هر نسل،مناسبترین ها انتخاب می شوند نه بهترین ها. یک راه حل برای مسئله مورد نظر،با یک لیست از پارامترها نشان داده می شود که به آنها کروموزوم یا ژنوم می گویند.کروموزوم ها عموماً به صورت یک رشته ساده از داده ها نمایش داده می شوند،البته انواع ساختمان داده های دیگر هم می توانند مورد استفاده قرار گیرند.در ابتدا چندین مشخصه به صورت تصادفی برای ایجاد نسل اول تولید می شوند. در طول هر نسل ،هر مشخصه ارزیابی می شود وارزش تناسب(fitness) توسط تابع تناسب اندازه گیری می شود گام بعدی ایجاد دومین نسل از جامعه است که بر پایه فرآیندهای انتخاب ،تولید از روی مشخصه های انتخاب شده با عملگرهای ژنتیکی است:اتصال کروموزوم ها به سر یکدیگر و تغییر.برای هر فرد ،یک جفت والد انتخاب می شود.انتخابها به گونه ای اند که مناسبترین عناصر انتخاب شوند تا حتی ضعیفترین عناصر هم شانس انتخاب داشته باشند تا از نزدیک شدن به جواب محلی جلوگیری شود.چندین الگوی انتخاب وجود دارد: چرخ منگنه دار(رولت)،انتخاب مسابقه ای (Tournament) ،... . معمولاً الگوریتم های ژنتیک یک عدد احتمال اتصال دارد که بین 0.6و1 است که احتمال به وجود آمدن فرزند را نشان می دهد.ارگانیسم ها با این احتمال با هم دوباره با هم ترکیب می شوند.اتصال 2 کروموزوم فرزند ایجاد می کند،که به نسل بعدی اضافه می شوند.این کارها انجام می شوند تا این که کاندیدهای مناسبی برای جواب،در نسل بعدی پیدا شوند. مرحله بعدی تغییر دادن فرزندان جدید است.الگوریتم های ژنتیک یک احتمال تغییر کوچک وثابت دارند که معمولاً درجه ای در حدود 0.01 یا کمتر دارد. بر اساس این احتمال ،کروموزوم های فرزند به طور تصادفی تغییر می کنند یا جهش می یابند.مخصوصاً با جهش بیتها در کروموزوم ساختمان داده مان. این فرآیند باعث به وجود آمدن نسل جدیدی از کروموزوم ها یی می شود، که با نسل قبلی متفاوت است.کل فرآیند برای نسل بعدی هم تکرار می شود،جفتها برای ترکیب انتخاب می شوند،جمعیت نسل سوم به وجود می آیندو... .این فرآیند تکرار می شود تا این که به آخرین مرحله برسیم.شرایط خاتمه الگوریتم های ژنتیک عبارتند از:• به تعداد ثابتی از نسل ها برسیم .• بودجه اختصاص داده شده تمام شود(زمان محاسبه/پول).• یک فرد(فرزند تولید شده) پیدا شود که مینیمم (کمترین)ملاک را برآورده کند.• بیشترین درجه برازش فرزندان حاصل شود یا دیگر نتایج بهتری حاصل نشود.• بازرسی دستی.• ترکیبهای بالا.توضیحی دیگر :الگوریتم های ژنتیک قابلیت تبدیل فضای پیوسته به فضای گسسته را دارند. یکی از تفاوت های اصلی روش GA با روش های قدیمی بهینه سازی در این است که در GA با جمعیت یا مجموعه ای از نقاط در یک لحظه خاص کار میکنیم. در حالی که در روش های قدیمی بهینه سازی تنها برای یک نقطه خاص عمل میکردیم. این به این معنی است که GA تعداد زیادی از طرح ها را در یک زمان مورد پردازش قرار میدهد. نکته جالب دیگر این است که اصول GA بر پردازش تصادفی یا به تعبیر صحیحتر پردازش تصادفی هدایت شده (Guided Random) استوار است. بنابر این عملگرهای تصادفی فضای جستجو را را به صورت تطبیقی مورد بررسی قرار میدهند.اصولا برای استفاده از GA باید سه مفهوم مهم زیر مشخص شوند : * تعریف تابع هدف (Objective Function) یا تابع هزینه (Cost Function) . * تعریف و پیاده سازی فضای ژنتیک (Genetic Representation) . * تعریف و پیاده سازی عملگرهای GA .
تاریخچه الگوریتم های ژنتیکایده اصلی الگوریتم های تکاملی در سال 1960 توسط Rechenberg مطرح گردید. الگوریتم های ژنتیک که منشعب از این نوع الگوریتم ها است، در حقیقت روش جستجوی کامپیوتری بر پایه الگوریتم های بهینه سازی و بر اساس ساختار ژن ها و کروموزوم ها است که توسط پروفسور Holland در دانشگاه میشیگان مطرح شد و پس از وی توسط جمعی از دانشجویانش توسعه یافت.همنطور که گفته شد ایده اساسی این الگوریتم انتقال خصوصیات موروثی توسط ژنهاست. فرض کنید مجموعه خصوصیات انسان توسط کروموزومهای او به نسل بعدی منتقل میشوند. هر ژن در این کروموزومها نماینده یک خصوصیت است. بعنوان مثال ژن 1 میتواند رنگ چشم باشد ، ژن 2 طول قد، ژن 3 رنگ مو و الی آخر. حال اگر این کروموزوم به تمامی، به نسل بعد انتقال یابد، تمامی خصوصیات نسل بعدی شبیه به خصوصیات نسل قبل خواهد بود. بدیهیست که در عمل چنین اتفاقی رخ نمیدهد. در واقع بصورت همزمان دو اتفاق برای کروموزومها میافتد. اتفاق اول موتاسیون (Mutation) است. موتاسیون به این صورت است که بعضی ژنها بصورت کاملا تصادفی تغییر میکنند. البته تعداد این گونه ژنها بسیار کم میباشد اما در هر حال این تغییر تصادفی همانگونه که پیشتر دیدیم بسیار مهم است. مثلا ژن رنگ چشم میتواند بصورت تصادفی باعث شود تا در نسل بعدی یک نفر دارای چشمان سبز باشد. در حالی که تمامی نسل قبل دارای چشم قهوهای بودهاند. علاوه بر موتاسیون اتفاق دیگری که میافتد و البته این اتفاق به تعداد بسیار بیشتری نسبت به موتاسیون رخ میدهد چسبیدن ابتدای یک کروموزوم به انتهای یک کروموزوم دیگر است. این مساله با نام Crossover شناخته میشود. این همان چیزیست که مثلا باعث میشود تا فرزند تعدادی از خصوصیات پدر و تعدادی از خصوصیات مادر را با هم به ارث ببرد و از شبیه شدن تام فرزند به تنها یکی از والدین جلوگیری میکند. در ابتدا تعداد مشخصی از ورودی ها،X1,X2,…,Xn که متعلق به فضای نمونه X هستند را انتخاب می کنیم و آنها را در یک عدد بردای X=(x1,x2,…xn) نمایش می دهیم..در مهندسی نرم افزار اصطلاحاً به آنها ارگانیسم یا کروموزوم گفته می شود.به گروه کروموزوم ها Colony یا جمعیت می گوییم.در هر دوره Colony رشد می کند و بر اساس قوانین مشخصی که حاکی از تکامل زیستی است تکامل می یابند. برای هر کروموزوم Xi ،ما یک ارزش تناسب(Fitness) داریم که آن را f(Xi) هم می نامیم.عناصر قویتر یا کروموزوم هایی که ارزش تناسب آنها به بهینه Colony نزدیکتر است شانس بیشتری برای زنده ماندن در طول دوره های دیگر و دوباره تولید شدن را دارند و ضعیفترها محکوم به نابودی اند. به عبارت دیگر الگوریتم ورودی هایی که به جواب بهینه نزدیکترندرانگه داشته واز بقیه صرف نظر می کند. یک گام مهم دیگر درالگوریتم،تولد است که در هر دوره یکبار اتفاق می افتد. محتویات دو کروموزومی که در فرآیند تولید شرکت می کنند با هم ترکیب میشوند تا 2 کروموزوم جدید که ما انها را فرزند می نامیم ایجاد کنند.این هیوریستیک به ما اجازه می دهد تا 2 تا از بهترین ها را برای ایجاد یکی بهتر از آنها با هم ترکیب کنیم.(evolution) به علاوه در طول هر دوره،یک سری از کروموزوم ها ممکن است جهش یابند(Mutation) .
الگوریتم هر ورودی x در یک عدد برداری X=(x1,x2,..,xn) قرار دارد .برای اجرای الگوریتم ژنتیک مان باید هر ورودی را به یک کروموزوم تبدیل کنیم.می توانیم این را با داشتن log(n) بیت برای هر عنصرو تبدیل ارزش Xi انجام دهیم مثل شکل زیر .(X1, X2,…,Xn)= (123, 87,…, 63) می توانیم از هر روش کد کردن برای اعداد استفاده کنیم.در دوره 0، یک دسته از ورودی های X را به صورت تصادفی انتخالب می کنیم.بعد برای هر دوره iام ما ارزش مقدار Fitness را تولید،تغییر وانتخاب را اعمال می کنیم.الگوریتم وقتی پایان می یابد که به معیارمان برسیم.
کد کردن مقادیر
بر اساس تعریف Holland روش های متعددی برای نمایش ژن های منفرد وجود دارد. مثلا میتوان آنها را به صورت رشته (String) ، آرایه ، درخت یا لیست نشان داد که قصد داریم آنهارا به صورت رشته های بیتی مورد بررسی قرار دهیم.1- کد مبنای دو (Binary)مثال : کوله پشتیدر این مثاله فرض میکنیم که اشیایی با مقدار و اندازه مشخص وجود دارد و بخواهیم آنها را در یک کوله پشتی با ظرفیت مشخص قرار دهیم. نحوه انتخاب اشیا با توجه به حداقل فضایی که اشغال می کنند و استفاده بهینه از فضای کوله پشتی صورت میگیرد.برای حل مساله فرض میکنیم هر بیت بیانگر حضور یا عدم حضور اشیا در کوله پشتی باشد. روش کد مبنای دو از روش های متداول در حل مسائل GA به شمار می آیند.Chromosome A 101101100011Choromosome B 010011001100اصولا روش کد مبنای دو امکان تولید کروموزوم های بسیاری را با حداقل بیت ها فراهم میکند. لذا این روش کدگذاری در مسائل واقعی باید همراه با اصلاحاتی بعد از اعمال عملگرهای ژنتیکی صورت گیرد.
روش کدگذاری جایگشتی (Permutation Encoding)این روش در حل مسائلی چون فروشنده دوره گرد (tsp) و یا مسائلی که به صورت ترتیبی هستند کاربرد دارد. همان طور که در جدول زیر مشاهده می کنید، در این روش کروموزوم ها به صورت رشته ای از اعداد نمایش داده میشوند که هریک از این اعداد بر اساس یک ترتیبی قرار گرفته اند.Chromosome A 1 5 3 2 4 7 9 8 6Choromosome B 8 5 6 7 2 3 1 4 9روش کد گذاری مقدار (Value Encoding)در این روش هر کروموزوم به صورت رشته ای از مقادیر است که این مقادیر می توانن هرچیز مرتبط با مساله باشند . مثلا اعداد اعشاری و یا اشیا کد شده که در جدول زیر مثالی از این روش نشان داده شده است Chromosome A 1.254 2.364 9.245 3.0058Choromosome B dfgtrgfdbynynh jChoromosome C right left back
روش کدگذاری درختی (Tree Encoding) یک روش دیگر که توسط John Koza توسعه یافت،برنامه نویسی ژنتیک (Genetic programming)است.که برنامه ها را به عنوان شاخه های داده در ساختار درخت نشان می دهد.در این روش تغییرات تصادفی می توانند با عوض کردن عملگرها یا تغییر دادن ارزش یک گره داده شده در درخت،یا عوض کردن یک زیر درخت با دیگری به وجود آیند.
روش های انتخاب روش های مختلفی برای الگوریتم های ژنتیک وجود دارند که می توان برای انتخاب ژنوم ها از آنها استفاده کرد.اما روش های لیست شده در پایین از معمولترین روش ها هستند.انتخاب Elitist :مناسبترین عضو هر اجتماع انتخاب می شود. انتخاب Roulette : یک روش انتخاب است که در آن عنصری که عدد برازش(تناسب)بیشتری داشته باشد،انتخاب می شود. انتخاب Scaling :به موازات افزایش متوسط عدد برازش جامعه،سنگینی انتخاب هم بیشتر می شودوجزئی تر.این روش وقتی کاربرد دارد که مجموعه دارای عناصری باشد که عدد برازش بزرگی دارند وفقط تفاوت های کوچکی آنها را از هم تفکیک می کند. انتخاب Tournament : یک زیر مجموعه از صفات یک جامعه انتخاب می شوندواعضای آن مجموعه با هم رقابت می کنندو سرانجام فقط یک صفت از هر زیر گروه برای تولید انتخاب می شوند.
لینک دانلود و خرید پایین توضیحات
فرمت فایل word و قابل ویرایش و پرینت
تعداد صفحات: 18
کاربرد مقایسهای الگوریتم در بهینهسازی بهرهبرداری از سیستم چندمخزنی
چکیده
در این مقاله، کاربرد الگوریتم ژنتیک در بهینهسازی بهرهبرداری از سیستمهای چندمخزنی بررسی شده است. بهینهسازی پارامترهای سیاست بهرهبرداری در این روش، صرفاً با استفاده از نتایج شبیهسازی سیستم انجام میشود. بنابراین میتوان انواع مختلفی از مسائل بهرهبرداری را مستقل از نوع تابع هدف و قیدهای آن و نیز ساختار سیاست بهرهبرداری، بهینهسازی نمود. در این مقاله پس از بررسی اجمالی روش الگوریتم ژنتیک پیشنهادی، عملکرد آن در بهینهسازی یک سیستم پویای استوکستیک و برنامهریزی پویا با رگرسیون مقایسه شده است. نتایج حاصل، نشانگر برتری الگوریتم ژنتیک هم به لحاظ سرعت و محاسیبات و هم مقدار تابع هدف در مقایسه با دو روش دیگر بوده است. با این حال به منظور افزایش کارایی این روش، اصلاحاتی در آن صورت گرفته است. بهبود کارایی عملگرهای الگوریتم ژنتیک به ویژه استفاده از قانون به هنگامسازی قدرت جهش و محاسبه برازندگی کروموزومها بوسیله شبیهسازی سیستم با دورههای متغیر، دو نمونه از این اصلاحات را تشکیل دادهاند.
در بررسیهای انجام شده اثر این اصلاحات کاملاً مفید ارزیابی شده است، به گونهای که روش اصلاح شده قادر خواهد بود در مدت زمانی کمتر به نتایجی بهتر از روش معمولی دست یابد. ارزیابی مدل نهایی الگوریتم ژنتیک نشان میدهد که روش پیشنهادی، روشی بسیار کارآمد در حل مسائل سیستمهای بزرگ است که حل آنها با روشهای رایج غالباً غیرممکن است. به عبارتی، ارزش و کارامدی عملگرهای پیشنهادی از نقطهای شروع میشود که عملگرهای رایج الگوریتم ژنتیک در آن نقطه متوقف شده و قادر به پیشروی نیستند.
1- مقدمه
بهینهسازی بهرهبرداری از سیستمهای چندمخزنی و تدوین قوانین و سیاستهای کارآمد بهرهبرداری از آنها از چندین دهه پیش یکی از موضوعات اصلی در مطالعات منابع آب بوده و تحقیقات گستردهای بر آن انجام شده است. در این راه پیشرفتهای فراوانی چه به لحاظ استراتژیهای جدید و کارآمد حل مساله و چه از نظر افزایش توانمندی و سرعت کامپیوترهای شخصی به عنوان ابزارهای محاسباتی بوجود آمده است. اما به رغم این پیشرفتها، بهینهسازی بهرهبرداری از یک سیستم چندمخزنی بزرگ به صورت یکپارچه به ویژه هنگامی که عدم قطعیتهای هیدرولوژیکی سیستم به صورت واقعبینانه در نظر گرفته میشوند، همچنان کاری چالشدار باقی مانده است.
لادبادیه در مروری بر استراتژیهای حل مساله بهینهسازی بهرهبرداری از سیستم مخازن، این استراتژیها را در چهار دسته بهینهسازی استوکستیک ضمنی، بهینهسازی استوکستیک صریح، کنترل بهینه زمان واقعی و روشهای برنامهریزی کاوشی مورد بررسی قرار داده است. روش الگوریتم ژنتیک در این بررسی به عنوان یک روش برنامهریزی کاوشی در نظر گرفته شده است و دارای این مزیت ویژه میباشد که میدانید تمامی جزئیات مدلهای شبیهسازی درنظر بگیرید، بدون آنکه به فرضیاتی برای سادهسازی درنظر بگیرید، بدون آنکه به فرضیاتی برای سادهسازی مساله یا محاسبه مشتقات تابع هدف نیاز داشته باشد. از این رو میتوان روش GA را استراتژی امیدوارکنندهای در حل مساله بهرهبرداری بهینه از سیستم مخازن، به ویژه در سیستمهای واقعی بزرگ با توابع هدف و قیدهای پیچیده غیرخطی و تفکیکناپذیر دانست.
الگوریتم ژنتیک از طریق فرآیندی شبیه به روشهای انتخاب طبیعی در علوم زیستشناسی به بهینهسازی مسائل میپردازد. این الگوریتمها در طول دهه گذشته به طور گسترده به عنوان ابزارهای جستجو و بهینهسازی در رشتههای مختلف از جمله بازرگانی، علوم و مهندسی بکار گرفته شدهاند.
اگرچه استفاده از GA در مستئل بهرهبرداری از سیستمهای منابع آب روش نسبتاً جدید محسوب میشود، اما کاربردهای موفقی از آن گزارش رشده است. ایسات و هال کاربرد GA را در یک سیستم چهارمخزنی معروف بررسی کردند. آنها مدل GA را با برنامهریزی پویا، مقایسه و آن را به لحاظ نیازهای محاسباتی کاملاً برتری گزارش نمودند. واردلا و شریف نیز از GA برای بهینهسازی همان سیستم چهارمخزنی استفاده کرده و نشان دادند که این روش میتواند جوابهای توانمند و قابل قبولی ارائه دهد. یک سال بعد این کار توسط شریف و واردلا توسعه بیشتری یافت. اولیویرا و لاکس از GA برای بهینهسازی منحنیهای فرمان در سیستمهای چندمخزنی سیاستهای بهرهبرداری از سیستمهای مخازن پیچیده ارزیابی نمودند. کای و همکاران، GA را برنامههای خطی با موفقیت مورد استفاده قرار دادند.
چن از این الگوریتم در به دست آوردن منحنیهای فرمان یک سیستم تکمخزنی استفاده کرد و آن را برای بهینهسازی سیستمهای کاملاً غیرخطی، بسیار موثر ارزیابی نمود. تونگ و همکاران از GA برای تعیین مقدار بهینه پارامترهای نوعی از منحنیهای بهرهبرداری مخازن استفاده کرده و آن را ابزار قدرتمندی برای یافتن استراتژیهای مدیریت منابع آب بهینه ارزیابی نمودند. ممتحن و همکارانریال از GA در بهینهسازی ساختارهای مختلفی از سیاستهای بهرهبرداری برای یک سیستم تکمخزنی استفاده کردند و عملکرد آن را با روشهای برنامهریزی پویای استوکستیک و برنامهریزی پویا رگرسیون به عنوان دو روش مرسوم بهینهسازی مقایسه نمودند. آنها سیاستهای با ساختار خطی و خطی قطعهای به دست آمده از روش GA را برتر از سیاستهاتی حاصل از روشهای بهینهسازی مرسوم گزارش نمودند.
به طور کلی میتوان کاربرد GA در بهینهسازی بهرهبرداری از منابع آب را در تحقیقات گذشته به دو دسته بهینهسازی برداشتهای هر دوره زمانی و بهینهسازی پارامترهای سیاست بهرهبرداری تقسیم کرد. در این دستهبندی، شریف و واردلا از دسته اول و اولیویرا و لاکس و ممتحن و همکاران از دسته دوم میباشند. در دسته اول GA به طریقی بکار گرفته میشود که نتایجی مشابه مدلهای برنامهریزی پویا تولید کند و بنابراین به طور خودکار قسمتی از مشکلات محاسباتی این مدلها را نیز به همراه خواهد داشت، اما در دسته دوم از GA با یک رویکرد جدید، یعنی جستجوی مستقیم پارامترهای سیاست، استفاده شده است، به گونهای روشهای بهینهسازی دیگر امکان استفاده در این رویکرد را ندارند. بنابراین، به نظر میرسد در این روش استفاده بهتری از پتانسیل GA میشود. روش مورد استفاده در این مقاله نیز از دسته دوم میباشد.
در مقاله حاضر کار ممتحن و همکاران توسعه داده شده و روش جستجوی مستقیم پارامترهای سیاست، با استفاده از GA در سیستمهای چندمخزنی بررسی شده است. همچنین در بخشهای مختلفی از این روش اصلاحاتی پیشنهاد شده تا بتوان سیاستهای بهینهسازی بهتری را در زمانی کمتر به دست آورد. عملکرد این مدل به لحاظ نیازهای محاسباتی و مقادیر تابع هدف در یک سیستم سه مخزنی با مدلهای SDR, DRP مقایسه شده است.
لینک دانلود و خرید پایین توضیحات
فرمت فایل word و قابل ویرایش و پرینت
تعداد صفحات: 35
الگوریتم(پایگاه داده ها)
چکیده : در این گزارش ما به بررسی ویژگی های الگوریتمهای کنترل همروندی توزیعی که بر پایه مکانیزم قفل دو مرحله ای(2 Phase Locking) ایجاد شده اند خواهیم پرداخت. محور اصلی این بررسی بر مبنای تجزیه مساله کنترل همروندی به دو حالت read-wirte و write-write میباشد. در این مقال، تعدادی از تکنیکهای همزمان سازی برای حل هر یک از قسمتهای مساله بیان شده و سپس این تکنیکها برای حل کلی مساله با یکدیگر ترکیب میشوند.
در این گزارش بر روی درستی و ساختار الگوریتمها متمرکز خواهیم شد. در این راستا برای ساختار پایگاه داده توزیعی یک سطحی از انتزاع را در نظر میگیریم تا مساله تا حد ممکن ساده سازی شود.
1. مقدمه : کنترل همروندی فرآیندی است که طی آن بین دسترسی های همزمان به یک پایگاه داده در یک سیستم مدیریت پایگاه داده چند کاربره هماهنگی بوجود میآید. کنترل همروندی به کاربران اجازه میدهد تا در یک حالت چند برنامگی با سیستم تعامل داشته باشند در حالیکه رفتار سیستم از دیدگاه کاربر به نحو خواهد بود که کاربر تصور میکند در یک محیط تک برنامه در حال فعالیت است. سخت ترین حالت در این سیستم مقابله با بروز آوری های آزار دهنده ای است که یک کاربر هنگام استخراج داده توسط کاربر دیگر انجام میدهد. به دو دلیل ذیل کنترل همروندی در پایگاه داده های توزیعی از اهمیت بالایی برخوردار است:
کاربراان ممکن است به داده هایی که در کامپیوترهای مختلف در سیستم قرار دارند دسترسی پیدا کنند.
یک مکانیزم کنترل همروندی در یک کامپیوتر از وضعیت دسترسی در سایر کامپیوترها اطلاعی ندارد.
مساله کنترل همروندی در چندین سال قبل کاملا مورد بررسی قرار گفته است و در خصوص پایگاهدادههای متمرکز کاملا شناخته شده است. در خصوص این مسال در پایگاه داده توزیعی با توجه به اینکه مساله در حوزه مساله توزیعی قرار میگیرد بصورت مداوم راهکارهای بهبود مختلف عرضه میشود. یک تئوری ریاضی وسیع برای تحلیل این مساله ارائه شده و یک راهکار قفل دو مرحله ای به عنوان راه حل استاندارد در این خصوص ارائه شده است. بیش از 20 الگوریتم کنترل همروندی توزیعی ارائه شده است که بسیاری از آنها پیاده سازی شده و در حال استفاده میباشند.این الگوریتمها معمولا پیچیده هستند و اثبات درستی آنها بسیار سخت میباشد. یکی از دلایل اینکه این پیچیدگی وجود دارد این است که آنها در اصطلاحات مختلف بیان میشوند و بیان های مختلفی برای آنها وجود دارد. یکی از دلایل اینکه این پیچدگی وجود دارد این است که مساله از زیر قسمتهای مختلف تشکیل شده است و برای هر یک از این زیر قسمتها یک زیر الگوریتم ارائه میشود. بهترین راه برای فائق آمدن بر این پیچدگی این است که زیر مساله ها و الگوریتمهای ارائه شده برای هر یک را در ی.ک سطح از انتزاع نگاه داریم.