TGViewer
📘 Optimyar | آپتیم‌یار 📘 Optimyar | آپتیم‌یار @optimyar · 2.49K subscribers
Post #165 1.68K

Forwarded from 𝙰𝚕𝚒 𝙿𝚊𝚙𝚒

مهمترین نکات در رابطه با مدل های دوسطحی (Bi-Level programming) که در در سطح دوم (پیرو/Follower) غیرخطی بودن داره به صورت زیر هست:

1- اول برای اینکه این اطلاعات مفید باشه به طور کلی یاداوری میکنم که این مدل ها معمولا در شرایطی رقابتی یا گیم بین دو سازمان یا واحد تصمیم گیری رخ میده که واحد اصلی (یا اصطلاحا Leader ) باید بهینگی واحد پیرو (یا واحدی که تحت تاثیر تصمیمات اون هست یا همون Follower ) رو در نظر بگیره. این مسائل در ادبیات معمولا به بازی استکلبرگ (Stackelberg Game) هم معروف هست.

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

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

4- دقت داشته باشیم که ضرب متغیر تصمیم گیری لیدر در متغیر تصمیم گیری پیرو باعث نمیشه مدل پیرو غیرخطی باشه. چراکه تصمیم لیدر برای پیرو ثابت در نظر گرفته میشه. یعنی شما در این شرایط هم راحت KKT رو بزنید (البته اون فرض فراموش نشه). لازم به توضیح است در این شرایط مطمئنا مدل تک سطحی نهایی بعد از اعمال KKT غیرخطی میشه

5- در مدلهای غیرخطی، در صورتی که مدل پیرو کاملا پیوسته است (متغیر باینری و عددصحیح) نداشته باشه. اولین کاری که بهتره انجام شود، بررسی تحدب است. حالا نه لزوما با ماتریس هسین(Hessian) بلکه هر تکنیک که میتونید اعمال کنید. (مثلا جمع محدب ها محدب هست و توان 2 ها محدب هستن و ...) اگر تحدب برقرار هست با خیال راحت قیود KKT رو جایگزین کنید. باز هم میگم در این حالت هم هنوز اون فرض که عرض کردم رو باید قبول کرده باشیم. پر واضح است که اینجا هم مدل نهایی غیرخطی هست. نکته جالب اینجاست که حتی اگر مدل پیرو تحدب رو داشته باشه و KKT بزنید، باز هم هیچ تضمینی نیست مدل نهایی محدب باشه و اتفاقا معمولا عدم تحدب داره و خود این هم چالش است. حالا اگر مدل عددصحیح و غیره هم داشته باشه که چالش دو چندان هم میشه. البته در این شرایط معمولا خیلی راحت مدل نهایی رو یک Solver مثل BARON و ... داده میشه که حل کنه!!! که مطمئنا این حرکت چندان درست نیست و امکان داره لیدر بشدت در بهینگی محلی قرار بگیره (تازه اگر BARON یا BONMIN و امثالهم حل کنن مدل نهایی رو)

6- حالا اگر 5 مورد بالا را برای شما صدق نمیکنه و یا دنبال راه کارهای دیگری هستید؛ روش پیشنهادی بنده به صورت زیر هست که در کارهای مختلفی با تعامل GAMS و MATLAB و یا CPLEX و یا JAVA و CPLEX قابل پیاده سازی هست.

گام 1) جواب اولیه X برای متغیرهای تصمیم گیری لیدر در نظر گرفته شود.

گام 2) مسئله بهینه سازی پیرو (که یک مدل غیر خطی هست حل شود) با توجه به غیرخطی بودن این مدل موارد زیر پیشنهاد میشه:
* با رویکردهای حل ابتکاری و یا فراابتکاری حل شود و پاسخ نزدیک به بهینه Y (که امکان داره بهینه هم باشه) برای پیرو بدست آورده شود.
* با روش های برنامه ریزی عیرحطی (از جمله روش SQP و یا Trust Region ) پاسخ نزدیک به بهینه Y (که امکان داره بهینه هم باشه) برای پیرو بدست آورده شود.

گام 3) مدل بهینه سازی لیدر، با ثابت کردن تصمیم Y برای پیرو، حل می شود. حالا امکان داره این مدل خطی یاشه که از solverهایی مثل CPLEX و امثالهم استفاده میکنید و سریع X جدید رو برای لیدر بدست میاد. یا امکان داره خود این مدل هم غیرخطی باشه که باز هم دو روش * گام 2 پیشنهاد میشه و یا حتی solver غیرخطی موجود در GAMS و ... .

گام 4) تصمیم لیدر در گام 3 آپدیت میشه و مجددا به گام 2 برمیگردیم و این رویه تاجایی پیدا میکنه که بهبود قابل توجه ای در تابع هدف لیدر رخ نده.
در رویه فوق اگرچه تضمینی برای بهینه سراسری نیست، ولی با تغییر در پاسخ اولیه A میتونه به جواب های مختلفی همگرا شه و اگر N مرتبه در مقدار اولیه X تغییر ایجاد شود مطمئنا بهترین پاسخ آن بسیار نزدیک به بهینه است (مطمئنا هرچی N بیشتر و جواب های اولیه متمایزتر باشه، کیفیت پاسخ نهایی بهتر میشه ).
  • 👍 1
More from @optimyar
  1. Oct 7, 2026Post #520
  2. Oct 7, 2026Post #519
  3. Oct 7, 2026Post #518
  4. Oct 7, 2026اطلاعیه مهم در خصوص ادامه دوره‌های آموزشی آپتیم‌یار (کلاس‌های DRO و GurobiPy و MODM و CVaR…
  5. Sep 20, 2026📚انواع شیوه‌های پیاده‌سازی یک مدل بهینه‌سازی و توسعه روش حل برای آن 📱 لینک این پست مفید…
  6. Sep 16, 2026👨‍💻 چگونه از بن شدن اکانت هوش مصنوعی کلاود (Cluade) جلوگیری کنیم؟ 😒 در این ویدیو کوتاه…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →