برنامه‌نویسی پویای دیفرانسیلی

از testwiki
پرش به ناوبری پرش به جستجو

برنامه‌نویسی پویای دیفرانسیلی (DDP)، یک الگوریتم کنترلی بهینه از رده بهینه سازی مسیر است. این الگوریتم در سال (۱۹۹۶) توسط ماینی Mayne[۱] معرفی شد و بعدها در کتاب جاکوبسون (Jacobson )و ماینی مورد تحلیل قرارگرفت[۲]. این الگوریتم از مدل‌های با مرتبه دوی توابع هزینه و حرکت بهره می برد و همگرایی از نوع درجه دومquadratic convergence را به نمایش می گذارد. این رویکرد خیلی نزدیک به روش نیوتون(Newton) قدم به قدم که متعلق به پانتوجا(Pantoja) هست می‌باشد [۳][۴].

مسائل زمان گسسته با کران محدود

مکانیک حرکت:

 الگو:NumBlk

این فرمول تغییرات 𝐱را به صورت تابعی از متغیرکنترلی 𝐮از زمان iتا i+1 نشان می‌دهد. هزینه کل J0 یعنی مجموع هزینه‌های اجرا و هزینه نهایی fاست که وقتی محقق می‌شود که با شروع از وضعیت 𝐱و اعمال دنباله کنترلی 𝐔{𝐮0,𝐮1,𝐮N1} به کران مورد نظر برسیم:

J0(𝐱,𝐔)=i=0N1(𝐱i,𝐮i)+f(𝐱N),

در اینجا 𝐱0𝐱است و𝐱i برای i>0 از معادله الگو:EquationNote بدست می آید. راه حل مسئله کنترل بهینه، مینیمم کردن دنباله کنترلی 𝐔*(𝐱)argmin𝐔J0(𝐱,𝐔). است. بهینه سازی مسیر یعنی پیدا کردن𝐔*(𝐱)برای یک 𝐱خاص به جای تمامی وضعیت‌های اولیهٔ ممکن.

برنامه نویسی پویا

فرض کنید که𝐔iیک دنباله کنترل جزئی𝐔i{𝐮i,𝐮i+1,𝐮N1} باشد : و هزینه رفتن به Jiبه صورت مجموع جزئی هزینه هاازi به Nتعریف شود:

Ji(𝐱,𝐔i)=j=iN1(𝐱j,𝐮j)+f(𝐱N).

هزینه بهینهٔ رفتن یا تابع ارزش در زمان i، هزینه رفتنی است که دنباله کنترلی مینیمم را می‌دهد:

V(𝐱,i)min𝐔iJi(𝐱,𝐔i). با قراردادن V(𝐱,N)f(𝐱N)، اصل برنامه نویسی پویاdynamic programming principle، مینیمم سازی را به جای انجام آن در کل دنباله کنترل¬ها به دنباله¬ای از مینیمم سازی ها روی تنها یک کنترل محدود می کند، که روند پیشرفت آن نسبت به زمان، روبه عقب است:

الگو:NumBlk

این معادله بلمن(Bellman) معادله بلمناست.

برنامه نویسی پویای دیفرانسیلی

DDP، از طریق انجام تکراری یک پاس روبه عقب روی مسیری جزئی انجام می‌شود تا دنباله کنترلی جدید تولید کند و سپس یک پاس رو به جلو برای محاسبه و ارزیابی یک مسیر جزئی جدید انجام می‌شود. ما با پاس رو به عقب شروع می کنیم. اگر

(𝐱,𝐮)+V(𝐟(𝐱,𝐮),i+1)

آرگومانی از عملگر min[] در معادله الگو:EquationNoteباشد، Qرا تغییرات این کمیت درمحدوده iامین جفت (𝐱,𝐮) در نظر می گیریم:

Q(δ𝐱,δ𝐮)(𝐱+δ𝐱,𝐮+δ𝐮)+V(𝐟(𝐱+δ𝐱,𝐮+δ𝐮),i+1)(𝐱,𝐮)V(𝐟(𝐱,𝐮),i+1)

و آن را به مرتبه 2 بسط می دهیم.

الگو:NumBlk

زیرنویس Q در اینجا نوع دیگر از زیرنویسی موریموتو(Morimoto) است که زیرنویس‌ها تفاوت در چیدمان مشتق را نشان می دهند. [۵] با رها کردن اندیس i جهت خوانایی، علامت پرایم گام زمانی بعدی را نشان می‌دهد VV(i+1) ، ضرایب بسط داده شده به صورت زیر هستند:

Q𝐱=𝐱+𝐟𝐱𝖳V'𝐱Q𝐮=𝐮+𝐟𝐮𝖳V'𝐱Q𝐱𝐱=𝐱𝐱+𝐟𝐱𝖳V'𝐱𝐱𝐟𝐱+V𝐱𝐟𝐱𝐱Q𝐮𝐮=𝐮𝐮+𝐟𝐮𝖳V'𝐱𝐱𝐟𝐮+V'𝐱𝐟𝐮𝐮Q𝐮𝐱=𝐮𝐱+𝐟𝐮𝖳V'𝐱𝐱𝐟𝐱+V'𝐱𝐟𝐮𝐱.

جملات آخر در سه معادله آخر ادغانم یک بردار را با یک تانسور نشان می دهند. با کمینه کردن تخمین درجه دوم الگو:EquationNote برحسب δ𝐮داریم:

الگو:NumBlk

با دادن جمله حلقه باز 𝐤=Q𝐮𝐮1Q𝐮 و جمله بازخورد 𝐊=Q𝐮𝐮1Q𝐮𝐱 و قرار دادن نتیجه در الگو:EquationNote اکنون ما مدل درجه دوم ارزش در زمان i را داریم:

ΔV(i)=12Q𝐮Q𝐮𝐮1Q𝐮V𝐱(i)=Q𝐱Q𝐮Q𝐮𝐮1Q𝐮𝐱V𝐱𝐱(i)=Q𝐱𝐱Q𝐱𝐮Q𝐮𝐮1Q𝐮𝐱.

با محاسبه بازگشتی مدل‌های درجه دوم محلی از V(i)و اصلاحات کنترلی {𝐤(i),𝐊(i)} ، از i=N1تا i=1 گذر رو به عقب را تشکیل می‌شود. همانند بالا، ارزش با V(𝐱,N)f(𝐱N) مقداردهی اولیه می‌شود. هر وقت گذر روبه عقب کامل شد، گذر روبه جلو یک مسیر جدیدی را محاسبه می نماید:

𝐱^(1)=𝐱(1)𝐮^(i)=𝐮(i)+𝐤(i)+𝐊(i)(𝐱^(i)𝐱(i))𝐱^(i+1)=𝐟(𝐱^(i),𝐮^(i))

پاس‌های روبه عقب و جلو آنقدر تکرار می‌شوند تا در نهایت همگرا شوند.

قاعده سازی و جستجوی خطی

برنامه‌نویسی پویای دیفرانسیلی الگویتم مرتبه دویی شبیه به روش نیوتون است. بنابراین این روش از گام‌های بزرگی در راستای مینیم کردن بهره می برد و اغلب نیاز به قاعده سازیregularization و/یا جستجوی خطی line-search برای رسیدن همگرایی دارد. [۶] .[۷] قاعده سازی در زمینه DDP، یعنی اطمینان پیدا کردن از اینکه ماتریس Q𝐮𝐮در معادله الگو:EquationNote همیشه مثبت positive definite است. جستجوی خطی در DDP یعنی تغییر مقیاس دادن کنترل حلقه باز 𝐤از طریق ضریب آلفا که به نحوی که 0<α<1 برقرار باشد.

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

منابع

الگو:Reflist

پیوندهای خارجی