ডাইনামিক প্রোগ্রামিং ভাষা বা ডাইনামিক সমস্যা নিবন্ধের সাথে বিভ্রান্ত হবেন না।**ডাইনামিক প্রোগ্রামিং** হল কম্পিউটারে প্রোগ্রাম লিখার এবং গাণিতিক নিখুঁতীকরণের একটি পদ্ধতি। রিচার্ড বেলম্যান ১৯৬০ এর দশকে এই পদ্ধতিটি উদ্ভাবন করেন এবং বর্তমানে অনেকসংখ্যক কর্মক্ষেত্র, অ্যারোস্পেস প্রকৌশল হতে অর্থনীতিতে এটি ব্যবহৃত হচ্ছে। উভয় প্রসঙ্গে একটি জটিল সমস্যাকে সহজতর এবং ক্ষুদ্রতর সমস্যায় ভাগ করে পুনরাবৃত্তিয় (রিকার্সিভ) ভাবে সমাধান করাকে এটি নির্দেশ করে। যদিও কিছু বাছাইকরণ (ডিসিশন) সমস্যা এ পদ্ধতিতে বিভাজন সম্ভব নয়, যে বাছাইগুলো সময়ের একাধিক বিন্দুতে অবস্থান করে সেগুলিকে পুনরাবৃত্তভাবে ভাগ করা সম্ভব। অনুরূপভাবে কম্পিউটার বিজ্ঞানে, যদি একটি বড় সমস্যাকে ছোট ছোট সমস্যায় বিভক্ত করে সবগুলোকে পুনরাবৃত্তভাবে সমাধানের মাধ্যমে পুরো সমস্যাটির সন্তোষজনকভাবে সমাধান করা সম্ভব, তাহলে এটির অপ্টিমাল সাবস্ট্রাকচার বৈশিষ্ট রয়েছে বলে ধরে নেয়া যায়।

যদি উপ-সমস্যাগুলিকে পুনরাবৃত্তিয়ভাবে বৃহৎ সমস্যার মধ্যে আবদ্ধ করা যায় যাতে করে ডাইনামিক প্রোগ্রামিং এর পদ্ধতিগুলি এর ওপর প্রয়োগযোগ্য হয়, তাহলে বৃহত্তর সমস্যার মান ও ক্ষুদ্রতর সমস্যাগুলির মানের মাঝে একটি সম্পর্ক রয়েছে বলে ধরে নেয়া যেতে পারে। গাণিতিক অপ্টিমাইযেশন বিদ্যায় এই সম্পর্ককে বলা হয় বেলম্যান সমীকরণ।

সারাংশ
------

### গাণিতিক অপ্টিমাইজেশান

গাণিতিক অপ্টিমাইজেশানের পরিভাষায়, ডাইনামিক প্রোগ্রামিং এর সাহায্যে সাধারণত বোঝানো হয়, কোন একটি বৃহৎ বিষয়ে সিদ্ধান্ত গ্রহণকে সময়ের সাথে সাথে ভেঙে একাধিক ছোট ছোট সিদ্ধান্ত গ্রহণের পদক্ষেপে বিভক্ত করার প্রক্রিয়া। মনে করি, **মূল্যমান ফাংশনের** একটি অনুক্রম *V*1, *V*2, ... *Vn* এবং সময় i=1 হতে n পর্যন্ত সিস্টেমের অবস্থা নির্দেশকারী *y* কে উক্ত অনুক্রম আর্গুমেন্ট হিসেবে গ্রহণ করে। *n* সময়ে *y* অবস্থার প্রাপ্ত মানের দ্বারা *Vn*(*y*) কে সংজ্ঞায়িত করা হয়।

### নিয়ন্ত্রণ তত্ত্ব

নিয়ন্ত্রণ তত্ত্বে একটি চিরাচরিত সমস্যা হচ্ছে, কোন একটি সিস্টেম {\displaystyle {\dot {\mathbf {x} }}(t)=\mathbf {g} \left(\mathbf {x} (t),\mathbf {u} (t),t\right)}কে অবিচ্ছিন্ন সময় অন্তর {\displaystyle t\_{0}\leq t\leq t\_{1}}এর মাঝে গ্রহণযোগ্য আবক্র পথ {\displaystyle \mathbf {x} ^{\ast }}অনুসরণ করে এবং একটি কস্ট ফাংশন মিনিমাইজে বাধ্য করতে গেলে যে গ্রহণযোগ্য নিয়ন্ত্রণ {\displaystyle \mathbf {u} ^{\ast }}দরকার সেটি বের করা।

{\displaystyle J=b\left(\mathbf {x} (t\_{1}),t\_{1}\right)+\int \_{t\_{0}}^{t\_{1}}f\left(\mathbf {x} (t),\mathbf {u} (t),t\right)\mathrm {d} t}
এই সমস্যার সমাধান হল, একটি সন্তোষজনক নিয়ন্ত্রণ বিধি অথবা বিধান {\displaystyle \mathbf {u} ^{\ast }=h(\mathbf {x} (t),t)}এর ব্যবস্থা করা, যা একটি সন্তোষজনক আবক্রপথ {\displaystyle \mathbf {x} ^{\ast }}এবং উন্নততর ক্ষতি-ফাংশন {\displaystyle J^{\ast }}এর সৃষ্টি করে। শেষোক্ত ফাংশন ডাইনামিক প্রোগ্রামিং এর মৌলিক সমীকরণ মেনে চলে:

{\displaystyle -J\_{t}^{\ast }=\min \_{\mathbf {u} }\left\{f\left(\mathbf {x} (t),\mathbf {u} (t),t\right)+J\_{x}^{\ast {\mathsf {T}}}\mathbf {g} \left(\mathbf {x} (t),\mathbf {u} (t),t\right)\right\}}
একটি আংশিক ব্যবকলনীয় সমীকরণ যেটি হ্যামিল্টন – জ্যাকোবি – বেলম্যান সমীকরণ হিসেবে পরিচিত যেখানে {\displaystyle J\_{x}^{\ast }={\frac {\partial J^{\ast }}{\partial \mathbf {x} }}=\left[{\frac {\partial J^{\ast }}{\partial x\_{1}}}~~~~{\frac {\partial J^{\ast }}{\partial x\_{2}}}~~~~\dots ~~~~{\frac {\partial J^{\ast }}{\partial x\_{n}}}\right]^{\mathsf {T}}} এবং {\displaystyle J\_{t}^{\ast }={\frac {\partial J^{\ast }}{\partial t}}}. {\displaystyle t}, {\displaystyle \mathbf {x} }, এবং অজ্ঞাতনামা ফাংশন {\displaystyle J\_{x}^{\ast }}এর সাপেক্ষে {\displaystyle \mathbf {u} }এর লঘুকরণ করে প্রাপ্ত ফলাফল হ্যামিল্টন – জ্যাকোবি – বেলম্যান সমীকরণে প্রতিস্থাপন করে আংশিক ব্যবকলনীয় সমীকরণটির সমাধান সীমানা শর্ত {\displaystyle J\left(t\_{1}\right)=b\left(\mathbf {x} (t\_{1}),t\_{1}\right)} হতে পাওয়া যেতে পারে। কার্যক্ষেত্রে, এর জন্য সাধারণত সংখ্যাগত কৌশলের প্রয়োজন পড়ে যাতে করে নিখুঁত অপ্টিমাইজেশন সম্পর্কের বিযুক্ত (ডিসক্রিট) আসন্নায়ন (অপ্টিমাইজেশন) সম্ভবপর হয়। বিকল্পভাবে, এই চলমান প্রক্রিয়াটিকে একটি বিযুক্ত ব্যবস্থার মাধ্যমে অনুমান করা সম্ভব, যা হ্যামিল্টন – জ্যাকোবি – বেলম্যান সমীকরণে প্রাপ্ত অবস্থার সাথে সামঞ্জস্যপূর্ণ একটি পুনরাবৃত্তিয় সম্পর্কের সৃষ্টি করে:

{\displaystyle J\_{k}^{\ast }\left(\mathbf {x} \_{n-k}\right)=\min \_{\mathbf {u} \_{n-k}}\left\{{\hat {f}}\left(\mathbf {x} \_{n-k},\mathbf {u} \_{n-k}\right)+J\_{k-1}^{\ast }\left({\hat {g}}\left(\mathbf {x} \_{n-k},\mathbf {u} \_{n-k}\right)\right)\right\}}

যেখানে {\displaystyle k}-তম ধাপে {\displaystyle n}টি সমভাবে বিস্তৃত বিযুক্ত সময় অন্তরে, {\displaystyle {\hat {f}}}এবং {\displaystyle {\hat {g}}}যথাক্রমে {\displaystyle f} and {\displaystyle \mathbf {g} }এর বিযুক্ত অনুুমানকে নির্দেশ করে। এই ফাংশনাল সমীকরণকে বেলম্যান সমীকরণ বলা হয়ে থাকে, যেটি সমাধান করে অনুকূলকরণ (অপ্টিমাইজেশান) সমীকরণের বিযুক্ত অনুমানের নিখুঁত একটি সমাধান পাওয়া সম্ভব।

**চিত্র ১.** অপ্টিমাল সাবস্ট্রাকচার বৈশিষ্ট ব্যবহার করে গ্রাফের মধ্যে স্বল্পতম দুরত্ব বের করা;একেকটি সরলরেখা এখানে একটি করে এজ (edge) নির্দেশ করছে;দুটি বিন্দুর মাঝে স্বল্পতম দুরত্ব বক্ররেখার মাধ্যমে প্রদর্শিত হয়েছে (যে কোন দুই প্রান্তবিন্দুর মাঝে অন্য পথ থাকতে পারে যাদের দেখানো হয়নি); গাঢ় রেখার মাধ্যমে শুরু হতে শেষ পর্যন্ত ক্ষুদ্রতম দুরত্ব দেখানো হয়েছে।
#### অর্থনৈতিক উদাহরণ: রামজের সন্তোষজনক সঞ্চয়ের সমস্যা

আরও দেখুন: Ramsey–Cass–Koopmans model
অর্থনীতিতে, সাধারণভাবে লক্ষ্য হচ্ছে কোন ডাইনামিক সামাজিক কল্যান ফাংশনের সর্বাধিকরণ (লঘিষ্ঠকরণের পরিবর্তে)। রামজের সমস্যায়, এই ফাংশনটি ব্যয়ের সাথে উপযোগের একটি সম্পর্ক স্থাপন করে। ঢিলেঢালাভাবে বলতে গেলে, পরিকল্পনাকারীকে সমসাময়িক ব্যয় এবং ভবিষ্যত ব্যয়ের মাঝে একটি ভারসাম্য সৃষ্টি করতে হয় (বিনিয়োগের মূলধন যেটি উৎপাদনে ব্যবহৃত হয় তার মাধ্যমে) যেটি অন্তর্বর্তীকালীন বিকল্প নামে পরিচিত। ভবিষ্যত ব্যয় একটি নির্দিষ্ট {\displaystyle \beta \in (0,1)}হারে ছাড়প্রাপ্ত হয়। মূলধনের রুপান্তরের একটি বিযুক্ত অনুমান নিচের সমীকরণের সাহায্যে দেয়া যায়:

{\displaystyle k\_{t+1}={\hat {g}}\left(k\_{t},c\_{t}\right)=f(k\_{t})-c\_{t}}
যেখানে {\displaystyle c} ব্যয়, {\displaystyle k} পুঁজি, এবং {\displaystyle f} একটি উৎপাদন ফাংশন যেটি ইনাদার শর্তসমূহকে পূরণ করে। একটি মূলধন {\displaystyle k\_{0}>0} ধরে নেয়া হয়।

### কম্পিউটার প্রোগ্রামিং

একটি সমস্যাকে ডায়নামিক প্রোগ্রামিং এর মাধ্যমে সমাধানের জন্য অবশ্যই দুটি মূল বৈশিষ্ট্য থাকতে হবে : অপটিমাল সাবস্ট্রাকচার এবং ওভারল্যাপিং সাব-প্রবলেম। যদি এমন হয় যে, ওভারল্যাপ করে না এমন সাব-প্রবলেমগুলোর সর্বোত্তম সমাধানগুলি একত্রিত করে কোনও সমস্যার সমাধান করা যায়, তবে কৌশলটিকে ডায়নামিক প্রোগ্রামিং এর পরিবর্তে "ডিভাইড অ্যান্ড কনকোয়ার" (বিভাজন এবং বিজয়ন) বলা হয়। একারণে মার্জ সর্ট এবং কুইক সর্ট কে ডাইনামিক প্রোগ্রামিং হিসাবে ধরা হয়না।

তথ্যসূত্র
---------

1. 1 2  Cormen, T. H.; Leiserson, C. E.; Rivest, R. L.; Stein, C. (2001), Introduction to Algorithms (2nd ed.), MIT Press & McGraw–Hill, আইএসবিএন ০-২৬২-০৩২৯৩-৭. pp. 344.
2. ↑  Kamien, M. I.; Schwartz, N. L. (১৯৯১)। *Dynamic Optimization: The Calculus of Variations and Optimal Control in Economics and Management* (Second সংস্করণ)। New York: Elsevier। পৃষ্ঠা 261। আইএসবিএন 978-0-444-01609-6।
3. ↑  Kirk, Donald E. (১৯৭০)। *Optimal Control Theory: An Introduction*। Englewood Cliffs, NJ: Prentice-Hall। পৃষ্ঠা 94–95। আইএসবিএন 978-0-13-638098-6।