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