شرایط بهینگی KKT: چرا و چطور کار میکند؟
آموزش شرایط بهینگی کاروش-کوهن-تاکر (KKT) با پنج مثال گامبهگام و شرایط چهارگانهی جداگانه برای هر مثال، از یک مسئله درجه دوم ساده تا دامی که فقط در مسائل غیرمحدب رخ میدهد.
هر سالور بهینهسازی، در پایان کار، یک عدد و یک نقطه به شما میدهد. اما از کجا مطمئن شویم این نقطه واقعاً بهینه است؟ پاسخ ریاضی این سوال، شرایط کاروش-کوهن-تاکر یا KKT است. این شرایط، گواهی رسمی بهینگی هر مسئلهی محدب و حتی خیلی از مسئلههای غیرمحدب هستند.
در این مطلب، شرایط KKT را با پنج مثال کامل یاد میگیرید. برای هر مثال، چهار شرط را جداگانه مینویسیم و بعد قدمبهقدم حل میکنیم. از یک مسئلهی سادهی درجهدوم شروع میکنیم و در پایان به دامی میرسیم که فقط در مسائل غیرمحدب رخ میدهد.
چرا این موضوع اهمیت دارد
بیشتر مهندسان فقط خروجی سالور را نگاه میکنند و به آن اعتماد میکنند. اما سالورهای عددی گاهی به نقطهای غیربهینه همگرا میشوند، بهخصوص در مسائل غیرخطی و غیرمحدب. دانستن شرایط KKT به شما اجازه میدهد خروجی هر مدلی را دستی بررسی کنید. همین مهارت، تفاوت بین «اعتماد کورکورانه» و «فهم واقعی مدل» است.
شرکتی مثل زیمنس (Siemens)، در ابزارهای طراحی مهندسی خودش، از بهینهسازی توپولوژی قطعات مکانیکی استفاده میکند. این الگوریتمها در پسزمینه دقیقاً بر پایهی همین شرایط KKT کار میکنند. وقتی وزن یک پرهی توربین یا یک بدنهی هواپیما کمینه میشود، سالور باید در هر مرحله شرایط KKT را بررسی کند. بدون این شرایط، اصلاً مشخص نیست الگوریتم به کجا باید همگرا شود.
همین منطق در یادگیری ماشین هم کاربرد دارد. ماشینهای بردار پشتیبان یا SVM مستقیماً با حل شرایط KKT آموزش داده میشوند. اگر مدلسازی ریاضی را جدی دنبال میکنید، این شرایط را دیر یا زود دوباره خواهید دید.

فرم استاندارد، پیشنیاز نوشتن KKT
پیش از نوشتن شرایط KKT، هر مسئله باید به یک فرم استاندارد تبدیل شود. دو قاعدهی ثابت وجود دارد که هیچوقت نباید فراموش شوند.
قاعدهی اول، فرم قیدهای نامساوی است. هر قید نامساوی باید همیشه بهصورت کوچکتر مساوی، یعنی ، نوشته شود. اگر قیدی بهشکل داده شده بود، آن را در منفی یک ضرب میکنیم. برای مثال، قید باید بهصورت نوشته شود، نه چیز دیگری.
قاعدهی دوم، فرم تابع هدف است. تابع هدف باید همیشه به فرم کمینهسازی باشد. اگر مسئلهی اصلی بیشینهسازی بود، آن را به تبدیل میکنیم، چون بیشینهی دقیقاً منفیِ کمینهی است.
دلیل این دو قاعده ساده است. شرط شدنیبودن دوگان، یعنی نامنفیبودن ضریب هر قید نامساوی، فقط وقتی معتبر است که همهی قیدها دقیقاً به همین فرم استاندارد نوشته شده باشند. فراموشکردن این تبدیل، علامت ضریب را برعکس میکند. همین اشتباه ساده میتواند یک نقطهی بهینهی واقعی را بهغلط رد کند.
چهار شرط KKT
مسئلهی کلی، پس از تبدیل به فرم استاندارد، همیشه به این شکل نوشته میشود.
در این فرم، خلاصهی قید نامساوی است و هم خلاصهی قید تساوی است. طبق قرارداد این مطلب، هر قید نامساوی یک ضریب میگیرد. هر قید تساوی هم یک ضریب آزاد میگیرد. تابع لاگرانژ این مسئله چنین است.
یک نقطهی شرایط KKT را برآورده میکند، اگر چهار دسته شرط زیر همزمان برقرار باشند.
این شرط اول، ایستایی یا stationarity نام دارد. میگوید در نقطهی بهینه، گرادیان تابع هدف دقیقاً با ترکیبی از گرادیان قیدها خنثی میشود. همان چیزی است که در تصویر بالای مطلب دیدید؛ دو بردار گرادیان، در نقطهی بهینه همراستا میشوند.
شرط دوم، شدنیبودن اولیه است. نقطه باید همهی قیدهای اصلی مسئله را رعایت کند.
شرط سوم، شدنیبودن دوگان است. فقط قیدهای نامساوی ضریب نامنفی میگیرند، چون فرم استاندارد جهت نامساوی را مشخص کرده است.
شرط چهارم، Complementary Slackness است. برای هر قید نامساوی، یا خودِ قید فعال است یا ضریبش صفر است، هیچوقت هر دو همزمان غیرصفر نیستند. دقیقاً همین چهار شرط، ستون فقرات پنج مثال زیر هستند.
مثال ۱: یک قید نامساوی فعال
نزدیکترین نقطه به را با قید و پیدا کنید. نقطهی بدون قید یعنی خودش دارد، پس شدنی نیست.
۱. ایستایی:
۲. شدنیبودن اولیه:
۳. شدنیبودن دوگان:
۴. Complementary Slackness:
چطور حل میکنیم: چون نقطهی بدون قید در ناحیهی مثبت قرار دارد، فرض میکنیم و در نتیجه . همچنین فرض میکنیم قید فعال است. با این دو فرض، ایستایی میدهد ، یعنی . جایگذاری در نتیجه میدهد و . سپس .
حالا هر چهار شرط را با این اعداد تأیید میکنیم. شدنی اولیه برقرار است چون و هر دو متغیر مثبتاند. شدنی دوگان هم برقرار است چون . Complementary Slackness هم برقرار است چون قید فعال با ضریب مثبت آمده و قیدهای غیرفعال ضریب صفر دارند. چون تابع هدف محدب و قیدها خطیاند، این نقطه بهینهی سراسری است با .
مثال ۲: شرایط KKT یک مسئله خطی
در یک شبکهی سهگرهی ، و ، هزینهی یال برابر ۲، یال برابر ۳ و یال مستقیم برابر ۷ است. هدف، پیدا کردن کوتاهترین مسیر از به است.
۱. ایستایی (برای هر یال ، ضریب آن بهصورت درمیآید):
۲. شدنیبودن اولیه:
۳. شدنیبودن دوگان:
۴. Complementary Slackness:
چطور حل میکنیم: سه معادلهی تعادل جریان به هم وابستهاند، پس یکی را مرجع میگیریم: . حدس میزنیم مسیر بهینه است، یعنی و . چون است، Complementary Slackness را اجبار میکند. جایگذاری در معادلهی اول میدهد .
چون هم هست، به همین ترتیب میشود. معادلهی دوم با این مقدار میدهد . حالا را از معادلهی سوم حساب میکنیم: . این عدد نامنفی است، پس شدنی دوگان برقرار است و جواب تأیید میشود.
مثال ۳: ترکیب قید تساوی و نامساوی
کمینهکردن را با قید تساوی و قید نامساوی در نظر بگیرید.
۱. ایستایی:
۲. شدنیبودن اولیه:
۳. شدنیبودن دوگان:
۴. Complementary Slackness:
چطور حل میکنیم: ابتدا فرض میکنیم قید نامساوی فعال است، یعنی . از قید تساوی، به دست میآید. از ایستایی دوم، . جایگذاری در ایستایی اول میدهد . این عدد منفی است و شدنی دوگان را نقض میکند، پس این فرض رد میشود.
حالا فرض میکنیم قید نامساوی غیرفعال است، یعنی . ایستایی میدهد و . جایگذاری در قید تساوی نتیجه میدهد ، یعنی . از اینجا و به دست میآید. چون ، شدنی اولیه هم برقرار است. این مثال نشان میدهد نباید حدس زد کدام قید فعال است؛ باید هر فرض را با چهار شرط بررسی کرد. مقدار تابع هدف در این نقطه برابر ۷٫۲ است.
مثال ۴: دو قید همزمان فعال
کمینهکردن فاصله تا نقطهی را با دو قید و در نظر بگیرید.
۱. ایستایی:
۲. شدنیبودن اولیه:
۳. شدنیبودن دوگان:
۴. Complementary Slackness:
چطور حل میکنیم: نقطهی بدون قید هر دو قید را نقض میکند، پس باید حدس زد کدام قید یا قیدها فعالاند. فرض «هیچکدام فعال نیست» جواب را میدهد که شدنی اولیه را نقض میکند. فرض «فقط فعال است» جواب را میدهد که از قید عبور میکند. فرض «فقط فعال است» هم جواب را میدهد که از عبور میکند.
تنها فرض باقیمانده، فعالبودن هر دو قید همزمان است. با و ، نتیجه میشود . از ایستایی دوم، . از ایستایی اول، . هر دو ضریب نامنفیاند، پس شدنی دوگان برقرار است. این مثال نشان میدهد وقتی هدف خیلی دور از ناحیهی شدنی باشد، جواب معمولاً روی گوشهی تلاقی چند قید مینشیند. مقدار تابع هدف برابر ۱۰ است.
مثال ۵: دامی که فقط در مسائل غیرمحدب رخ میدهد
کمینهکردن را با قیدهای و در نظر بگیرید. این تابع هدف در جهت مقعر است، پس کل مسئله غیرمحدب است.
۱. ایستایی:
۲. شدنیبودن اولیه:
۳. شدنیبودن دوگان:
۴. Complementary Slackness:
چطور حل میکنیم: فرض اول را روی نقطهی امتحان میکنیم. اینجا فعال است و و غیرفعالاند، پس . ایستایی اول میدهد که سازگار است. ایستایی دوم میدهد ، که نامنفی است. هر چهار شرط برقرارند و مقدار تابع هدف برابر منفی یک میشود.
فرض دوم را روی نقطهی امتحان میکنیم؛ این دقیقاً نقطهی بحرانی بدون قید تابع هدف است. اینجا فعال است و غیرفعالاند. هر دو معادلهی ایستایی همزمان میدهند، یعنی قید فعال است اما ضریبش صفر. این حالت تبهگن نام دارد و هر چهار شرط را باز هم برآورده میکند، با مقدار تابع هدف صفر.
دو نقطهی مختلف، هر چهار شرط KKT را برآورده میکنند، اما فقط یکی واقعاً بهینه است. در نقطهی دوم، اگر را کمی کم کنیم و در ناحیهی شدنی بمانیم، تابع هدف باز هم کاهش مییابد. پس این نقطه حتی کمینهی محلی هم نیست؛ یک نقطهی زینی است که تصادفاً روی مرز افتاده. تصویر میانهی مطلب دقیقاً همین تفاوت را نشان میدهد. درس این مثال ساده است: در مسائل محدب، هر نقطهی KKT بهینهی سراسری است. در مسائل غیرمحدب، باید نقاط را با هم مقایسه کرد یا شرایط مرتبهی دوم را هم بررسی کرد.
ظرفیت کار آکادمیک و پژوهشی
شرایط KKT خودش یک نتیجهی کلاسیک است، اما کاربردهای مدرنش هنوز فضای پژوهشی زیادی دارند. یک مسیر فعال، شرطهای واجد بودن قید یا constraint qualification است. گاهی حتی در نقطهی بهینه، KKT برقرار نمیشود مگر این شرطها هم رعایت شوند.
مسیر دیگر، تبدیل مسئلههای دومرحلهای به مسئلهی تکسطحی با همین شرایط KKT است. به این روش در ادبیات MPEC میگویند. چالش اصلی آن، خطیسازی قید Complementary Slackness با متغیر دودویی و عدد بزرگ است. انتخاب نادرست این عدد میتواند جواب را کاملاً خراب کند.
اگر مدل بهینهسازی شما هیچ نقطهی شدنیای پیدا نکند، شرایط KKT اصلاً تعریف نمیشوند. یادداشت چرا مدل بهینهسازی من ناشدنی است؟ دقیقاً همین حالت را بررسی میکند. برای مسائل چندهدفه هم، روش اپسیلون-قید از همین منطق قیدهای نامساوی و ضرایب آنها استفاده میکند.
پیادهسازی با پایتون
خبر خوب این است که شرایط KKT را میتوان هم بهصورت نمادین و هم بهصورت عددی در پایتون بررسی کرد. نیازی به نرمافزار تجاری گرانقیمت نیست.
برای حل نمادین معادلات ایستایی، کتابخانهی SymPy بسیار مناسب است. میتوانید دقیقاً مثل مثالهای بالا، معادلات را تعریف کنید و SymPy آنها را برایتان حل کند. این روش برای یادگیری و بررسی دستی مسئلههای کوچک عالی است.
برای حل عددی مسئلههای غیرخطی بزرگتر، کتابخانهی Pyomo به همراه سالور متنباز IPOPT گزینهی استاندارد است. IPOPT دقیقاً بر پایهی روش نقطهی درونی کار میکند که خودش نسخهای از حل تکراری شرایط KKT است. برای مسائل کوچکتر، ماژول scipy.optimize.minimize از SciPy با روش SLSQP هم بهخوبی کار میکند.
بعد از حل مدل، میتوانید ضرایب KKT را از خروجی سالور بگیرید. در Pyomo، این ضرایب از طریق پسوند Suffix با نام dual در دسترس هستند. بررسی این ضرایب، همان کاری است که در مثالهای بالا با دست انجام دادیم؛ فقط اینبار سالور آن را برایتان انجام میدهد. دورهی مدلسازی ریاضی در بهینهسازی این نوع تحلیل حساسیت و تفسیر ضرایب را با مثالهای کامل آموزش میدهد.
سوالات متداول
تفاوت شرایط KKT با ضرایب لاگرانژ کلاسیک چیست؟
ضرایب لاگرانژ کلاسیک فقط برای قیدهای تساوی تعریف میشوند. شرایط KKT، همان ایده را به قیدهای نامساوی هم تعمیم میدهند و شرط Complementary Slackness را اضافه میکنند. به همین دلیل، KKT را تعمیم لاگرانژ مینامند.
برای یادگیری عملی مدلسازی ریاضی و تحلیل حساسیت از کجا شروع کنم؟
دورهی مدلسازی ریاضی در بهینهسازی دقیقاً همین مبانی، از جمله شرایط KKT و تفسیر ضرایب دوگان، را با مثالهای عملی آموزش میدهد.
اگر مدل من به شرایط KKT نرسد یا همگرا نشود چه کار کنم؟
این موضوع معمولاً به ساختار غیرمحدب مدل، انتخاب نقطهی شروع یا نقض شرطهای واجد بودن قید برمیگردد. برای بررسی دقیق مدل خودتان و رفع این مشکل، میتوانید از مشاوره کمک بگیرید.
مشاوره و ارتباط با ما
برای مشاوره و ثبتنام در دورهها و دریافت پروژهها با آیدی @pypyid در تلگرام در تماس باشید.