Принципите на традиционния динамично програмиране
Динамично програмиране (известен още като "динамично-механични планиране") има специален начин на оптимизиране на решения, специално адаптирани към така наречената "многоетапно" (или "многоетапно") операции. Теоретичните основи на този метод са обсъдени в [2], [3], стр 245 - .. 265, и [4], стр 142-150, взети от същите съответните примери.
Представете си една операция на Q, разделени в няколко последователни стъпки "" или "етапи", като например премахване на твоя елф индустрия в продължение на няколко години; или мостова група на самолети няколко ленти защита; или една и съща последователност на етапите, използвани в устройството за контрол. Някои операции (като по-горе) естествено подразделя на стъпки; в някои разделение трябва да бъде въведена изкуствено, например, ракети насоки за процеса на целевата може и трябва да се раздели на етапи, всеки от които отнема известно време.
Помислете за работата на Q, състояща се от м стъпки (етапи). Нека на ефективността на работата се характеризира с известна степен на W, което за краткост ще наричаме "спечели." Да приемем, че печалбата W zavsyu операция се състои от печалби в отделни стъпки:
Ако W е този имот, той се нарича добавка критерий.
Всеки проблем, мулти-стъпка може да бъде решен по различни начини: или да потърсите веднъж всички елементи на решение за всичко метра, или пък се изгради оптимален контрол, стъпка по стъпка, всяка стъпка оптимизиране на изчисление е само една стъпка. Обикновено на втория метод за оптимизация е по-лесно от първото, особено когато голям брой стъпки. При използване на първия метод на компютърни услуги е по-изгодно, така и в бъдеще ние ще го използвам, но първо да погледнем в традиционния динамично програмиране.
Методът на динамичното програмиране е идеята за постепенно, постепенно оптимизация. Оптимизация-ТА на една стъпка обикновено е по-лесно оптимизиране на цялата про-цесията: тя е по-добре, се оказва, много време за решаване на сравнително проста задача от веднъж - сложно.
На пръв поглед идеята може да изглежда дреболия-обикновен. В действителност, това, което изглежда е проста: ако е трудно оп аеродинамичния операцията като цяло, раздели на няколко етапа. Кейдж-ди подобен ход ще се отдели една малка операция, Opti-рана, че не е трудно. Необходимо е да се избере в тази стъпка е управлението, с ефективността на тази стъпка е мак-максимално мито. Не е ли? Не, ни най-малко. Принципът на динамично програмиране-ТА не означава, че всяка стъпка е оптимизиран по отделно, независимо от останалите. Напротив, съветите стъпка Lenie трябва да бъдат избрани с далновидност, с всичките му последствия в бъдеще. Каква е ползата ако изберем този етап управление, при което ефективността на тази стъпка е максимална, ако тази мярка ще ни лиши от възможността за по-добра печалба за следващите стъпки?
Да предположим, например, планира работни групи промишлени неправителствени предприятия, от които една част е заета от освобождаването на потребителски стоки, а другата произвежда за тях машини. Задачата на операцията - за да получите в продължение на години, така че максималният размер на изхода на потребителски стоки. Да предположим, че планира kapitalovlo-zheniya за първата година. Въз основа на тесните интереси на тази стъпка (на годината), ние ще имаме всички пари да инвестират в производството на потребителски стоки. Но правото да бъде решение от гледна точка на ефективност в работата на ТСЕ-счупване? Очевидно не. Това решение - разточителство, Nedalniy-видни. Като се има предвид в бъдеще, е необходимо да се заделят известна част от средствата, а на производствени машини. От тази обема на производството през първата година, разбира се, ще намалее, но условията за увеличаването му в следващите години.
Друг пример. Да предположим, че в проблема за полагане на жп маршрут от точка А до точка Б, ще заблудят идея веднага запознаят устройство за най-лесният (най-евтината) посока. Какво е използването на спестяване в първата стъпка, ако в бъдеще той ще ни (буквално или в преносен смисъл) да доведе в "блатото"?
Така че, когато се планира операция мулти-стъпка, е необходимо да се избере управлението на всяка стъпка с всичките му последствия в бъдеще е все още предстоящите стъпки. Управление на етапа-тото не е избрана така, че печалбата е на този етап е най-макси-Малин и затова, че е максималният размер на печалба от цялата област и останалите стъпки преди края на плюс.
Това правило обаче има изключение. Сред всички Sha-ДЦК има един, който може да бъде планиран просто, без ог lyadki бъдеще. Какво е стъпка? Очевидно е, че последният! Тази стъпка е единственият, който може да бъде планиран така, че самият той, като такива, е донесъл най-голяма полза.
Ето защо, динамичен процеса на програмиране е най-обичайните, но се развива от края към началото: на първо място планира Ся последно, m-тата стъпка. И плана си, ако не знаем какъв е резултатът от предпоследния, т. Е. Не знам условията в сътрудничество toryh стигаме до последната стъпка?
Тук той започва най-важното нещо. Планиране депозити на последната стъпка, трябва да се правят различни предположения за това, което сложи край на предпоследната (т-1)-ти етап, както и за всяка една от тези хипотези да се намери оптималното условно-ING контрола на м-ия етап ( "условно", защото той се избира въз основа на условието, че предпоследната стъпка против chilsya еди-какво си).
Да предположим, че сме направили и за всеки един от СЗО, може да се предположи предпоследната стъпка известен конвенционален Opti-мал контрол и съответния условен Opti-мал победа в м-тата стъпка. Сега ние можем да оптимизират управлението на предпоследната (т-1) ти етап. Отново направи всички възможни предположения за това, CON chilsya предишния (т -2) ия етап, и за всеки от тези предварителни позиции за намиране на контрол (т-1) тата стъпка, когато съ-тор за спечелване последните две стъпки (от които на m-ти-оп има опростена) максимум. Така ние откриваме за всеки изход (т -2) -ти оптимална стъпка условно управление (т-1) тата стъпка и условно оптимално печалба за последните две стъпки. Освен това, "отстъпва" оптимизиране управление (т -2) ия етап, и така нататък. Е. Докато достигне първия.
Да предположим, че всичко под оптималната контрол и неоптимални печалбите за всички "опашката" на процеса (на всички етапи, от това до края) са известни за нас. Това означава, че ние знаем какво да правим, как да управляват в този ша-Зе и това, което получаваме за него в "опашката", в каквото и състояние ние сме били в етап началото. Сега вече не можем да се изгради напълно оптималното и оптимално управление просто х * и не намират под оптималната, но просто най-добрата отплата W *.
В действителност, да ни уведомите в какво състояние S0 се контролира система (S ръководно тяло) в началото на първата стъпка. След това можете да изберете оптимален контрол x1 * в първата стъпка. прилагането му, и ние ще се промени състоянието на системата за нов S1 *; В това състояние, ние стигаме до втората стъпка. .. Тогава ние също така знаем, условния оптимален контрол на x2 *, която до края на втория етап на системата в състоянието на S2 и т.н. По отношение на оптимална печалба W на цялата операция, като вече е известно: именно въз основа на своя максимум ние управление избра в първата стъпка.
По този начин, по време на динамичен процес многоетапен мето-къща контрол на оптимизация програмиране "премества" два пъти: първия път - от края към началото, при което оптимално управление са условни и условни оптимални ползи за останалите процеса на "опашка"; втори път - от началото до края, когато можем само да "четат" готови съвети и да намерят Bezus-Karlovna оптимален контрол х *, състоящ се от оптималната стъпка контрол x1 на *, x2 * ... * .hm.
Първата стъпка на ограничени оптимизация - много по-трудно и продължително секунда. Вторият етап изисква почти никакво предварително изчисление допълнително.
Общият принцип в основата на решение-нето на всички проблеми на динамично програмиране (често при свързване "принцип на оптималност"): каквото е необходимо за състоянието на системата S преди следващия ша-г, за да изберете управление на този етап, така че печалбата на този стъпка плюс оптимална печалба при всички следващи стъпки е най-високата.
Етапи на решаване на проблеми динамични програмиране:
1. Избор на параметри (променливите на състоянието), характеризиращи S-проводящ състояние на контролираната система пред всяка стъпка.
2. взривят експлоатация на етапи (стъпки).
3. Определяне на набор от стъпки XI контроли за всяка стъпка, както и ограниченията, наложени върху тях.
4. Определете кой носи награда на аз-ти доведени съвети Lenie ХI, ако преди тази система е в състояние на S, който е Vo лед сб "функция стойност" ..:
5. Определяне на броя на състоянието на системата S на под XI влиянието на контрол върху аз-ти етап: тя се движи в нова държава
6. Запишете основната повтарящи уравнението на динамично програмиране небе, експресиращи оптимално условно-ти печалба Wi (S) (започвайки и ти етап на края) през вече известна функция Wi + L (S):
Това съответства на получи оптимално условно-ин систематичен начин за аз-ти етап XI (S) (да се подчертае, че в известен вече функцията Wi + 1 (S) вместо S трябва да бъде заменен променено състояние.
7. Изработване условно оптимизиране последната (m -та) етап, чудейки гама от състояния S, от която е възможно в един етап да достигне крайното състояние, изчисляване за всяко условие оптимално печалба с формула
и намиране на оптимален контрол условно х (S), за което се достига този максимум.
8. Извършване на ограничено оптимизация (т-1) -ти, (т -2) -ти и т.н. Стъпки съгласно формула (3.3) чрез определяне на това аз = (М-1) (m -2). и за всеки от етапите посочва оптималното условие-Ing управление XI (S). където максимум се достига.
Имайте предвид, че ако състоянието на системата в началния момент, ние знаем (и това обикновено е така), а след това първата стъпка варира ДДС състояние на системата не е необходимо - просто намери оптималната печеливша нето за първоначалното състояние S0. Това е най-оптимално печалба за целия период на експлоатация
9. Извършване на абсолютна оптимизация контрол, "Чи-топене" препоръки на всеки етап. Mark намери оптимално управление в първата стъпка = x1 * x1 * (S0); промяна на статута с формула (3.2); за повторно наи dennogo в състояние да намери най-добрия контрол във втория етап, x2 *, и така нататък. д. до края.
За решаването на динамичните програмни проблеми, ние прилагаме Excel Services "Търсене решение", което ще позволи многократно намаляване на разходите за труд в сравнение с традиционните технологии.