اگر با مسائل مهندسی سروکار دارید و اندکی هم شوق و ذوق حل مسائل کاربردی را داشته باشید، احتمالا با مسائلی که نیاز به بهینهسازی آنها دارید، روبرو خواهید شد. در این مطلب میخواهم به حل یک مثال، چگونگی حل یک مسئله بهینهسازی با استفاده از دستورات متلب، آموزش دهم.
طبعا قبل از حل مسائل بهینهسازی، شما با توجه به فیزیک مساله، مدلی را ایجاد کردهاید و بین دو یا چند پارامتر، رابطهای برقرار کردهاید و اکنون میخواهید تابع حاصل را بیشینه ( ماکزیمم ) و یا کمینه ( مینیمم ) کنید. به عبارتی میخواهید بدانید به ازای چه مقادیر ورودی ، خروجی شما بیشینه و کمینه میشود و مقدار آن را میخواهید بدانید.
در این مثال فرض من این است که شما آشنایی مقدماتی با نرمافزار متلب را دارید و یک تابع چند جملهای درجه ۵ دارید که می خواهید حداکثر و حداقل مقدار آن را در بازه خاصی بیابید. در پایان روش بهینهسازی توابع چند متغیره را توضیح خواهم داد .
- خطوط ۵ تا ۷: انتخاب ۶ داده و عبور یک منحنی درجه ۵ از آن
- خط ۱۰: نشان دادن دادهها بر روی نمودار با نقاط قرمز
- خطوط ۱۲ تا ۱۴: نشان دادن منحنی عبور داده شده در نمودار
- خط ۱۵: مشخص کردن محدوده محور Y
- خط ۱۶: راهنمای نمودار (بالا سمت راست)
- خط ۱۸: انتخاب تیتر برای نمودار با فونت ۱۲
- خطوط ۱۹ تا ۲۴: بهینهسازی برای یافتن مقدار ماکسیمم تابع و نشان دادن مقدار آن در نرمافزار متلب و مشخص کردن آن با نقطه سیاه در نمودار
- خطوط ۲۶ تا ۳۰: بهینهسازی برای یافتن مقدار مینیمم تابع و نشان دادن مقدار آن در نرمافزار متلب و مشخص کردن آن با نقطه سیاه در نمودار
در حل این مسئله باید توجه داشته باشید که دستور اصلی بهینهسازی fminbnd است و از همین دستور هم برای یافتن ماکزیمم و هم برای یافتم مینیمم تابع میتوان استفاده کرد. در حالت عادی وقتی از این دستور در متلب استفاده میکنیم، خروجی مقدار مینیمم خواهد بود و برای یافتن مقدار ماکزیمم تابع، باید تابع را قرینه کنیم (در منفی ضرب کنیم).
دستور fminbnd برای بهینه کردن توابع تک متغیره بهکار میرود و برای بهینه سازی توابع چند متغیره باید از دستور fminsearch استفاده کنید. الگوریتمی که این دستورها به هنگام بهینهسازی از آن استفاده میکنند، derivative-free method میباشد که برای اطلاعات بیشتر میتوانید به کتاب Optimization of Chemical Processes by Edgar Himmelblau and Lasdon مراجعه کنید.
خروجی
p =
-0.0833
1.2083
-6.3333
13.7917
-9.5833
2.0000
xmax =
2.4552
fxmax =
4.3467
xmin =
0.4970
fxmin =
-0.0626
فیلم آموزش فارسی بهینه سازی در متلب
بر روی عکس زیر کلیک کنید
سلام
چطوری میتونیم یک نقطه دلخواه رو روی نمودار نشون بدیم؟؟(نقطه ممکنه روی منحنی نمودار هم نباشه مثلا (1و1))
hold on
plot(1,1)
جواب eeiranmatlab درسته
منتها سوال fereshte یک خورده کلی به نظر می رسه:
ایا می خواهید فقط نقطه را نمایش بدهید و تمام…
یا این که می خواهید هر موقع که اراده کردید محل نمایش رو تغییر دهید…
ایا منحنی هم دارید و می خواهید در حضور منحنی این کار را انجام دهید:
اگر فقط یک نقطه را می خواهید همراه نمودار نشان دهید جواب همان چیزی است که eeiranmatlab نوشته اند
مگر اینکه بخواهید ان نقطه را هر موقع که دوست داشتید محلش را تغییر دهید.
اگر به جوابی که می خواستید نرسیده اید می توانید بپرسید تا جواب دهم…
سلام. خیلی ممنون از مطلب خوبتون. من با دستور fminsearch به مشکل خوردم و مقادیر خیلی زیاد و غیرمنطقی میده. میخوام با optimset محدودیت ایجاد کنم و ازش بخوام متغیرها را تو بازه مشخص بهینه کنه. امکانش هست؟ اگر هست چطور باید دستورشو رو بنویسم؟
تابع fminbnd یک تابع بدون قید و محدودیت می باشد و شما نمی تونی براش بازه مشخص کنی که تو فلان بازه برات جستجو کنه.
به جاش باید با تابع fminbnd استفاده کنی که میشه براش یک بازه در ورودی داد و داخل این بازه مینیمم را پیدا میکنه.
منم با همین مشکل برخوردم، راه حلی براش پیدا نکردید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
سلام
جعبه ابزار بهینه سازی هم آموزش داده شده؟؟؟؟
سلام
بله شما می توانید این بسته را از لینک زیر تهیه کنید
لینک بسته آموزشی بهینه سازی
سلام من یک مدل دارم در اپنسیس که از طریق لینک با متلب میخوام یسری پارامترها بهینه بشن دو تا پارامتر به همراه پاسخ بهینه رو بلدم و از طریق surf به جواب میرسم
سوال اولم اینه نقطه بهینه نمودار surf رو با چه دستوری بزنم روی نمودارش نمایش بده
سوال دومم اینه برای اینکه سه پارامتر به همراه پاسخ بهینه شوند چکار باید کرد
سلام تابع ما مثلا
4cos(2pi6t)+3sin(2pi9t)
است.میخوام ماکزیمم و مینیمم محلی کدش رو بنویسم و رو شکل نشون بده.کدش رو چطوری بنویسم؟
سلام
متلب توابع زیادی برای این کار دارد مثل isoutlier و islocalmin و islocalmax.
این توابع و تابع های دیگر در قسمت دوم بسته آموزشی یادگیری ماشین در موردش صحبت شده است.
پیش-پردازش-داده-و-معیارهای-ازریابی
ببخشید برای پیدا کردن ماکزیمم تابعی که داخلش یک مجهول هست و برای خود تابع یک شرطی هست ،از چه دستوری استفاده کنم؟؟؟؟؟
ببخشید برای پیدا کردن ماکزیمم تابعی که خود تابع ، یک مجهول دارد و همچنین یک شرطی روی تابع وجود دارد چه دستوری استفاده کنم؟ تابع من
max{ log (s(k).u) , v}=A(k)
که v را ندارم و گفته v جوری انتخاب میشود که سیگما A(k) ها برابر یک باشد
سلام
شما می توانید از تمامی تابع های بهینه سازی موجود در متلب تا جایی که خاطرم هست استفاده کنید.
بهینه سازی در متلب
سلام
کدنویسی با متلب :نمودار بهینه سازی پارامترهای گلخانه ریزشبکه برحسب تابعی از زمان در متلب ممنون
سلام
مسیله شما یک بهینهسازی وفقی adaptive می باشد که با زمان تابع هزینه تغییر می کند.
اگر داده های نمونه جمعآوری شده است می توانید یک تابع هزینه در متلب بنویسید و تابع های بهینهسازی بهش اعمال کنید.