**برنامه‌ریزی خطی**، یا همان **بهینه‌سازی خطی**، روشی در ریاضیات است که به پیدا کردن مقدار کمینه یا بیشینه از یک تابع خطی روی یک چندضلعی (یا چندوجهی) محدب می‌پردازد. این چندضلعی محدب در حقیقت نمایش نموداری تعدادی محدودیت از نوع نامعادله روی متغیرهای تابع است. به بیان ساده‌تر، به وسیله برنامه‌سازی خطی می‌توان بهترین نتیجه (مثلاً بیشترین سود یا کمترین هزینه) را در شرایط خاص و با محدودیت‌های خاص به دست آورد.
محل اصلی استفاده برنامه‌ریزی خطی در مدیریت و اقتصاد است، اما در مهندسی نیز کاربردهای فراوانی دارد. در واقع برنامه‌ریزی خطی بخشی از برنامه‌ریزی ریاضی و تحقیق در عملیات موسوم به علم مدیریت است که اولین بار توسط نیروی هوایی ارتش آمریکا بکار گرفته شد. می‌توان گفت حدود یک‌چهارم کل محاسبات علمی که بر روی رایانه انجام گرفته‌است، به برنامه‌ریزی خطی و مشتقات آن مربوط می‌شود.

تاریخچه
-------

مسئلهٔ حل مجموعه‌ای از نامعادلات خطی از زمان فوریه مطرح بوده‌است. برنامه‌ریزی خطی به عنوان یک مدل ریاضی در زمان جنگ جهانی دوم شکل گرفت تا خرج‌ها و بازگشت‌های مالی را طوری سامان بخشد که به کاهش هزینه‌های ارتش و افزایش خسارات دشمن بینجامد. این طرح تا سال ۱۹۴۷ سری باقی ماند. پس از جنگ، بسیاری از صنایع به استفاده از آن پرداختند.
پایه‌گذاران این حوزه جورج دانتزیگ منتشرکنندهٔ روش سیمپلکس در سال ۱۹۴۷، جان فون نویمان مطرح‌کننده نظریه دوگانگی در همان سال، و لئونید کانتروویچ ریاضیدان روس که از تکنیک‌های مشابهی پیش از دانتزینگ استفاده کرد و نوبل سال ۱۹۵۷ را برد هستند. نخستین بار در سال ۱۹۷۹ لئونید خاچیان نشان داد که مسئله برنامه‌ریزی خطی در مرتبه زمانی چندجمله‌ای قابل حل است. اما پیشرفت اساسی‌تر زمانی حاصل شد که نراندرا کارمارکار یک روش نقطه داخلی جدید برای حل این مسائل معرفی کرد.
مثال دانتزینگ برای منتصب کردن هفتاد نفر به هفتاد شغل متمایز کارآمدی برنامه‌ریزی خطی را به نمایش می‌گذارد. توان محاسباتی لازم برای آزمودن همهٔ جایگشتهای ممکن این مسئله بسیار بالاست. این تعداد از تعداد ذرات موجود در عالم بیشتر است. با این حال، پیدا کردن پاسخ بهینه با تبدیل مسئله به یک مسئله برنامه‌ریزی خطی و حل آن با روش سیمپلکس تنها لحظه‌ای طول می‌کشد.

الگوریتم‌ها
-----------

مجموعه‌ای از محدودیت‌ها (خطوط مرزی) به صورت نامعادلات خطی روی دو متغیر منجر به ایجاد منطقه‌ای از مقادیر ممکن برای آن دو متغیر روی صفحه می‌شود. این منطقه برای مسائل حل‌شدنی به شکل یک چندضلعی محدب است.
الگوریتم سیمپلکس که توسط جورج دانتزینگ شکل گرفت، مسائل برنامه‌ریزی خطی را به این ترتیب حل می‌کند که یک جواب قابل قبول در یکی از رئوس چندضلعی فراهم می‌کند و سپس در راستای اضلاع چندضلعی به طرف رئوسی با مقدار بالاتری از تابع هدف حرکت می‌کند تا این که به نقطه بهینه برسد. اگرچه در عمل این الگوریتم بسیار کارآمد است و می‌تواند با در نظر گرفتن برخی پیش‌گیری‌های مربوط به جلوگیری از ایجاد *دور*، با اطمینان جواب بهینه مطلق را بیابد، اما در حالاتی که به اصطلاح بدترین حالت نامیده می‌شوند عملکرد بدی دارد. تا حدی که می‌توان مسائل برنامه‌ریزی خطی طراحی کرد که روش سیمپلکس برای حلشان در برخی مراحل زمانی از مرتبه زمانی نمایی نیاز داشته باشد. حتی در دورانی دانشمندان نمی‌دانستند که این مسائل راه حل چندجمله‌ای هم دارند.

سرانجام این مسئله را لئونید خاچیان در سال ۱۹۷۹ با ارائه روش بیضوی حل کرد. این روش در بدترین حالت هم دارای زمان اجرای چندجمله‌ای بود. این روش تأثیر چندانی در جنبهٔ عملی مسئله نداشت چرا که همچنان روش سیمپلکس در همه موارد به جز تعداد محدودی از مسائل بهتر عمل می‌کرد. اما اهمیت نظری روش خاچیان غیرقابل‌انکار بود. این روش الهام‌بخش به وجود آمدن نسل جدیدی از راه‌حل‌ها شد که به آن‌ها روش نقطه داخلی گفته می‌شود. در این روش‌ها نقاط داخلی محدوده قابل بررسی متغیرها پیموده می‌شود و به سمت نقطه بهینه حرکت انجام می‌گیرد.

برنامه‌ریزی خطی استوار
----------------------

در بسیاری از مسایل بهینه‌سازی، تابع هدف یا قیود، تصادفی و در حال تغییر هستند؛ بنابراین پاسخ بهینهٔ مسئله می‌بایست به گونه‌ای بدست آورده شود که برای تمامی تغییرات توابع بهینه باشد.  

یک مسئله برنامه‌ریزی خطی (LP) به صورت زیر فرض می‌شود:  

{\displaystyle minimize\quad C^{T}x}  

{\displaystyle subject\quad to\quad a\_{i}^{T}x\leq b}

اگر در مسئلهٔ فوق پارامترهای a\_{i} ،{\displaystyle b\_{i}} و C ثابت و یقینی نباشند، حل مسئله، به حل یک مسئلهٔ مقاوم در برابر تغییرات پارامترها تبدیل می‌شود.  

برای حل مسائل بهینه‌سازی به صورت مقاوم دو رهیافت وجود دارد:

1. بدترین حالت
2. مدل تصادفی

بدترین حالت
-----------

در این روش، بازهٔ تغییرات پارامترها مشخص است و مسئله برای بدترین حالتی که ممکن است رخ دهد، حل می‌شود.

### مثال

در حالت خاص فرض می‌شود تنها پارامتر a\_{i} متغیر تصادفی باشد. در صورتی که{\displaystyle a\_{i}\in \varepsilon \_{i}} فرض شود، (a\_{i} عضو یک بیضی باشد).

{\displaystyle minimize\quad C^{T}x}  

{\displaystyle subject\quad to\quad a\_{i}^{T}x\leq b\_{i}\quad for\quad a\_{i}\in \varepsilon \_{i}}

قید نامساوی را می‌توان به صورت زیر نوشت:

{\displaystyle Sup(a\_{i}^{T}x|a\_{i}\in \varepsilon \_{i})\leq b\_{i}},
{\displaystyle \quad a\_{i}=\{{\bar {a}}\_{i}^{T}+P\_{i}u|\quad \left\Vert \ u\right\|\_{2}\leq 1\}}

  

با جایگذاری a\_{i} در {\displaystyle Sup} خواهیم داشت:

{\displaystyle Sup(a\_{i}^{T}x|a\_{i}\in \varepsilon \_{i})}
{\displaystyle ={\bar {a}}\_{i}^{T}x+Sup\{u^{T}P\_{i}^{T}x|\quad \left\Vert \ u\right\|\_{2}\leq 1\}}

{\displaystyle \quad \quad \quad \quad \qquad \quad \quad ={\bar {a}}\_{i}^{T}x+\left\Vert \ P\_{i}^{T}x\right\|\_{2}}

  

در نتیجه مسئله برنامه‌ریزی خطی مقاوم به یک مسئلهٔ SOCP تبدیل می‌شود:  

{\displaystyle minimize\quad C^{T}x}  
  

{\displaystyle subject\quad to\quad {\bar {a}}\_{i}^{T}x+\left\Vert \ P\_{i}^{T}x\right\|\_{2}}

### مدل تصادفی

در این روش، متغیر در بازه مشخص نبوده و دارای توزیع آماری است بنابراین بهینه‌سازی برای بدترین حالت امکان‌پذیر نبوده و مسئله با توجه به توزیع آماری متغیر حل می‌شود.

#### مثال

{\displaystyle minimize\quad C^{T}x}  

{\displaystyle subject\quad to\quad prob(a\_{i}^{T}x\leq b\_{i})\geq \eta }

a\_{i} یک بردار گوسی با میانگین {\displaystyle {\bar {a}}\_{i}^{T}} و تابع کوواریانس {\displaystyle \Sigma \_{i}} فرض می‌شود.  

{\displaystyle a\_{i}\sim N({\bar {a}}\_{i}^{T},\Sigma \_{i})}  

{\displaystyle a\_{i}x\sim N({\bar {a}}\_{i}^{T}x,x^{T}\Sigma \_{i}x)}  

قید مسئله به صورت زیر خواهد شد:

{\displaystyle prob(a\_{i}^{T}x\leq b\_{i})=1-Q(\left({\frac {b\_{i}-a\_{i}^{T}x}{\left\Vert \ \Sigma \_{i}^{1/2}x\right\|\_{2}}}\right)}  

{\displaystyle \phi (x)=1-Q(x)} تابع CDF متغیر گوسی است.

{\displaystyle prob(a\_{i}^{T}x\leq b\_{i})=\phi (\left({\frac {b\_{i}-a\_{i}^{T}x}{\left\Vert \ \Sigma \_{i}^{1/2}x\right\|\_{2}}}\right)}{\displaystyle \geq \eta }  

{\displaystyle b\_{i}-a\_{i}^{T}x\geq \phi ^{-1}(\eta )\left\Vert \ \Sigma \_{i}^{1/2}x\right\|\_{2}}

{\displaystyle a\_{i}^{T}x+\phi ^{-1}(\eta )\left\Vert \ \Sigma \_{i}^{1/2}x\right\|\_{2}\leq b\_{i}}

با جایگذاری قید بدست آمده در مسئله اصلی، مسئله به صورت زیر خواهد شد:

{\displaystyle minimize\quad C^{T}x}  

{\displaystyle subject\quad to\quad a\_{i}^{T}x+\phi ^{-1}(\eta )\left\Vert \ \Sigma \_{i}^{1/2}x\right\|\_{2}\leq b\_{i}}

مسئلهٔ برنامه‌ریزی خطی مقاوم حاصل به شکل یک مسئلهٔ SOCP است.

پانویس
------

1. ↑  Linear Programming - from Wolfram MathWorld
2. ↑  هیلیر و لیبرمن، ج 1، ص 29

منابع
-----

* فردریک س. هیلیر- جرالد ج. لیبرمن، ترجمه محمد مدرس و اردوان آصف‌وزیری، *تحقیق در عملیات*، چاپ دهم تهران: نشر جوان، ۱۳۸۲

* سلیمانی دامنه- مجید، *بهینه‌سازی خطی* ، انتشارات دانشگاه تهران، ۱۴۰۰

پیوند به بیرون
--------------

* Guidance on Formulating LP problems
* 0-1 Integer Programming Benchmarks with Hidden Optimum Solutions بایگانی‌شده در ۵ مه ۲۰۰۹ توسط Wayback Machine
* Mathematical Programming Glossary
* A Tutorial on Integer Programming
* The linear programming FAQ
* Linear Programming Survey OR/MS Today
* Linear Programming: Guide to Formulation, Simplex Algorithm, Goal Programming and Excel Solver examples
* George Dantzig

جستارهای وابسته
---------------

* برنامه‌ریزی پویا
* بهینه‌سازی
* بهینه‌سازی استوار
* سیمپلکس

| * ن
* ب
* و
بهینه‌سازی: تئوری، روش‌ها، و ابتکارها |
| --- |
| 

| برنامه‌سازی نامقید غیرخطی: روش‌ها با استفاده از |
| --- |
| 

|  |  |
| --- | --- |
| … تابع‌ها | 
* Golden section search
* Interpolation methods
* Line search
* روش نلدر - مید
* Successive parabolic interpolation

 |
| … و گرادیان‌ها | 

|  |  |
| --- | --- |
| Convergence | 
* Trust region
* Wolfe conditions

 |
| Quasi–Newton | 
* روش بی‌اف‌جی‌اس and L-BFGS
* DFP
* Symmetric rank-one (SR1)

 |
| Other methods | 
* Gauss–Newton
* Gradient
* الگوریتم لونبرگ-مارکارد
* Conjugate gradient

 |

 |
| … و هشین‌ها | 
* Newton's method

 |

 |

 | The graph of a strictly concave quadratic function is shown in blue, with its unique maximum shown as a red dot. Below the graph appears the contours of the function: The level sets are nested ellipses.Optimization computes maxima and minima. |
| 

| برنامه‌سازی مقید غیرخطی |
| --- |
| 

|  |  |
| --- | --- |
| کلی | 
* Barrier methods
* روش پنالتی

 |
| مشتق‌پذیر | 
* Augmented Lagrangian methods
* Sequential quadratic programming
* Successive linear programming

 |

 |

 |
| 

| بهینه‌سازی محدب |
| --- |
| 

|  |  |
| --- | --- |
| بهینه‌سازی محدب | 
* Cutting-plane method
* Reduced gradient (Frank–Wolfe)
* Subgradient method

 |
| برنامه‌ریزی خطی ودرجه دو | 

|  |  |
| --- | --- |
| برنامه‌ریزی خطی | 
* Ellipsoid algorithm of Khachiyan
* الگوریتم کارمارکار

 |
| Basis-الگوریتم حریصانه | 
* الگوریتم غیر مرکب
* Revised simplex algorithm
* Criss-cross algorithm
* Principal pivoting algorithm of Lemke

 |

 |

 |

 |
| 

| بهینه‌سازی ترکیبیاتی |
| --- |
| 

|  |  |
| --- | --- |
| الگو‌ها | 
* الگوریتم تقریبی
* برنامه‌ریزی پویا
* الگوریتم حریصانه
* بهینه‌سازی خطی عدد صحیح
	+ شاخه و حد یا شاخه و برش

 |
| الگوریتم‌هایگراف | 

|  |  |
| --- | --- |
| درخت پوشای کمینه | 
* الگوریتم بلمن–فورد
* الگوریتم بروکا
* الگوریتم دیکسترا
* الگوریتم فلوید-وارشال
* الگوریتم جانسون
* الگوریتم کراسکال

 |

 |
| شبکه شاره | 
* الگوریتم دینیک
* الگوریتم ادموندز کارپ
* الگوریتم فورد–فالکرسون
* الگوریتم ارسال-برچسب

 |

 |

 |
| 

| الگوریتم‌های فراابتکاری |
| --- |
| 
* الگوریتم تکاملی
* الگوریتم تپه‌نوردی
* الگوریتم جستجوی محلی (بهینه‌سازی)
* الگوریتم تبرید شبیه‌سازی شده
* الگوریتم جستجوی ممنوعه

 |

 |
| 
* **رده‌ها**
	+ روش‌ها
	+ ابتکارها
* **نرم‌افزارها**

 |

|  |  |
| --- | --- |
| داده‌های کتابخانه‌ای: کتابخانه‌های ملی ویرایش در ویکی‌داده | 
* فرانسه (داده‌ها)
* آلمان
* اسرائیل
* ایالات متحده آمریکا
* ژاپن
* جمهوری چک

 |



1. ↑  Boyd,Stephen & Vanderberghe, Lieven. Convex Optimization