Карп алгоритмі - Held–Karp algorithm

The Карп алгоритмі, деп те аталады Bellman – Held – Karp алгоритмі, Бұл динамикалық бағдарламалау бойынша 1962 жылы ұсынылған алгоритм Bellman[1] және Холд және Карп[2] шешу үшін Саяхатшыларды сату проблемасы (TSP). TSP - кеңейту Гамильтон схемасы. Мәселені келесідей сипаттауға болады: елдегі N қалалар бойынша туристік саяхатты табу (баратын қалаларға қол жетімді деп санағанда), тур (а) әр қалаға бір рет бару керек, (б) бастапқы нүктеге оралу және (с) ) минималды арақашықтық болуы керек.[3]Жалпы алғанда, TSP симметриялы саяхатшылар проблемасы (sTSP), асимметриялық саяхатшылар проблемалары (aTSP) және көп саяхатшылар сатушылары проблемалары (mTSP) болып жіктеледі.[дәйексөз қажет ]

Графикалық модель

sTSP: Рұқсат етіңіз V = {v1 ,..., vn } қалалар жиынтығы болу, E = {(р, с) | р, сV} жиек жиынтығы болуы керек және г.rs = г.ср шетпен байланысты шығын өлшемі болу (р, с) ∈ E.

aTSP: Егер г.rsг.сер кем дегенде бір (р, ссодан кейін sTSP aTSP болады, ал sTSP-ді an көмегімен анықтауға болады бағытталмаған граф, aTSP а көмегімен анықталады бағытталған граф.

mTSP: Multi-TSP проблемасында бір қаладан басталатын бірнеше сатушы бар; Бастапқы қаладан басқа әр қалаға дәл бір сатушы баруы керек, ал олардың турларының ұзақтығын азайту керек. MTSP-ге стандартты TSP модификациясы ретінде қарауға болады, онда бастапқы қалаға қайта баруға болады. MTSP әдетте босаңсыған ретінде қарастырылады көлік маршрутының проблемасы.

Алгоритм

Сипаттама

Төменде динамикалық бағдарламалау процедурасы келтірілген:

TSP үшін оңтайландыру қасиеті бар:

   Минималды арақашықтықтың әр подпатасы минималды арақашықтықтың өзі болып табылады.

Барлық кіші проблемалардан бастап шешімдерін есептеңіз. Шешімді есептеу үшін жоғарыда келтірілген рекурсивті теңдеулерді қолдану арқылы кішігірім мәселелерді шешу қажет болған кезде, есептелген шешімдерді іздеңіз, ең аз қашықтықтағы турды есептеу үшін бірінші түйінді құру үшін соңғы теңдеуді қолданыңыз және басқа түйіндер үшін қайталаңыз. мәселе, біз қандай ішкі проблемаларды шешу керектігін біле алмаймыз, сондықтан олардың барлығын шешеміз.

Рекурсивті тұжырымдау

Қалалардың нөмірлерін 1, 2,. . . , N және біз 1 қаладан бастаймыз, ал қала арасындағы қашықтық мен және қала j болып табылады г.i, j. Ішкі жиындарды қарастырыңыз S ⊆ {2, . . . , Nқалалардың} және, үшін cS, рұқсат етіңіз Д.(S, c) барлық қалаларды аралап, 1 қаладан бастап ең аз қашықтық болуы керек S және қалада аяқтау c.

Бірінші кезең: егер S = {c}, содан кейін Д.(S, c) = г.1,c. Әйтпесе: Д.(S, c) = минхSc (Д.(Sc, х) + г.х,c ).

Екінші кезең: барлық қалаларға толық саяхат жасау үшін минималды арақашықтықМ = минc∈ {2, ...,N} (Д.({2, . . . , N}, c) + г.c,1 )

Экскурсия n1 , . . ., nN ол қанағаттандырған кезде ең аз қашықтықта болады М = Д.({2, . . . , N}, nN ) + г.nN,1 .

Мысал[4]

Қашықтық матрицасы:

Функциялар сипаттамасы:

  • g (x, S) - 1-ден бастап, min құны x шыңында аяқталып, S жиынындағы шыңдарды дәл бір рет өткізеді
  • cxy - жиек құны x-ден y-ге дейін аяқталады
  • p (x, S) - S жиынынан x-ге екіншіден соңғыға дейінгі шың, соңында TSP жолын салу үшін қолданылады.


к = 0, нөлдік жиын:

∅ жиынтығы:

       g (2, ∅) = c21 = 1 г (3, ∅) = с31 = 15 г (4, ∅) = с41 = 6

к = 1, 1 элемент жиынын қарастырыңыз:

{2} жиынтығы:

       g (3, {2}) = c32 + g (2, ∅) = c32 + c21 = 7 + 1 = 8 p (3, {2}) = 2 g (4, {2}) = c42 + g (2, ∅) = c42 + c21 = 3 + 1 = 4 p (4, {2}) = 2

{3} жиынтығы:

       g (2, {3}) = c23 + g (3, ∅) = c23 + c31 = 6 + 15 = 21 p (2, {3}) = 3 g (4, {3}) = c43 + g (3, ∅) = c43 + c31 = 12 + 15 = 27 p (4, {3}) = 3

{4} жиынтығы:

       g (2, {4}) = c24 + g (4, ∅) = c24 + c41 = 4 + 6 = 10 p (2, {4}) = 4 g (3, {4}) = c34 + g (4, ∅) = c34 + c41 = 8 + 6 = 14 p (3, {4}) = 4

к = 2, 2 элементтің жиынтығын қарастырыңыз:

{2,3} жиынтығы:

         g (4, {2,3}) = min {c42 + g (2, {3}), б43 + g (3, {2})} = min {3 + 21, 12 + 8} = min {24, 20} = 20 p (4, {2,3}) = 3

{2,4} жиынтығы:

         g (3, {2,4}) = min {c32 + g (2, {4}), б34 + g (4, {2})} = min {7 + 10, 8 + 4} = min {17, 12} = 12 p (3, {2,4}) = 4

{3,4} жиынтығы:

          g (2, {3,4}) = min {c23 + g (3, {4}), б24 + g (4, {3})} = min {6 + 14, 4 + 27} = min {20, 31} = 20 p (2, {3,4}) = 3

Оңтайлы турдың ұзақтығы:

 f = g (1, {2,3,4}) = min {c12 + g (2, {3,4}), б13 + g (3, {2,4}), б14 + g (4, {2,3})} = мин {2 + 20, 9 + 12, 10 + 20} = мин {22, 21, 30} = 21

1 түйіннің ізашары: p (1, {2,3,4}) = 3

3 түйіннің ізашары: p (3, {2,4}) = 4

4 түйіннің ізашары: p (4, {2}) = 2

2 түйіннің ізашары: p (2, {}) = 1

Демек, оңтайлы TSP туры 1 → 2 → 4 → 3 → 1 арқылы беріледі.

Псевдокод[5]

функциясы алгоритмі TSP (G, n) болып табылады    үшін k: = 2-ден n-ге дейін істеу        C ({k}, k): = d1, к    үшін аяқтау    үшін s: = 2 дейін n − 1 істеу        барлығына S ⊆ {2,. . . , n}, | S | = с істеу            барлығына k ∈ S істеу                C (S, k): = минm ≠ k, m∈S [C (S  {k}, m) + dм, к]            үшін аяқтау        үшін аяқтау    үшін аяқтау    таңдау: = минk ≠ 1 [C ({2, 3,.., N}, k) + dk, 1]    қайту (таңдау)соңғы функция

Күрделілік

Толық санау

Бұл кез-келген қаладан басталатын күш қолдану әдісі барлық мүмкіндікті келтіреді ауыстыру баруға болатын қалалардың әрқайсысының қашықтығын тауып, ең аз арақашықтықтың бірін таңдаңыз. Барлығын қамтитын мүмкін бағыттардың жалпы саны қалалар ретінде берілуі мүмкін және сәйкесінше aTSP және sTSP-де.[6]

Динамикалық бағдарламалау тәсілі

Бұл алгоритм толық санауға қарағанда жылдамырақ (бірақ экспоненциалды уақытты) орындауды ұсынады, ал кемшілігі көп кеңістікті қолданады: бұл алгоритмнің уақыттың ең күрделі күрделілігі және кеңістік .

Уақыт: есептеу кезінде қолданылатын негізгі операциялар толықтырулар мен салыстырулар болып табылады. Бірінші фазадағы әрқайсысының саны келесі арқылы беріледі

және олардың әрқайсысының екінші фазада пайда болу саны

Ғарыш:

Көлемнің кіші жиынтықтары үшін минималды шығындарды есептеуді байқай отырып, кеңістіктің күрделілігін аздап жақсартуға болады с тек көлемді жиындарды қажет етеді s-1.

Көлемнің тек ішкі жиынтықтарын сақтау арқылы s-1 және с алгоритмнің кез-келген нүктесінде кеңістіктің күрделілігі төмендейді:

Байланысты алгоритмдер

TSP шешудің нақты алгоритмі

Динамикалық бағдарламалаудан басқа, Сызықтық бағдарламалау және тармақталған алгоритм - бұл TSP шеше алатын дәл алгоритмдер. Сызықтық бағдарламалау ішіндегі кесу жазықтығы әдісіне қолданылады бүтін программалау, яғни модельдегі екі шектеуден пайда болған ЖТ-ны шешу, содан кейін біртіндеп оңтайлы шешімге жинақталу үшін теңсіздік шектеуін қосу арқылы кесу жазықтығын іздеу. Адамдар кесу жазықтығын табу үшін осы әдісті қолданғанда, олар көбінесе тәжірибеге тәуелді болады. Сондықтан бұл әдіс сирек жалпы әдіс ретінде қарастырылады.

Тармақталған алгоритм - бұл ауқымды есепті шешу үшін жақсы болмаса да, кеңінен қолданылатын іздеу алгоритмі. Ол мүмкіндігінше тезірек оңтайлы шешім табу үшін кеңістіктегі күй ағашынан оңтайлы шешім тармағын іздей алатындай етіп тиімді шектейтін шекара арқылы іздеу процесін басқарады. Бұл алгоритмнің шешуші мәні - шектеу шекарасын таңдау. Әр түрлі шектеулі шекаралар әр түрлі тармақталған алгоритмдерді құра алады.

TSP шешудің шамамен алгоритмі

Мәселені шешу үшін нақты алгоритмді қолдану өте шектеулі болғандықтан, біз көбінесе жуықталған алгоритмді немесе эвристикалық алгоритмді қолданамыз. Алгоритм нәтижесін C / C * ≤ ε арқылы бағалауға болады. C - шамамен алгоритмнен алынған жалпы жүру қашықтығы; C * - оңтайлы жүру қашықтығы; ε - ең нашар жағдайда шамамен алынған ерітіндінің жалпы жүру қашықтығының оңтайлы шешімге қатынасының жоғарғы шегі. Ε> 1.0 мәні. Ол 1.0-ге жақындаған сайын алгоритм соғұрлым жақсы болады. Бұл алгоритмдерге мыналар жатады: Интерполяция алгоритмі, Жақын көршінің алгоритмі, Clark & ​​Wright алгоритмі, қосарланған ағаш алгоритмі, Christofides алгоритмі, Гибридті алгоритм, Ықтимал алгоритм.

Әдебиеттер тізімі

  1. ^ ‘Саяхатшылардың проблемаларын динамикалық бағдарламалау әдісі’, Ричард Белман, Доц. Журналы Есептеу техникасы 9. 1962.
  2. ^ Майкл Хельд және Ричард М. Карп, 'мәселелерді реттеуге арналған динамикалық бағдарламалау тәсілі' Өндірістік және қолданбалы математика қоғамына арналған журнал 1:10. 1962
  3. ^ http://www.cs.man.ac.uk/~david/algorithms/graphs.pdf
  4. ^ http://www.mafy.lut.fi/study/DiscreteOpt/tspdp.pdf
  5. ^ http://www.lsi.upc.edu/~mjserna/docencia/algofib/P07/dynprog.pdf[тұрақты өлі сілтеме ]
  6. ^ Гутин, Григорий және Авраам П. Пуннен, редакция. Сатушы проблемасы және оның вариациялары. Том. 12. Springer, 2002 ж.