1354_lecture3_ver1 HarvardUniversity CS50_AI101 20 — Transcript
Full transcript
- 0:04[музика]
- 0:23Вітаю з поверненням на курс вступ до
- 0:25штучного інтелекту з python ми вже
- 0:27розглянули різні типи завдань ми
- 0:29розглянули класичні завдання пошуку
- 0:31дістатися від початкового стану до цілі
- 0:34знаходячи оптимальний шлях ми розглянули
- 0:37змагальний Пошук де був ігровий Агент Що
- 0:39намагається зробити найкращий хід
- 0:41завдання на основі знань де ми
- 0:43використовували логіку та висновки щоби
- 0:46мати можливість розуміти і робити
- 0:47додаткові висновки ймовірність моделі де
- 0:50ми можемо не мати певної інформації про
- 0:52світ але використовуємо знання про
- 0:54імовірності які у нас є щоби робити
- 0:56висновки Сьогодні ми звернемо увагу на
- 0:59іншу категорію за завдань завдання
- 1:00оптимізації у яких оптимізація полягає у
- 1:03виборі найкращого варіанта з набору
- 1:05можливих варіантів ми вже бачили
- 1:08оптимізацію наприклад в іграх де ми
- 1:10створювали штучний інтелект що вибирає
- 1:12найкращий хід з набору можливих ходів а
- 1:15сьогодні розглянемо категорію типів
- 1:17завдань і алгоритмів для їх вирішення
- 1:20які можуть бути використані для
- 1:22вирішення ширшого кола потенційних
- 1:24завдань оптимізації розглянемо перший
- 1:26алгоритм відомий як локальний пошук він
- 1:30відрізняється від алгоритмів пошуку які
- 1:32ми бачили раніше ті алгоритми пошуку
- 1:34наприклад пошуку у ширину або пошук a
- 1:36зірочка зазвичай підтримують купу різних
- 1:39шляхів які ми одночасно досліджуємо і ми
- 1:42розглядаємо купу різних шляхів одночасно
- 1:45намагаючись знайти свій шлях до рішення
- 1:47а в локальному пошуку алгоритм
- 1:49працюватиме з одним вузлом і
- 1:50розглядатиме один стан ми як правило
- 1:53запускаємо алгоритм підтримуючи цей
- 1:55єдиний вузол а потім переходимо до
- 1:58одного з сусідних вузлів протягом усього
- 2:00процесу
- 2:02пошуку це корисно в контекстах не схожих
- 2:05на завдання що ми бачили раніше як от
- 2:07проходження лабіринту коли ми шукали
- 2:09шлях від початкового стану до цілі ідучи
- 2:12певним шляхом локальний пошук найчастіше
- 2:15застосовують тоді коли нам зовсім
- 2:17неважливий шлях а цікавить нас лише
- 2:19рішення у випадку з лабіринтом рішення
- 2:22завжди було очевидним ви можете вказати
- 2:25на нього ви знаєте
- 2:27ціль а реальне питання тому Яким шляхом
- 2:31до нього дістатися локальний пошук
- 2:33згодиться в тих випадках коли з'ясування
- 2:35того яким є рішення якою є ціль суть
- 2:37завдання наведу приклад такого завдання
- 2:40розглянемо два типи будівель житлові
- 2:42будинки та лікарні ціль полягає в тому
- 2:45щоб у світі відформатованому у вигляді
- 2:48сітки де в нас є купа будинків тут отут
- 2:50два Там ми спробуємо знайти спосіб
- 2:53розмістити дві лікарні на цій карті
- 2:56наприклад лікарню тут і лікарню там
- 2:59завдання полягає в тому щоб розмістити
- 3:02дві лікарні на карті Однак не
- 3:04випадково завдання в цьому випадку
- 3:06полягає в тому щоби мінімізувати
- 3:08Відстань від будь-якого будинку до
- 3:11лікарні ви можете уявити яка відстань
- 3:13від кожного будинку до найближчого
- 3:15лікарні Існує кілька способів обчислити
- 3:18цю відстань один із них полягає у
- 3:20використанні евристики а саме
- 3:22мангетенської відстані тобто уявлення
- 3:25про те наскільки рядків і стовпчиків
- 3:27треба переміститися по сідтці щоб
- 3:29дістатися лікарні якщо взяти кожен з цих
- 3:31чотирьох будинків і з'ясувати наскільки
- 3:34близько Він стоїть до найближчої лікарні
- 3:36то вийде наступне Цей будинок за три
- 3:38комірки від лікарні Цей будинок за шість
- 3:40а ці два будинки за чотири якщо скласти
- 3:43всі цифри разом отримаємо загальну
- 3:46вартість шляху 17 Отже для цієї
- 3:48конкретної конфігурації лікарень лікарні
- 3:50тут і тут цей стан має вартість
- 3:5417 мета цього завдання для вирішення
- 3:57якого ми застосовуємо алгоритм пошуку
- 3:59полягає в тому щоб з'ясувати Чи можете
- 4:02ви знайти спосіб мінімізувати цю
- 4:04вартість мінімізувати загальну суму якщо
- 4:07підсумувати всі відстані від усіх
- 4:09будинків до найближчої лікарні як ми
- 4:11можемо мінімізувати цю кінцеву вартість
- 4:14якщо подумати про це завдання
- 4:15абстрагуючись від цієї конкретної
- 4:17проблеми і подумати про подібні завдання
- 4:19загалом то їх часто можна сформулювати
- 4:22думаючи про них як про ландшафт простору
- 4:24станів на діаграмі ландшафту простору
- 4:26станів кожна вертикальна смуга
- 4:28представляє певну стан у якому може
- 4:30перебувати наш світ наприклад кожна
- 4:33вертикальна смуга представляє певну
- 4:35конфігурацію двох
- 4:37лікарень висота стовпчика як правило
- 4:40буде представляти функцію цього стану
- 4:43значення цього стану Можливо в цьому
- 4:46випадку висота вертикальної смуги
- 4:48відображає вартість цієї конкретної
- 4:50конфігурації лікарень з точки зору Суми
- 4:52всіх відстаней від усіх будинків до
- 4:55найближчої
- 4:57лікарні і взагалі коли йдеться про
- 5:00ландшафт простору станів можна робити
- 5:02одне з двох ми можемо намагатися
- 5:05максимізувати значення функції
- 5:07намагатися знайти глобальний максимум
- 5:09цього ландшафту простору станів єдиний
- 5:12стан значення Якого вище за всі інші
- 5:15стани з яких можна вибирати коли ми
- 5:18шукаємо глобальний максимум ми будемо
- 5:20називати функцію яку намагаємося
- 5:22оптимізувати цільовою функцією функцією
- 5:25яка вимірює наскільки хороший
- 5:28стан ми можемо взяти будь-який стан
- 5:31передати його в цільову функцію і
- 5:33отримати значення того наскільки він
- 5:35хороший наша мета полягає в тому щоби
- 5:37знайти стан який має найвище можливе
- 5:40значення для цієї цільової функції
- 5:42еквівалентною але зворотною проблемою є
- 5:45пошук глобального мінімуму стану який
- 5:47має найнижче значення зпоміж усіх
- 5:50можливих після того як Ви передали його
- 5:52у функцію коли ми шукаємо глобальней
- 5:54мінімум ми називаємо функцію яку
- 5:56обчислюємо вартісною функцією як правило
- 6:00кожен стан має певну вартість чи то
- 6:02грошову чи то часову чи у випадку з
- 6:04будинками та лікарнями вартість у
- 6:06вигляді відстані тобто наскільки далеко
- 6:09кожен Будинок розташований від
- 6:11лікарні Ми хочемо мінімізувати вартість
- 6:14знайти стан який має найнижче можливе
- 6:16значення цієї
- 6:18вартості Отже це загальні типи ідей які
- 6:21можна розглядати за допомогою ландшафту
- 6:23простору станів шукаючи глобальний
- 6:25максимум або глобальний мінімум Як же це
- 6:28зробити згадаємо що в локальному пошуку
- 6:31ми зазвичай працюємо за цим алгоритмом
- 6:34підтримуючи лише один Поточний стан
- 6:36представлений у середині вузла можливо
- 6:38всередині структури даних де ми
- 6:40відстежуємо поточне місце перебування а
- 6:43потім ми збираємося перейти з цього
- 6:45стану до одного з сусідніх станів які в
- 6:48цьому випадку представлені в
- 6:50одновимірному просторі станом що
- 6:52розташований ліорич або праворуч але для
- 6:55будь-якого іншого завдання ви можете
- 6:56визначити що означає бути сусідом у
- 6:59випадку з лікарнями сусіднім може бути
- 7:01стан в якому перемістила одну лікарню на
- 7:03один простір ліворуч або праворуч вгору
- 7:06або вниз до стану близького до поточного
- 7:09Але дещо відмінного як наслідок він може
- 7:12мати дещо інше значення з точки зору
- 7:14цільової або вартісної
- 7:16функції це буде нашою загальною
- 7:18стратегією в локальному пошуку мати
- 7:20можливість узяти стан зберігаючи
- 7:22поточний вузол і рухатися туди куди ми
- 7:25дивимося в ландшафті простору станів
- 7:27щоби знайти глобальний максимум або
- 7:29глобальний мінімум мабуть найпростіший
- 7:31алгоритм який можна використати для
- 7:34реалізації ідеї локального пошуку - це
- 7:36алгоритм сходження на вершину яка
- 7:38основна ідея алгоритму сходження на
- 7:40вершину скажімо я намагаюся
- 7:41максимізувати значення стану шукаю де
- 7:44глобальний максимум почну зі свого стану
- 7:47як правило під час сходження на вершину
- 7:49я розглядаю сусідів цього стану з цього
- 7:52стану я можу піти ліворуч або праворуч
- 7:54цей сусід вищий А цей нижчий у сходженні
- 7:58на вершину якщо я хочу зувати значення я
- 8:00обираю найвищу вершину між станами лівим
- 8:03і правим цей стан вищий тому Я продовжую
- 8:06рухатися вперед щоб розглянути його і
- 8:09потім повторюю процес безперервно
- 8:11дивлячись на всіх сусідів і вибираючи
- 8:13найвищого дивлячись на сусідів і
- 8:15вибираючи найвищого Доки не дійду до ось
- 8:18такої точки де я дивлюся на обох сусідів
- 8:20і вони обидва мають менше значення ніж
- 8:23я цей Поточний стан має значення вище
- 8:27ніж у будь-якого сусіда на цьому моменті
- 8:29алгоритм закінчився А я можу сказати
- 8:32рішення
- 8:33знайдено те саме працює абсолютно
- 8:35протилежно при спробі знайти глобальний
- 8:37мінімум але алгоритм той самий якщо я
- 8:40хочу знайти глобальний мінімум а
- 8:41Поточний стан починається тут я буду
- 8:43дивитися на сусідів вибирати найнижче
- 8:45можливе значення поки не знайду
- 8:47глобальний мінімум точку в якій коли я
- 8:50дивлюся на обох сусідів Кожен з яких має
- 8:52більше значення і намагаюся мінімізувати
- 8:55загальну вартість або значення яке я
- 8:57отримую в результаті обчислення
- 8:59вартісної
- 9:01функції Отже сформулюємо цю графічну
- 9:04ідею у псевдокоді псевдокод для
- 9:06сходження на вершину може мати Такий
- 9:08вигляд Ми визначаємо функцію Hill Climb
- 9:11яка бере за вхідні дані проблему яку ми
- 9:13вирішуємо І взагалі починаємо з
- 9:16початкового стану я почну зі зміною
- 9:18carent яка відстежує початковий стан
- 9:20наприклад початкову конфігурацію
- 9:22лікарень У деяких завданнях є початковий
- 9:25стан тобто якесь місце з якого ви
- 9:27починаєте У деяких ні але тоді ми можемо
- 9:30випадково згенерувати початковий стан
- 9:32вибравши навмання два місця для лікарень
- 9:34і будемо з'ясовувати як поліпшити
- 9:37ситуацію але цей початковий стан ми
- 9:39збережемо всередині змінної Кан і тепер
- 9:42починається цикл повторюваний процес
- 9:45який ми будемо виконувати знову і знову
- 9:47поки алгоритм не завершиться Що ж ми
- 9:49будемо робити по-перше з'ясуємо всіх
- 9:51сусідів поточного стану які в мого стану
- 9:54є сусіди зважаємо на визначення терміну
- 9:57сусід я ви беру сусіда з найбільшим
- 10:00значенням і збережу його у змінній під
- 10:02назвою neighbor щоби відстежувати сусіда
- 10:06з найбільшим значенням це коли я
- 10:08намагаюся максимізувати значення Якщо ж
- 10:10потрібно мінімізувати значення виберіть
- 10:12сусіда з найнижчим можливим значенням
- 10:14але ці ідеї фундаментально взаємозамінні
- 10:17Цілком можливо що в деяких випадках може
- 10:19бути кілька сусідів Кожен з яких має
- 10:21однаково високе або однаково низьке
- 10:24значення у такому разі можна випадковим
- 10:26чином вибрати одного і просто зберегти
- 10:28його у змінній neighbor і потім ключове
- 10:32питання чи цей сусід кращий за мій
- 10:34Поточний
- 10:36стан і якщо найкращий сусід якого я зміг
- 10:40знайти не кращий за мій Поточний стан
- 10:43тоді алгоритм закінчився і я повернуся
- 10:46до поточного стану якщо жоден з моїх
- 10:48сусідів не кращий тоді я лишуся на місці
- 10:51така загальна логіка алгоритму сходження
- 10:53на вершину але якщо сусід кращий тоді я
- 10:56можу переміститися до нього тобто карень
- 10:59дорівнює neighbр ідея полягає в тому що
- 11:01якщо я перебуваю в поточному стані і
- 11:03бачу сусіда Кращого за мене тоді я
- 11:05перейду до нього а потім повторюватиму
- 11:07процес постійно рухаючись до кращого
- 11:09сусіда Доки не досягну точки в якій
- 11:12жоден сусід не буде кращим тоді можемо
- 11:15сказати що алгоритм завершився
- 11:17подивімося на реальний приклад з
- 11:18будинками і лікарнями якщо ми розмістимо
- 11:21лікарні в цих місцях тоді їхня загальна
- 11:23вартість дорівнює 17 якщо ми збираємося
- 11:26реалізувати алгоритм сходження на
- 11:28вершину тоді потрібно визначити що
- 11:30означає взяти цю конфігурацію лікарень
- 11:32цей конкретний стан і отримати сусіда
- 11:34цього стану що в цьому випадку означає
- 11:37сусід візьмемо лікарню і пересунемо її
- 11:40на клітинку ліворуч праворуч вгору або
- 11:42вниз тоді в нас буде шість можливих
- 11:44сусідів цієї конкретної
- 11:47конфігурації можна взяти одну лікарню і
- 11:49перемістити її в будь-який із трьох
- 11:51квадратів або взяти другу лікарню і
- 11:53перемістити її в будь-який із трьох
- 11:55квадратів і в кожному з них з'явиться
- 11:58сусід що ж мені робити ось розташування
- 12:00і відстані між кожним будинком і
- 12:02найближчою лікарнею я розгляну всіх
- 12:06сусідів і подивлюся чи може хтось із них
- 12:09запропонувати кращу вартість ніж 17
- 12:11Виявляється що є кілька способів зробити
- 12:13це і неважливо якщо ми випадково
- 12:16виберемо серед них найкращий один з
- 12:18таких можливих способів це поглянути на
- 12:21цю лікарню і розглянути напрямки в яких
- 12:24вона може рухатися а цю лишимо незмінною
- 12:27беремо цю лікарню і переміщаємо
- 12:29на квадрат угору Це нам не дуже допоможе
- 12:31вона стане ближчою до цього будинку але
- 12:33більш віддаленою від цього плюс нічого
- 12:35не зміниться для цих двох будинків Але
- 12:37якщо ми візьмемо цю лікарню і
- 12:39перемістимо її на один квадрат униз
- 12:42виникне протилежна проблема вона
- 12:44віддаляється від верхнього будинку і
- 12:46наближається до нижнього а насправді
- 12:48потрібно перемістити лікарню на один
- 12:49квадрат ліворуч перемістивши її на один
- 12:52квадрат ліворуч ми наблизимо її до обох
- 12:54будинків праворуч нічого не змінюючи для
- 12:57будинків ліворуч для них ця лікарня все
- 13:00одно ближча тому на них це не вплине ми
- 13:02можемо поліпшити ситуацію обравши сусіда
- 13:05який приведе до зменшення загальної
- 13:07вартості зробити Це можна перемістивши
- 13:10із нинішнього стану до сусіда просто
- 13:13взявши лікарню і перемістивши її на цей
- 13:16момент з цією лікарнею не так вже і
- 13:18багато можна зробити але є інші
- 13:20оптимізації які ми можемо зробити інші
- 13:22сусіди до яких можна переміститися і які
- 13:25отримають краще значення візьмемо цю
- 13:27лікарню ви бачи що вона розташована вище
- 13:30ніж обидва Ці будинки можна поліпшити
- 13:33ситуацію перемістивши її на один квадрат
- 13:35униз так щоб ми знизили вартість до 13
- 13:38для цієї конкретної конфігурації ми
- 13:41можемо зробити ще краще Якщо перемістимо
- 13:43її на одну клітинку ліворуч тепер ми
- 13:46маємо вартість 11 тому що Цей будинок
- 13:48розташований на відстані однієї клітини
- 13:51від лікарні а цей на відстані чотирьох
- 13:53цей на відстані трьох і цей теж трьох
- 13:56Отже ми досягли набагато кращої вартості
- 13:58ніж на початку із початковою
- 14:00конфігурацією просто взявши кожен стан і
- 14:02поставивши собі питання Чи можемо ми
- 14:05зробити краще роблячи невеличкі зміни
- 14:07переходячи до одного сусіда до іншого і
- 14:10так далі ми можемо побачити що на цьому
- 14:13етапі алгоритм може
- 14:14завершитися немає жодного сусіда до
- 14:17якого можна прийти щоби поліпшити
- 14:19ситуацію і отримати вартість меншу за 11
- 14:22бо якщо ми візьмемо цю лікарню і
- 14:24перенесемо її вгору або праворуч вона
- 14:27стане ще далі якщо перенесе її вниз це
- 14:29не змінить ситуації вона стане далі від
- 14:32цього будинку але ближче до цього так
- 14:34само і з цією лікарнею будь-який сусіду
- 14:37якого ми її перемістимо вгору ліворуч
- 14:39вниз чи праворуч або віддалить її від
- 14:41будинків і збільшить вартість або це не
- 14:43матиме жодного впливу на вартість
- 14:46питання яке ми можемо зараз поставити Чи
- 14:49це найкраще що ми могли зробити Чи це
- 14:51найкраще розміщення лікарень яке ми
- 14:54могли б мати Виявляється що відповідь ні
- 14:56бо є кращий спосіб розмістити Ліка
- 14:58лікарні є навіть кілька способів як це
- 15:00зробити один із них узяти цю лікарню і
- 15:03перемістити її по діагоналі на цей
- 15:05квадрат який не входить у визначення
- 15:08сусід ми могли рухатися тільки ліворуч
- 15:11праворуч вгору або вниз але так явно
- 15:13краще тепер загальна вартість дев'ять
- 15:16тепер лікарня ближча до обох будинків як
- 15:19наслідок загальна вартість менша Але ми
- 15:21не змогли знайти цей стан бо для цього
- 15:23нам довелося пройти через стан який
- 15:25нічим не кращий за той в якому ми
- 15:28перебували раніше це обмеження може
- 15:30виникнути у вас коли ви намагаєтеся
- 15:32реалізувати алгоритм сходження на
- 15:34вершину воно полягає в тому що він не
- 15:37завжди може дати оптимальне рішення якщо
- 15:39ми намагаємося максимізувати значення
- 15:41тобто знайти глобальний максимум може
- 15:43виникнути побоювання що ми можемо
- 15:45застрягти в одному з локальних
- 15:47максимумів він виділений синім кольором
- 15:50локальний максимум - це будь-який стан
- 15:52значення Якого вище ніж у сусіда якщо ми
- 15:55опинимося в одному з цих двох станів
- 15:57намагаючись максимізувати значення стану
- 15:59ми не будемо робити жодних змін Не
- 16:02будемо рухатися праворуч або ліворуч бо
- 16:04там ще
- 16:05гірше Але все-таки ми не знайшли
- 16:07глобального оптимуму ми не зробили все
- 16:10що могли так само і у випадку з
- 16:13лікарнями Ми намагаємося знайти
- 16:14глобальний мінімум тобто значення яке
- 16:17буде нижчим ніж у всіх інших але ми
- 16:19можемо застрягти на одному з локальних
- 16:21мінімумів у будь-якому з цих станів чиє
- 16:24значення нижче ніж у всіх його сусідів
- 16:27але все ще не настільки ке як локальний
- 16:29мінімум висновок полягає в тому що не
- 16:31завжди коли ми запускаємо безхідрісний
- 16:34алгоритм сходження на вершину ми
- 16:36знайдемо оптимальне рішення щось може
- 16:38піти не так наприклад якщо почнемо
- 16:40звідси і спробуємо максимізувати
- 16:43значення ми перейдемо до найвищого
- 16:45сусіда перейдемо до найвищого сусіда
- 16:47перейдемо до найвищого сусіда і
- 16:49зупинимося так і не зрозумівши що є
- 16:52навіть кращий стан до якого ми могли б
- 16:54дійти інші проблеми які ви можете уявити
- 16:57просто поглянувши на ландшафт простору
- 16:59станів - це різні типи плато Щось на
- 17:01кшталт цього плаского локального
- 17:03максимуму де всі шість станів мають
- 17:05абсолютно однакове значення тобто в разі
- 17:08застосування алгоритму який ми показали
- 17:10раніше Жоден із сусідів не кращий Тобто
- 17:13ми можемо застрягти На цьому пласкому
- 17:15локальному максимумі і навіть якщо ви
- 17:17дозволите собі переміститися до одного з
- 17:19сусідів буде незрозуміло до якого йти І
- 17:22Ви також можете застрягнути тут А ось
- 17:24тут є ще один це називається плече Це не
- 17:27зовсім локальне Макс бо є місце де ми
- 17:29можемо піднятися вище і не локальний
- 17:31мінімум бо можемо опуститися нижче
- 17:34просуватися вперед можна але це пласка
- 17:37ділянка де Якщо у вас є алгоритм
- 17:39локального пошуку ви можете загубитися
- 17:41не маючи можливості просунутися вгору
- 17:43якщо ми намагаємося максимізувати або
- 17:45вниз якщо намагаємося мінімізувати а
- 17:48отже ми можемо знайти рішення яке
- 17:50насправді може не бути оптимальним і
- 17:51оскільки потенціал який дає сходження на
- 17:54вершину не завжди дає оптимальний
- 17:56результат Виявляється що існують різ
- 17:58новиди та варіації алгоритму сходження
- 18:00на вершину які допомагають вирішити
- 18:02проблему краще залежно від контексту і
- 18:05залежно від конкретного типу завдання
- 18:07деякі з цих варіантів можуть бути більш
- 18:09прийнятними ніж інші ми вже розглянули
- 18:12версію сходження на вершину яка зазвичай
- 18:14називається найстрімкіше сходження на
- 18:17вершину Його ідея полягає в тому що Ми
- 18:19обираємо сусіда з найбільшим значенням у
- 18:21випадку якщо намагаємося максимізувати
- 18:23або сусіда з найменшим значенням якщо
- 18:25намагаємося мінімізувати але загалом
- 18:27якщо у мене є п'ять сусідів і всі вони
- 18:29кращі за мій Поточний стан я вибера
- 18:31найкращого З цих п'яти іноді це Може
- 18:33спрацювати досить добре це свого роду
- 18:35жадібний підхід коли намагаєшся зробити
- 18:37найкращу операцію на кожному конкретному
- 18:39кроці але це не завжди може спрацювати
- 18:41бувають випадки коли я хочу обрати
- 18:43варіант який кращі тільки трішки не
- 18:45найкращі бо згодом це може привести до
- 18:48ще кращого результату є й інші варіанти
- 18:51базового алгоритму один з них
- 18:53стохастичне сходження на вершину у цьому
- 18:55випадку ми вибираємо випадково з усіх
- 18:57сусідів які мають бі більше значення
- 18:59якщо в поточному стані є п'ять кращих
- 19:01сусідів то замість вибору найкращого як
- 19:03при найстрімкішому сходженні
- 19:05стохастичний алгоритм вибере випадково
- 19:07одного з них думаючи що він кращий І
- 19:09можливо є потенціал для подальшого
- 19:11прогресу навіть якщо це не найкращий
- 19:13локальний варіант який можна було би
- 19:15вибрати першочергове сходження на
- 19:17вершину полягає у виборі найпершого
- 19:19сусіда який має найбільше значення Але З
- 19:22цього випливає і поведінка за схожою
- 19:24ідею замість того щоб розглядати всіх
- 19:26сусідів Як тільки ми знайдемо сусі
- 19:28Кращого за наш поточний стан ми
- 19:30перейдемо до нього Можливо там є певні
- 19:32поліпшення ефективності можливо є
- 19:34потенціал для пошуку рішення яке інші
- 19:36стратегії не змогли знайти і навіть з
- 19:38усіма цими варіантами все одно є
- 19:40потенційний ризик опинитися на
- 19:42локальному мінімумі або локальному
- 19:43максимумі цей ризик можна зменшити
- 19:45повторюючи процес кілька разів ще один
- 19:48варіант сходження на вершину - це
- 19:49сходження на вершину з випадковим
- 19:51перезаписком ідея полягає в тому що ми
- 19:53можемо сходити на вершину кілька разів
- 19:55якщо ми застосуємо найстрімкіше
- 19:57сходження на вершину то почнемо з
- 19:59якогось випадкового стану спробуємо
- 20:01з'ясувати як вирішити завдання з'ясуємо
- 20:04до якого локального максимуму або
- 20:06локального мінімуму ми дійдемо а потім
- 20:08ми випадково почнемо заново і спробуємо
- 20:10ще раз виберемо нову стартову
- 20:13конфігурацію спробуємо з'ясувати у який
- 20:15локальний максимум або мінімум і зробимо
- 20:17Це кілька разів А після цього зможемо
- 20:19вибрати найкращий варіант з усіх
- 20:21розглянутих Отже це ще один можливий
- 20:24варіант І хоча я казав що зазвичай
- 20:26локальний пошук просто відстежиє один
- 20:28вузел а потім переходить до одного з
- 20:30його сусідів існують і інші варіанти
- 20:32сходження на вершину наприклад локальний
- 20:34променевий Пошук де замість того щоб
- 20:36відстежувати лише один поточний
- 20:38найкращий стан ми відстежуємо ке сусідів
- 20:40із більшим значенням тобто замість того
- 20:42щоб починати з однієї випадкової
- 20:43початкової конфігурації ми відстежуємо
- 20:46три-чотири або п'ять випадково
- 20:47згенерованих сусідів а потім виберемо
- 20:49три-чотири або п'ять найкращих зпоміж
- 20:52них і будемо постійно повторювати процес
- 20:54із думкою що тепер ми маємо більше
- 20:57варіантів для роз Ду і більше шляхів
- 20:59пошуку оптимального
- 21:01рішення тож подивімось на реальний код
- 21:04який може реалізувати деякі з цих ідей
- 21:07наприклад найстрімкіше сходження на
- 21:09вершину для вирішення завдання з
- 21:12лікарнями я перейду до каталогу
- 21:14hospitals де створив базову структуру
- 21:16для вирішення завдань такого типу
- 21:19відкрию файл
- 21:20hospitals.p і ми з вами переглядемо код
- 21:24я визначив клас Space який
- 21:26представлятиме простір станів цей клас
- 21:28має висоту ширину а також певну
- 21:31кількість лікарень Тобто ви можете
- 21:32налаштувати розмір карти кількість
- 21:34лікарень є функція додавання нового
- 21:37будинку до простору станів а також деякі
- 21:40функції які нададуть мені всі доступні
- 21:42місця якщо я захочу розмістити лікарні
- 21:45Випадково А ось і алгоритм сходження на
- 21:48вершину Отже що ми будемо робити в
- 21:51алгоритмі сходження на вершину почнемо з
- 21:53випадкової ініціалізації місця
- 21:55розташування лікарень ми не знаємо де
- 21:57вони мають бути тому розмістимо їх
- 21:59випадково я запускаю цикл для кожної
- 22:03лікарні потім додаю нову лікарню у
- 22:06випадковому
- 22:08місці отримую всі доступні місця і
- 22:11випадковим чином обираю одне з них як
- 22:13місце куди я хочу додати цю конкретну
- 22:15лікарню В мене є логування розміщення та
- 22:18генерування зображень які ми розглянемо
- 22:21пізніше але ось ключова ідея я продовжу
- 22:23повторювати лгоритм я можу вказати
- 22:26максимальну кількість повторень а бо
- 22:28запускатиме його доти доки він не
- 22:30досягне локального максимуму або
- 22:32локального мінімуму А тепер ми
- 22:34розглянемо всі лікарні які потенційно
- 22:36можна перемістити розглянемо кожну з
- 22:38двох лікарень або більше якщо їх більше
- 22:40і розглянемо всі місця куди лікарня може
- 22:43переміститися сусідів цієї лікарні куди
- 22:45ми можемо її перемістити а потім
- 22:48подивимося чи буде це краще ніж те місце
- 22:51де вона стоїть зараз якщо позиція буде
- 22:54кращою тоді ми продовжимо оновлювати
- 22:56найкращого сусі і будемо його
- 22:59відстежувати потім ми можемо поставити
- 23:01собі питання що робити якщо вартість
- 23:04найкращого сусіда більша або дорівнює
- 23:06вартості поточного набору лікарень тобто
- 23:09якщо вартість найкращого сусіда більша
- 23:11за поточну вартість тобто якщо найкращий
- 23:13сусідній стан гірший за Поточний стан
- 23:16Тоді не варто робити жодних змін і варто
- 23:19повернути поточний набір лікарень але
- 23:23якщо інакше тоді можна оновити лікарні
- 23:25щоби замінити їх на одного найкращих
- 23:28сусідів А якщо є кілька рівноцінних
- 23:30розташувань Я використовую
- 23:32randomкраchoice щоби вибрати одне з них
- 23:34випадково це реалізація на пайтоні цієї
- 23:37ідеї про яку Ми щойно говорили ідеє
- 23:40взяти Поточний стан поточний набір
- 23:41лікарень згенерувати всіх сусідів
- 23:44переглянути всі способи якими ми можемо
- 23:46взяти лікарню і перемістити її на
- 23:48клітинку ліворуч праворуч вгору або вниз
- 23:51а потім на основі цієї інформації
- 23:52з'ясувати найкращий сусідній стан або
- 23:55набір найкращих сусідів і вибрати з них
- 23:57один щоби зробити це Ми щоразу генеруємо
- 24:00зображення А зараз подивимося на кінець
- 24:03коду я випадковим чином згенерую простір
- 24:06заввишки 10 і завширшки 20 у якому
- 24:09розміщу три лікарні я випадковим чином
- 24:12згенерую 15 будинків які додам у
- 24:15випадкові місця а потім я запущу
- 24:17алгоритм сходження на вершину щоб
- 24:19з'ясувати де ж розмістити ці
- 24:22лікарні запускаємо програму запускаючи
- 24:25python hospitals Як ви бачите споча
- 24:28початковий стан мав вартість 72 але ми
- 24:30постійно знаходили сусідні стани які
- 24:32змогли зменшити вартість до
- 24:356966 і аж до 53
- 24:38це найкращий сусід якого ми
- 24:40знайшли Ми можемо побачити графічне
- 24:43зображення відкривши файл ось наприклад
- 24:46початкова
- 24:47конфігурація ми випадковим чином вибрали
- 24:50місце для всіх 15 будинків а потім
- 24:53випадковим чином вибрали місця для трьох
- 24:55лікарень які були розташовані десь у
- 24:58сеередині простору станів якщо скласти
- 25:01всі відстані від кожного будинка до
- 25:03найближчої лікарні то вийде загальна
- 25:05вартість
- 25:0672 тепер постає питання до яких сусідів
- 25:09ми можемо переміститися щоби поліпшити
- 25:11ситуацію першим алгоритм знайшов оцю
- 25:14лікарню праворуч і перемістив її ліворуч
- 25:17це логічно бо якщо ви подивитеся на
- 25:20будинки в цьому районі то п'ять будинків
- 25:22будуть найближчими до цієї лікарні
- 25:25переміщення її ліворуч зменшує загальну
- 25:27відстань принаймні до більшості цих
- 25:29будинків хоча й збільшує відстань до
- 25:32одного з них Таким чином ми можемо
- 25:34поліпшувати ситуацію постійно знаходячи
- 25:37способи переміщення лікарень поки не
- 25:39зупинимося на цьому конкретному стані з
- 25:43вартістю
- 25:4653 ми визначили місце для кожної лікарні
- 25:49і тепер жоден сусід до яких ми можемо
- 25:51переміститися не поліпшить ситуації ми
- 25:54можемо взяти цю лікарню і цю лікарню і
- 25:57цю лікарню подивитись на кожного сусіда
- 25:59і Кожен з них не буде кращим за цю
- 26:01конкретну конфігурацію зновутаки це не
- 26:04обов'язково найкращий варіант може
- 26:06існувати якась інша конфігурація
- 26:07лікарень яка є глобальним мінімумом А ця
- 26:10може бути локальним мінімумом тобто
- 26:12найкращою з усіх сусідніх Але можливо не
- 26:15найкращою в усьому можливому просторі
- 26:17станів можна шукати по всьому простору
- 26:19станів розглядаючи всі можливі
- 26:21конфігурації але це займе багато часу
- 26:24особливо з огляду на те що простір
- 26:26станів стає більшим і можливих станів
- 26:29теж може бути більше щоби переглянути їх
- 26:31усі знадобиться багато часу тому
- 26:34можливість використовувати такі
- 26:35алгоритми локального пошуку часто може
- 26:38бути корисною для пошуку найкращого
- 26:40рішення особливо якщо ми не дбаємо про
- 26:42те щоби зробити якнайкраще а просто
- 26:45хочемо зробити все добре і знайти вдале
- 26:47розміщення лікарень звісно ми можемо
- 26:50спробувати пом'якшити деякі проблеми
- 26:52використовуючи випадковий перезапуск
- 26:54замість сходження на вершину ідея
- 26:56полягає в тому що замість одноразового
- 26:58сходження на вершину ми можемо
- 27:00використати цей алгоритм безліч разів на
- 27:02одній і тій самій карті і з'ясувати який
- 27:04варіант найкращий я реалізував функцію
- 27:07Random
- 27:08restart яка перезапускає алгоритм певну
- 27:11максимальну кількість разів цей процес
- 27:14треба повторити цю кількість разів
- 27:16запустити алгоритм сходження на
- 27:18вершину з'ясувати Яка вартість шляху від
- 27:22усіх будинків до лікарень а потім
- 27:24з'ясувати чи це краще за те що ми робили
- 27:27до цього я можу спробувати цю саму ідею
- 27:29де замість запуску hillim я запущу ROM і
- 27:34я випадково перезапущу наприклад 20
- 27:36разів продовжуємо зараз я видаляю всі
- 27:39зображення а потім перезапущу програму
- 27:42починаємо з пошуку початкового стану
- 27:44коли ми запустили сходження на вершину
- 27:46то найкраща вартість яку ми змогли
- 27:48знайти була 56 кожна ітерація - це
- 27:51окрема ітерація алгоритму сходження на
- 27:53вершину ми запускаємо алгоритм не один
- 27:55раз а 20 разів постійно поки ки не
- 27:57знайдемо локальний мінімум і щоразу ми
- 28:00дивимося Чи вдалося нам досягти кращого
- 28:02результату ніж попередні ми перейшли від
- 28:0556 до 46 це більше ігноруємо це 41 що
- 28:10менше ми його лишили і продовжили і за
- 28:12всі інші 16 разів коли ми запускали
- 28:15алгоритм сходження на вершину ми не
- 28:17знайшли нічого кращого за 41 зновутаки
- 28:21можливо є спосіб зробити краще який ми
- 28:23просто не знайшли але Схоже що цей
- 28:26спосіб виявився досить не поганим
- 28:28рішенням завдання Це була третя спроба
- 28:31можемо поглянути на неї відкрити файл
- 28:33номер
- 28:34три Ось цей стан має вартість
- 28:3741 після запуску алгоритму сходження на
- 28:40вершину для певної випадкової початкової
- 28:42конфігурації лікарень це було локальним
- 28:44мінімумом з точки зору спроби
- 28:47мінімізувати вартість нам це непогано
- 28:49вдалося адже будинки в цьому районі
- 28:51близькі до цієї лікарні будинки в цьому
- 28:54до цієї лікарні Та й ця Лікарня
- 28:56розташована максимально вдала відносно
- 28:58будинків Отже такі алгоритми можуть бути
- 29:00корисними для розв'язку подібних
- 29:03завдань але реальна проблема багатьох
- 29:06цих видів алгоритмів сходження на
- 29:08вершину крутого стохастичного
- 29:10першочергового тощо полягає в тому що
- 29:12вони ніколи не роблять кроку який
- 29:14погіршує нашу ситуацію Вони завжди
- 29:16беруть Поточний стан дивляться на
- 29:18сусідів і думають Чи можемо ми зробити
- 29:20краще і переміщаються до цього сусіда
- 29:23кого із сусідів ми оберемо залежить від
- 29:26різних типів алгорит
- 29:27але ми ніколи не переходимо з поточної
- 29:29позиції в гіршу позицію зрештою це і
- 29:32потрібно робити якщо ми шукаємо
- 29:33глобальний максимум або глобальний
- 29:35мінімум бо іноді якщо Ми застрягли Ми
- 29:38хочемо знайти спосіб відійти від
- 29:40локального максимуму або локального
- 29:42мінімуму щоб знайти глобальний максимум
- 29:44або глобальний мінімум або збільшити
- 29:46імовірність знаходження найпопулярнішою
- 29:49технікою яка намагається підійти до
- 29:51завдання під цим кутом зору є імітація
- 29:53відпалу це моделювання реального
- 29:56фізичного процесу відпалу думайте про це
- 29:58І з точки зору фізики фізичної ситуації
- 30:01Де у вас є певна система частинок Уявіть
- 30:04що коли ви нагріваєте певну фізичну
- 30:06систему там з'являється багато енергії
- 30:08усе рухається хаотично але з часом Коли
- 30:11система остигає вона застигає в якомусь
- 30:13кінцевому положенні цей буде загальною
- 30:16ідеєю імітацію відпалу ми імітуватимемо
- 30:20процес високотемпературної системи у
- 30:22якій усе рухається хаотично але з часом
- 30:25температура знижується тобто зрештою ми
- 30:28дійдемо до остаточного рішення ідея
- 30:31полягає в тому що от у нас є ландшафт
- 30:33простору станів ми починаємо з
- 30:35початкового стану якщо ми намагаємося
- 30:38максимізувати значення стану наші
- 30:40традиційні алгоритми сходження на
- 30:42вершину візьмуть стан подивляться на
- 30:45двох сусідів і завжди оберуть того який
- 30:48збільшить значення
- 30:50стану Але якщо ми хочемо мати Хоч якийсь
- 30:53шанс знайти глобальний максимум Ми не
- 30:56можемо завжди робити правильні кроки Ми
- 30:58повинні іноді робити погані кроки І
- 31:00дозволяти собі рухатися у напрямку який
- 31:03як нам здається на цей момент погіршає
- 31:06ситуацію щоби потім знайти шлях до
- 31:08глобального
- 31:10максимуму звісно коли ми досягнемо
- 31:12глобального максимуму коли виконаємо не
- 31:15один пошук тоді ми ймовірно не захочемо
- 31:18рухатися до станів гірших за Поточний
- 31:20стан і саме Тут з'являється схожість до
- 31:23відпалу коли ми починаємо виконувати
- 31:25більше випадкових рухів але з м їх
- 31:27кількість зменшується що засновано на
- 31:30температурному графікові основна схема
- 31:32приблизно така на початку імітації
- 31:34відпалу ми маємо вищий температурний
- 31:37стан під вищим температурним станом ми
- 31:40маємо на увазі що ми з більшою
- 31:42імовірністю Приймемо сусідів які гірший
- 31:45за Поточний стан що якщо один із сусідів
- 31:47гірший за Поточний стан особливо якщо не
- 31:50набагато гірший а трішки гірший то ми з
- 31:52більшою імовірністю приймемо це і
- 31:54перейдемо до цього сусіда в будь-якому
- 31:57випадку але пізніше коли ми запустимо
- 31:59імітацію відпалу ми знизимо температуру
- 32:02А при нижчій температурі ми зменшуємо
- 32:05вірністю Приймемо сусідів гірших за
- 32:07Поточний стан тепер формалізуємо запис
- 32:10за допомогою псевдокоду У нас є функція
- 32:13simulated eniling яка приймає як вхідні
- 32:16дані завдання яке Ми намагаємося
- 32:18вирішити а також потенційну деяку
- 32:20максимальну кількість разів запуску
- 32:22імітації відпалу разів пошуку сусідів це
- 32:25значення буде змінюватися залеж від
- 32:27завдання ми знову почнемо з поточного
- 32:30стану який буде дорівнювати початковому
- 32:32стану завдання але тепер нам потрібно
- 32:34повторити цей процес знову і знову
- 32:36максимальну кількість разів Спочатку ми
- 32:38обчислимо температуру функція tempче
- 32:42бере поточний час ті починаючи з одиниці
- 32:45і доходячи до максимуму а потім дає нам
- 32:48температуру яку ми можемо
- 32:50використовувати в обчисленнях ідея
- 32:53полягає в тому що ця Температура буде
- 32:55вищою на початку а потім буде
- 32:57нижчою функція тече може працювати
- 33:00кількома способами один з найпростіших -
- 33:03це сказати що вона як пропорція часу що
- 33:05нам лишився скільки часу у нас лишилося
- 33:08виходячи зі значення максимуму спочатку
- 33:10у вас буде багато часу але згодом
- 33:12Температура буде знижуватися бо у вас
- 33:14лишається дедалі менше
- 33:17часу обчислюємо температуру для
- 33:19поточного часу а потім обираємо
- 33:21випадкового сусіда ми більше не будемо
- 33:25обирати найкращого сусіда або з
- 33:27найкращих ми виберемо випадкового сусіда
- 33:30він може бути кращим може бути гіршим
- 33:32але ми це вирахуємо ми обчислимо Дельту
- 33:35і і в цьому випадку означає енергія
- 33:38тобто наскільки сусід кращий за Поточний
- 33:40стан якщо Дельта і позитивна це означає
- 33:43що сусід кращий за Поточний стан якщо
- 33:46Дельта і від'ємна це означає що сусід
- 33:48гірший за Поточний стан Таким чином ми
- 33:50можемо мати такий стан якщо Дельта і
- 33:53більша за нуль то стан сусіда кращий за
- 33:55Поточний стан
- 33:57якщо коли-небудь виникне така ситуація
- 34:00ми просто оновимо зміну каent до
- 34:03значення цього сусіда так само як і
- 34:05раніше перемістимось туди де ми зараз
- 34:07перебуваємо щоби стати сусідом бо він
- 34:09кращий за Поточний стан ми просто
- 34:11Приймемо це але тепер відмінність у тому
- 34:14що якщо раніше ми ніколи не хотіли
- 34:16робити кроки які погіршують ситуацію то
- 34:18тепер ми іноді хочемо рухатися так щоб
- 34:20ситуація погіршилася бо іноді нам
- 34:22потрібно зміститись від локального
- 34:23мінімуму або локального максимуму щоби
- 34:26збільшити мовір того що ми знайдемо
- 34:28глобальний мінімум або глобальний
- 34:29максимум пізніше Як же це зробити як ми
- 34:32вирішуємо іноді приймати стан який може
- 34:34бути гіршим ми Приймемо гірший стан із
- 34:37певною ймовірністю ця ймовірність має
- 34:39ґрунтуватися на кількох факторах
- 34:41частково Вона має ґрунтуватися на
- 34:43температурі якщо температура вища Ми з
- 34:46більшою імовірністю перемістимося до
- 34:48гіршого сусіда А якщо нижча то зменшує
- 34:51імовірністю але це також до певної міри
- 34:54має базуватися на дельті і Якщо сусід
- 34:57набагато гірший за Поточний стан Ми з
- 34:59меншою імовірністю захочемо вибрати його
- 35:01ніж Якщо сусід лише трохи гірший за
- 35:03Поточний стан знову ж таки є кілька
- 35:06способів це вирахувати але Виявляється
- 35:08що Один з найпопулярніших - Це просто
- 35:11обчислити і в степені дельтаі поділене
- 35:13на T і константа дельтаі поділене T - Це
- 35:17ось ці дельтаі і T ми обчислюємо це
- 35:21значення яке буде десь між нулем і
- 35:23одиницею і це ймовірність з якою ми
- 35:25скажемо перейдімо до цього сусіда
- 35:28Виявляється що коли ви порахуєте це
- 35:30значення Коли Дельта і така що сусідній
- 35:32стан не набагато гірше за поточний тоді
- 35:34імовірність того що ми перейдемо до
- 35:36цього стану буде вищою і так само коли
- 35:39температура нижча Ми з меншою
- 35:40імовірністю перейдемо до цього стану
- 35:42Отже це загальна картина імітації
- 35:44відпалу процесу коли ми беремо завдання
- 35:47і починаємо генерувати випадкових
- 35:49сусідів ми завжди перемістимося до
- 35:51сусіда якщо він кращий за Поточний стан
- 35:54але навіть якщо сусід гірший за Поточний
- 35:56стан ми і іноді будемо переходити туди
- 35:58залежно від того наскільки він гірший а
- 36:00також від температури у результаті мета
- 36:03всього цього процесу полягає в тому що
- 36:05коли ми починаємо Шукати шлях до
- 36:07глобального максимуму або глобального
- 36:09мінімуму ми можемо змістити себе якщо
- 36:11застрягнемо в локальному максимумі або
- 36:13локальному мінімумі щоби зрештою знайти
- 36:16шлях до дослідження тієї частини
- 36:17простору станів яка буде найкращою коли
- 36:20температура знижується Ми застигаємо там
- 36:23не надто видаляючись від того що ми
- 36:25вважаємо найкращим з того що можемо
- 36:27зробити на цей момент у кінці ми просто
- 36:29повертаємо той стан в якому перебуваємо
- 36:31на цей момент такий висновок цього
- 36:33алгоритму ми змогли знайти
- 36:36рішення ці типи алгоритмів мають багато
- 36:38різних застосувань щоразу коли ви берете
- 36:41проблему і формулюєте її як щось де ви
- 36:43можете дослідити певну конфігурацію а
- 36:46потім запитати чи якась із сусідніх
- 36:48конфігурацій краще за поточну і мати
- 36:50який спосіб виміряти це тоді є
- 36:53відповідний випадок для цих алгоритмів
- 36:55сходження на вершину чи імітації відпалу
- 36:58іноді це може бути завдання з
- 37:00розташуванням об'єктів наприклад ви
- 37:02плануєте місто і хочете з'ясувати де
- 37:04мають бути лікарні безумовно є й інші
- 37:07застосування однією з найвідоміших задач
- 37:09в інформатиці є задача комівояжера
- 37:12задача комівояжера загалом формулюється
- 37:14Так є купа міст позначених крапками Я
- 37:17хочу знайти такий маршрут який пройде
- 37:19через усі ці міста і поверне мене туди
- 37:21звідки я почав тобто маршрут який
- 37:23починається тут проходить через усі ці
- 37:26міста І повертається туди звідки я почав
- 37:28Я хочу мінімізувати загальну відстань
- 37:30яку я маю подолати або ж загальну
- 37:33вартість проходження шляху ви розумієте
- 37:35що ця проблема актуальна для компанії
- 37:37доставки яким треба доставити купу
- 37:40вантажів у різні будинки вони хочуть
- 37:42з'ясувати як дістатися зі складу до всіх
- 37:45цих різних будинків і повернутися назад
- 37:48використовуючи якомога менше часу
- 37:51відстані та енергії тобто ви можете
- 37:54розв'язати і подібні завдання
- 37:56Виявляється що розв'язання такого роду
- 37:58завдань дуже складне з обчислювальної
- 38:00точки зору і дуже дороге воно підпадає
- 38:03під категорію NP повних задач тобто
- 38:06задач для Розв'язання яких не існує
- 38:09жодного ефективного способу тобто
- 38:12зрештою Ми повинні придумати якесь
- 38:14наближення якісь способи спробувати
- 38:16знайти хороше рішення Навіть якщо ми не
- 38:19знайдемо глобального найкращого рішення
- 38:21яке ми можемо знайти принаймні не за
- 38:24можливий або реальний проміжок часу
- 38:27тому візьмемо задачу комивояжера
- 38:29спробуємо сформулювати її за допомогою
- 38:32локального пошуку і будемо мислити
- 38:34приблизно так я можу вибрати певний стан
- 38:36певну конфігурацію певний маршрут між
- 38:39усіма цими вузлами можу виміряти
- 38:41вартість цього стану з'ясувати відстань
- 38:44і можливо захочу мінімізувати цю
- 38:46вартість і тоді єдине питання таке А
- 38:49яким же буде сусід цьогого стану що
- 38:51означає їхати цим маршрутом і мати
- 38:53сусідній маршрут близький до нього але
- 38:56трохи в відмінний так що загальна
- 38:58відстань може бути іншою існує багато
- 39:00різних визначень того що таке сусід ком
- 39:02вояжера одне з них полягає в тому що
- 39:04сусід - це те що станеться якщо ми
- 39:07виберемо два ребра між вузлами і
- 39:10поміняємо їх місцями наприклад я можу
- 39:13вибрати ці два ребра одне яке йде сюди і
- 39:16друге яке йде сюди і поміняти їх місцями
- 39:19що це буде за процес загалом Спершу
- 39:22потрібно виділити обидва ребра з графа
- 39:25взяти цей вузол і з'єднати його з вузлом
- 39:27з яким він не був з'єднаний тобто З оцим
- 39:30угорі потім потрібно взяти ці стрілки
- 39:33які спочатку йшли сюди і змінити їх
- 39:36напрямок а потім заповнити останній
- 39:38порожній перехід додавши стрілку яка йде
- 39:41в цьому напрямку тобто взявши два ребра
- 39:43і помінявши їх місцями я зміг розглянути
- 39:46одного можливого сусіда цієї конкретної
- 39:48конфігурації Схоже що сусід справді
- 39:51кращий він долає меншу відстань ніж
- 39:54Поточний стан щоби пройти через усі
- 39:56міста та на маршруті ви можете уявити
- 39:58собі реалізацію цієї ідеї в алгоритмі
- 40:00сходження на вершину або імітації
- 40:02відпалу де ми повторюємо цей процес щоби
- 40:05взяти стан задачі комівояжера подивитися
- 40:08на всіх сусідів а потім перейти до них
- 40:10якщо вони кращі чи навіть якщо гірші
- 40:12поки ми не зупинимося на якомусь
- 40:15найкращому
- 40:16рішенні і Виявляється що ці типи
- 40:19алгоритмів наближення навіть якщо вони
- 40:20не завжди знаходять найкраще рішення
- 40:23часто можуть досить добре справлятися зі
- 40:25спробами має знайти рішення Отже це був
- 40:28погляд на локальний пошук особливо
- 40:30категорію алгоритмів які можна
- 40:32використовувати для розв'язку певного
- 40:34типу завдань де нас не дуже цікавить
- 40:37шлях мене не хвилювали кроки які я робив
- 40:40щоб вирішити де мають бути лікарні мене
- 40:42цікавило лише саме рішення Мене хвилює
- 40:45лише те де мають бути лікарні або який
- 40:47має бути маршрут мандрівного комівояжера
- 40:50інший тип алгоритмів - це так звані
- 40:52задачі лінійного програмування лінійне
- 40:55програмування часто з'являється в
- 40:57контексті коли ми намагаємося
- 40:58оптимізувати якусь математичну функцію
- 41:01Але часто лінійне програмування
- 41:03з'являється тоді коли ми маємо реальні
- 41:05числові значення Тобто це не просто
- 41:08дискретні фіксовані значення які ми
- 41:10можемо мати а будь-які десяткові
- 41:12значення які потрібно обчислити лінійне
- 41:15програмування - це сімейство типів задач
- 41:17де ми можемо мати наприклад таку
- 41:19ситуацію мета лінійного програмування
- 41:21мінімізація вартості функції Можна
- 41:24спробувати максимізувати її але часто це
- 41:26спроба саме мінімізувати вартісну
- 41:28функцію яка має певну кількість змінних
- 41:31x1х2х3 аж до xn просто певну кількість
- 41:35змінних значення яких я хочу знати
- 41:37вартісна функція може мати коефіцієнти
- 41:39перед змінними це те що ми називаємо
- 41:42лінійним рівнянням де є змінні які можна
- 41:45помножити на коефіцієнт а потім скласти
- 41:48ми не будемо нічого зводити В квадрат чи
- 41:50куб бо це дасть інші типи рівнянь у
- 41:53лінійному програмуванні ми маємо справу
- 41:55з лінійними рівняннями на додачу до
- 41:58лінійних обмежень що таке лінійне
- 42:00обмеження якщо ми розв'яжемо конкретне
- 42:02рівняння яке є лінійною комбінацією всіх
- 42:05цих змінних воно буде менше або
- 42:07дорівнюватиме деякій межі B ми можемо
- 42:10мати ряд різних обмежень які ми можемо
- 42:12накласти на нашу вправу з лінійного
- 42:15програмування так само як ми можемо мати
- 42:18обмеження які говорять що це лінійне
- 42:20рівняння менше або дорівнює деякій межі
- 42:23B воно також може дорівнювати чомусь
- 42:26Якщо ви хочете щоби сума певної
- 42:28комбінації змінних дорівнювала певному
- 42:30значенню ви можете це вказати Також ми
- 42:32можемо вказати що кожна змінна має нижню
- 42:34і верхню межу що вона має бути додатним
- 42:37числом або числом меншим за 50 є багато
- 42:40інших варіантів які ми можемо зробити
- 42:42для визначення меж змінної та
- 42:44виявляється що якщо ви можете взяти
- 42:46завдання і сформулювати його в цих
- 42:48термінах сформулювати завдання так що
- 42:50ваша мета мінімізувати вартісну функцію
- 42:53і ви мінімізуєте її з урахуванням певних
- 42:55обмежень з урахуванням рівнянь які мають
- 42:57Такий вигляд деякої послідовності
- 42:59змінних що менше за певну межу або
- 43:02дорівнює певному значенню то існує ряд
- 43:05алгоритмів які вже існують для вирішення
- 43:07такого роду
- 43:08завдань розгляньмо приклад ось приклад
- 43:12завдання яке може виникнути у світі
- 43:14лінійного програмування часто це
- 43:16відбувається коли ми намагаємося
- 43:18оптимізувати щось і хочемо мати
- 43:20можливість робити обчислення і у нас є
- 43:22обмеження на те що ми оптимізуємо ну
- 43:24наприклад ми на заводі у нас є дві
- 43:27машини X1 і X2 година роботи X1 коштує
- 43:3150 $ година роботи X2 80 долав мета те
- 43:35що ми намагаємося зробити мінімізувати
- 43:37загальні
- 43:39витрати як це робити але ми повинні
- 43:43робити це з урахуванням певних обмежень
- 43:45може існувати обмеження по робочій силі
- 43:48X1 потребує п'ять одиниць робочої сили
- 43:50на годину X2 дві одиниці робочої сили на
- 43:52годину загалом 20 одиниць робочої сили
- 43:55які ми повинні витратити ми можемо
- 43:57витратити не більше ніж 20 одиниць
- 44:00робочої сили і ми маємо їх витратити на
- 44:02X1 і X2 кожн з яких потребує різної
- 44:05кількості праці Також ми можемо мати
- 44:07таке обмеження 1 вироблятиме 10 одиниць
- 44:10продукції за годину X2 12 одиниць
- 44:14продукції за годину а компанії потрібно
- 44:1690 одиниць продукції Отже у нас є мета
- 44:20те чого потрібно досягти 90 одиниць
- 44:22продукції але є обмеження X1 виробляє
- 44:25лише 10 одиниць продукції за годину X2
- 44:2812 одиниць продукції за годину подібні
- 44:30завдання виникають досить часто ви
- 44:32почнете помічати закономірності в таких
- 44:34завданнях де я намагаюся виконати
- 44:36оптимізацію для досягнення мети
- 44:39мінімізувати витрати максимізувати
- 44:40випуск продукції чи прибуток тощо і є
- 44:43обмеження які накладаються на цей процес
- 44:46тепер потрібно сформулювати це завдання
- 44:48в лінійних рівняннях почнемо з першого
- 44:50пункту дві машини X1 і X2 X1 коштує 50
- 44:55до$ за годину
- 44:56x280 можемо придумати цільову функцію
- 44:59точніше вартісну функцію
- 45:0250* X1 + 80 * X2 де X1 буде зміною що
- 45:08представляє кількість годин роботи
- 45:10машини X1 а X2 буде зміна що представляє
- 45:13кількість годин роботи машини X2 що ми
- 45:16мінімізуємо вартісну функцію яка показує
- 45:19скільки коштує експлуатація обох машин
- 45:22за годину це приклад лінійного рівняння
- 45:24комбінація змінних плюс коефіцієнти які
- 45:27стоять перед ними я хочу мінімізувати це
- 45:30загальне значення Але я повинен зробити
- 45:33це з урахуванням цих обмежень для Х1
- 45:36потрібно п'ять одиниць робочої сили за
- 45:38годину X2 -дві А загалом потрібно
- 45:41витратити 20 одиниць робочої сили це дає
- 45:44нам таке обмеження 5х1 + 2х2 менше або
- 45:48дорівнює 20 20 - це загальна кількість
- 45:51одиниць робочої сили яку ми маємо
- 45:53витратити вона витрачається на X1 і X2
- 45:57для кожної з яких потрібна різна
- 45:59кількість одиниць робочої сили за годину
- 46:01і ще є таке обмеження X1 виробляє 10
- 46:04одиниць продукції за годину X2 12 А нам
- 46:07потрібно 90 одиниць продукції який же це
- 46:10має вигляд 10х1 + 12х2 - це кількість
- 46:15продукції за годину вона має бути
- 46:17щонайменше 90 більше чудово але не менше
- 46:20ніж 90 пам'ятаєте що я сказав раніше що
- 46:23Загалом у лінійному програмуванні ми
- 46:25маємо справу з обмеженнями дорівнює або
- 46:28менше чи дорівнює а тут у нас більше або
- 46:30дорівнює це не проблема Коли ми маємо
- 46:33такий знак множимо рівняння на -1 і це
- 46:36перетворить його на менше або дорівнює
- 46:39-90 замість більше або дорівнює 90 це
- 46:43буде еквівалентний вираз який можна
- 46:45використовувати для представлення
- 46:46завдання тепер коли у нас є вартісна
- 46:49функція та обмеження які на неї
- 46:52накладено Виявляється що існує ряд
- 46:54алгоритмів які можна використовувати для
- 46:56вирішення подібних завдань вони більше
- 46:58стосуються геометрії та лінійної алгебри
- 47:01в які ми не будемо заглиблюватися але
- 47:04найпопулярнішим з цих типів алгоритмів є
- 47:07симплексметод один з перших алгоритмів
- 47:09винайдених для вирішення лінійних задач
- 47:12а згодом для цього почали
- 47:13використовувати методи внутрішньої точки
- 47:15Важливо не стільки зрозуміти як саме
- 47:18працюють ці алгоритми а більше
- 47:20усвідомити що вони існують для
- 47:22ефективного знаходження рішень щоразу
- 47:24коли ми маємо завдання та форми Отже ми
- 47:27зараз можемо поглянути на каталог
- 47:34Production де у нас є файл під назвою
- 47:37production.pie де я використовую ppy це
- 47:41бібліотека для багатьох функцій
- 47:42пов'язаних з наукою у пайтоні зараз я
- 47:45запущу функцію оптимізації щоби
- 47:47запустити лінійну програму крапка linpr
- 47:50пробує вирішити цю лінійну програму коли
- 47:52Я надам цьому виразу цьому виклику
- 47:54функції всі дані про мою лінійну
- 47:56програму Вони мають бути у певному
- 47:59форматі що спочатку може вас трохи
- 48:01плутати першим аргументом для
- 48:05spy.optimize.linproc є вартісна функція
- 48:08Яка в цьому випадку представлена масивом
- 48:10або списком що містить 50 і 80 бо
- 48:13спочатку вартість функції була
- 48:1650х1 + 80х2 тому на пайthні Я просто
- 48:20кажу 50 і 80 - це коефіцієнти які я
- 48:23намагаюся оптимізувати а потім я вказую
- 48:25всі обмеження обмеження я записав вище в
- 48:28коментарях перше обмеження 5х1 + 2х2
- 48:33менше або дорівнює 20 друге обмеження
- 48:36-10х1 +
- 48:38-12х2 менше або дорівнює
- 48:41-90 cpй очікує що ці обмеження будуть у
- 48:46певному форматі спочатку очікує Що Я
- 48:48надам всі коефіцієнти для рівнянь
- 48:51верхньої межі
- 48:53означає верхня межа де коефіцієнти
- 48:55першого рівняння дорівнюють 5 і 2 тому
- 48:58що ми маємо 5х1 і 2х2 а коефіцієнти
- 49:02другого рівняння -10 і
- 49:05-12 бо ми маємо -10х1 +
- 49:08-12х2 тут ми наводимо його як окремий
- 49:11аргумент щоби розділити яка верхня межа
- 49:14для кожного з цих обмежень для першого
- 49:16обмеження верхня межа дорівнює 20 а для
- 49:19другого обмеження верхня межа становить
- 49:2290 загадковий спосіб представити їх це
- 49:26не так просто як написати математичні
- 49:28рівняння насправді ми очікуємо отримати
- 49:31всі коефіцієнти і всі числа які є в цих
- 49:34рівняннях спочатку надавши коефіцієнти
- 49:36для вартісної функції потім надавши всі
- 49:38коефіцієнти для обмежень нерівностей а
- 49:41потім надавши всі верхні межі для
- 49:43обмежень
- 49:44нерівностей і коли вся ця інформація є
- 49:48ми можемо запустити будь-який метод
- 49:50внутрішньої точки або симплексметод
- 49:53навіть якщо ви не розумієте як вони прац
- 49:55цюють просто запустіть функцію і
- 49:57З'ясуйте яким має бути результат якщо
- 50:00результат успішний ми розв'язали задачу
- 50:03виводимо на екран значення X1 і X2
- 50:06інакше виводимо на екран відсутній
- 50:08розв'язок Отже я запускаю програму
- 50:11запустивши python
- 50:14production.p обчислення триває секунду
- 50:17але потім ми бачимо яким має бути
- 50:19оптимальне рішення X1 має працювати
- 50:21івтори години X2
- 50:246,25 години
- 50:25Ми зробили це просто сформулювали
- 50:28завдання у вигляді лінійного рівняння
- 50:30яке ми намагалися оптимізувати вартості
- 50:33яку ми намагалися мінімізувати і
- 50:35обмежень багато-багато завдань
- 50:37підпадають під цю категорію їх можна
- 50:40розв'язати якщо ви можете просто
- 50:42зрозуміти як використовувати рівняння і
- 50:44обмеження щоби представити загальну ідею
- 50:48ця тема сьогодні ще кілька разів
- 50:50з'явиться коли ми захочемо взяти
- 50:52завдання і звести його до такого
- 50:53завдання яке нам під силу розв'язати
- 50:56використовуючи методи щоб знайти рішення
- 50:59більш ефективно або більш
- 51:02результативно Виявляється що такі типи
- 51:05завдань де ми маємо обмеження
- 51:07проявляються й іншими способами існує
- 51:10клас завдань більш широко відомі як
- 51:12завдання задоволення обмежень Зараз ми
- 51:15розглянемо Як сформулювати завдання
- 51:17задоволення обмежень і як його
- 51:20розв'язати основна ідея завдань
- 51:22задоволення обмежень полягає в тому що у
- 51:24нас є певна кіль змінних які мають
- 51:27набути певних значень А нам потрібно
- 51:29з'ясувати яких значень має бути кожна ця
- 51:31змінна але на цій змінні накладені певні
- 51:35обмеження які обмежують те яких значень
- 51:37ці зміні можуть набувати розгляньмо
- 51:40приклад з реального світу розклад
- 51:42іспитів У мене є чотири студенти 1 2 3 4
- 51:46Кожен з них відвідує певну кількість
- 51:49різних предметів предмети позначимо
- 51:51буквами студент о відвідує предмети AB і
- 51:54C студент2 предмети bdі і так
- 51:58далі університет призначає іспити з усіх
- 52:03цих предметів але має для цього лише три
- 52:05дні понеділок вівторок і середу ми
- 52:09повинні запланувати іспит Із кожного
- 52:11предмета але обмеження з якими ми
- 52:14стикаємося під час складання розкладу
- 52:16полягає в тому що ніхто не повинен
- 52:18складати два іспити в один день ми
- 52:21спробуємо звести це до мінімуму або
- 52:23взагалі усунути якщо це мож
- 52:25Як же нам почати представляти цю ідею як
- 52:28структурувати її так щоб комп'ютер з
- 52:30алгоритмом штучного інтелекту почав
- 52:32намагатися розв'язати завдання для
- 52:34початку подивимося на предмети і
- 52:37представимо Кожен з них як вузол
- 52:40графа а потім створимо ребро між двома
- 52:43вузлами графа Якщо між ними є
- 52:48обмеження що це означає почнемо зі
- 52:51студента О який вивчає предмети A B і C
- 52:55це означає що іспити з a і b не можуть
- 52:58бути в один день іспити з A і C не
- 53:00можуть бути в один день і іспити з B і C
- 53:03також не можуть бути в один день я можу
- 53:05відобразити це на графі додавши такі
- 53:07ребра одне між A і b одне між B і C одне
- 53:11між c і
- 53:12a це закодовано ідеєю про те що між цими
- 53:15вузлами є обмеження зокрема таке що вони
- 53:18не можуть дорівнювати одне одному є й
- 53:20інші типи обмежень Це залежить від типу
- 53:24завдання
- 53:26а потім ми можемо зробити те саме для
- 53:29кожного студента другий студент вивчає
- 53:31предмети BD це означає що між B D і
- 53:34мають бути ребра третій студент вивчає
- 53:36предмети cі і F тож візьмемо cі і F і
- 53:40з'єднаємо їх додавши ребра між
- 53:43ними Ну і четвертий вивчає предмети і F
- 53:46і G і ми можемо зобразити це додавши
- 53:49ребра між і F і G Хоча і і F уже мають
- 53:53ребро ще одне не потрібне бо це
- 53:56обмеження за кодовою ідею що іспити з
- 53:58предметів і та F не можуть відбуватися в
- 54:01один день Отже Ми отримали граф обмежень
- 54:05це певне графічне представлення всіх
- 54:07моїх змінних і обмежень між цими
- 54:09можливими змінними де в цьому
- 54:11конкретному випадку кожне обмеження є
- 54:14обмеженням нерівності тобто ребро між B
- 54:17і D означає що будь-яке значення якого
- 54:21набуває змінна бі не може бути тим самим
- 54:23значенням якого набуває змінна дій так
- 54:26що ж таке власне завдання задоволення
- 54:28обмежень це деяка множина змінних від X1
- 54:32до xn множина областей визначення для
- 54:35кожної з цих змінних кожна змінна має
- 54:39набувати певних значень можливо кожна
- 54:41змінна має одну і ту саму область
- 54:42визначення а можливо кожна змінна має
- 54:44дещо іншу область і ще є множина
- 54:47обмежень множина с містить обмеження
- 54:50накладені на ці змінні наприклад 1 не
- 54:52дорівнює X2 але можуть бути інші
- 54:55варіанти наприклад X1 = X2 + 1 Якщо ці
- 54:58змінні набувають числових значень у
- 55:00своїй області типи обмежень
- 55:02різнитимуться в залежності від
- 55:05завдання задоволення обмежень
- 55:08проявляється в будь-якій ситуації де є
- 55:11змінні на які накладено
- 55:13обмеження розглянемо це на прикладі
- 55:16популярної гри судоку це ігрове поле 9х9
- 55:20де потрібно заповнити числами кожну
- 55:22клітинку так щоби в жодному рядку чи
- 55:24стовпчику чи в полі 3 на3 не було
- 55:26повторюваного
- 55:28числа отже чому ж це завдання
- 55:31задоволення обмежень тут змінні - це всі
- 55:35порожні клітинки в судоку вони
- 55:37представлені тут так само як координати
- 55:40XY це клітинки в які потрібно вставити
- 55:43значення Але я не знаю якого саме
- 55:45значення Вони мають набути областю
- 55:47визначення будуть усі числа від одного
- 55:50до девяти будь-яке значення яке я можу
- 55:52вписати в клітинку це область для кожної
- 55:55і цих змінних а обмеження тоді матимуть
- 55:57таку форму ця клітинка не може
- 56:00дорівнювати цій клітинці не може
- 56:02дорівнювати цій клітинці і так далі і
- 56:05всі вони мають бути різними і однаковими
- 56:08для всіх рядків стовпчиків і квадратів
- 56:103х3ри Таким чином обмеження
- 56:12визначатимуть які значення насправді
- 56:14дозволені ми можемо сформулювати ту саму
- 56:16ідею у завданні про розклад іспитів
- 56:19змінними будуть предмети від a до G
- 56:21область визначення для кожної з цих
- 56:23змінних будуть по понеділок вівторок і
- 56:25середа це можливі значення яких може
- 56:28набувати кожна змінна що в цьому випадку
- 56:30Просто показує коли відбувається іспит з
- 56:33цього предмета обмеження матимуть Такий
- 56:36вигляд a не дорівнює b a не дорівнює C
- 56:38тобто іспити з a і b не можуть бути в
- 56:40один день іспити з A і C не можуть бути
- 56:42в один день або більш формально Ці дві
- 56:45змінні не можуть набувати однакових
- 56:46значень у межах своєї області
- 56:50визначення Отже це формулювання завдання
- 56:53задоволення обмеж
- 56:55ми можемо його використовувати щоб
- 56:57вирішити це завдання обмеження можуть
- 56:59мати різні форми існують жорсткі
- 57:02обмеження які повинні бути виконані для
- 57:05отримання правильного рішення наприклад
- 57:07як у судоку ви не можете допустити щоб
- 57:10ця клітинка і ця клітинка які
- 57:12розташовані поруч набували однакового
- 57:15значення це жорстке обмеження але
- 57:17завдання можуть мати і м'які обмеження
- 57:20вони виражають певне поняття переваги
- 57:22наприклад іспити з a і b не можуть бути
- 57:24в один день Але хтось вважає за краще
- 57:26щоб іспит a відбувся раніше ніж іспит B
- 57:29не обов'язково Саме так але має бути
- 57:31певне вираження того що певне рішення
- 57:34краще за інше рішення і в такому випадку
- 57:36ви можете сформулювати завдання як
- 57:38спробу оптимізації для максимізації
- 57:41вподобань людей ви хочете щоби
- 57:43вподобання людей були задоволені
- 57:45максимально однак у цьому випадку ми
- 57:47здебільшого матимемо справу з жорсткими
- 57:50обмеженнями які мають бути виконані щоб
- 57:52отримати правильне рішення ми хочемо з
- 57:54з'ясувати які значення будуть присвоєні
- 57:56цим змінним щоб зрештою дозволити нам
- 57:59вирішити завдання дозволивши призначити
- 58:01певний день кожному предмету так щоби не
- 58:04виникало конфліктів Виявляється що ми
- 58:06можемо класифікувати обмеження в
- 58:08завданні задоволення обмежень на кілька
- 58:11різних категорій перша з цих категорій
- 58:13мабуть найпростіші типи обмежень відомі
- 58:16як унарні обмеження це обмеження яке
- 58:19містить лише одну змінну наприклад
- 58:21унарним обмеженням може бути Щось на
- 58:23кшталт е не дорівнює понеділок Що
- 58:26означає що іспит з предмета a неможливий
- 58:28у понеділок якщо з якихось причин
- 58:31викладача в понеділок не буде У завданні
- 58:33може бути отаке обмеження воно містить
- 58:35лише одну змінну a і може означати що a
- 58:38не дорівнює понеділку або a дорівнюю
- 58:41чомусь або у випадку з числами більше
- 58:43або менше чогось обмеження яке має лише
- 58:46одну змінну вважаємо унарним обмеженням
- 58:49є ще бінарне обмеження тобто обмеження
- 58:51які містить дві змінні це буде обмеження
- 58:55накшталт тих які ми розглядали раніше
- 58:58Щось на кшталт a не дорівнює b є
- 59:00прикладом бінарного обмеження тому що це
- 59:02обмеження в якому беруть участь дві
- 59:04змінні a і b і Ми представили це за
- 59:07допомогою дуги або ребра яке з'єднує
- 59:09змінну a зі змінною
- 59:12B використовуючи знання про унарне
- 59:15обмеження і бінарне обмеження ми можемо
- 59:17багато чого сказати про завдання
- 59:19задоволення
- 59:20обмежень Наприклад ми можемо спробувати
- 59:23зробити вузол суміс
- 59:25що означає сумісність
- 59:27вузла що всі значення в області
- 59:30визначення змінної задовольняють унарні
- 59:32обмеження цієї змінної для кожної
- 59:35змінної в завданні якщо всі її значення
- 59:38задовольняють унарні обмеження для цією
- 59:40змінною ми можемо сказати що все
- 59:43завдання має вузлову сумісність або ми
- 59:45навіть можемо сказати що певна змінна
- 59:48має вузлову сумісність якщо ми просто
- 59:50хочемо зробити один вузол сумісним
- 59:53усередині неї
- 59:56як це показати графічно розглянемо
- 59:58спрощений приклад де замість купи різних
- 1:00:01предметів ми візьмемо лише два предмети
- 1:00:03a та b іспит кожного з яких проходить у
- 1:00:06понеділок вівторок або середу Отже це
- 1:00:09область визначення змінної a а це
- 1:00:11область змінної B і уявімо що в нас є
- 1:00:14такі обмеження a не дорівнює понеділку b
- 1:00:17не дорівнює вівторку b не дорівнює
- 1:00:19понеділку a не дорівнює b Отакі
- 1:00:21обмеження для цього конкретного завдання
- 1:00:23тепер ми можемо спробувати забезпечити
- 1:00:25вузлову сумісність це означає що ми
- 1:00:28переконуємося що всі значення в області
- 1:00:31будь-якої змінною задовольняють її
- 1:00:33унарні
- 1:00:35обмеження починаємо зі спроби зробити
- 1:00:38вузол A сумісним чи він
- 1:00:41сумісний чи кожне значення в області a
- 1:00:44задовольняє його унарні обмеження
- 1:00:47Спочатку ми побачимо що понеділок не
- 1:00:49задовольняє унарні обмеження вузла a
- 1:00:52тому що ми маємо унарне обмеження що A
- 1:00:54дорівнює понеділку однак понеділок є в
- 1:00:57області a Отже це вузлова не сумісність
- 1:01:00тому що в області визначення є понеділок
- 1:01:03але це недопустиме значення для цього
- 1:01:06вузла як же зробити цей вузол сумісним
- 1:01:09для цього потрібно вилучити понеділок з
- 1:01:11області a тепер a може бути тільки у
- 1:01:14вівторок або середу тому що обмеження
- 1:01:17показувало що a не дорівнює
- 1:01:19понеділку На цьому етапі a тепер
- 1:01:22сумісний вузол для кожного значення
- 1:01:25якого може набувати Ей вівторок і середа
- 1:01:28не існує унарного обмеження Яке би
- 1:01:31суперечило цій ідеї не існує обмежень
- 1:01:33які б говорили що a не може бути у
- 1:01:35вівторок або що a не може бути в середу
- 1:01:38тепер ми можемо звернути увагу на Бій
- 1:01:40Бій також має область понеділок вівторок
- 1:01:42і середа і ми можемо почати перевіряти
- 1:01:45чи задовольняють ці зміні унарні
- 1:01:46обмеження ось унарна обмеження B не
- 1:01:49дорівнює
- 1:01:50вівторку воно не задовольняється цією
- 1:01:53областю ви значення понеділок вівторок і
- 1:01:55середа тому що вівторок - це можливе
- 1:01:58значення якого може набувати змінна бі
- 1:02:00не сумісне з унарним обмеженням що B не
- 1:02:04дорівнює вівторку щоб розв'язати цю
- 1:02:06проблему ми видалимо вівторок з області
- 1:02:09B тепер область B містить лише понеділок
- 1:02:11і середу але як виявляється є ще одне
- 1:02:14унарне обмеження яке ми наклали на
- 1:02:16змінну b b не дорівнює понеділку це
- 1:02:19означає що це значення понеділок в
- 1:02:21області B не сумісне з унарними
- 1:02:23обмеження б бо є обмеження яке говорить
- 1:02:26що бі не може бути понеділком а отже
- 1:02:29видаляємо понеділок з області бі ми
- 1:02:31переглянули всі унарні обмеження Ми ще
- 1:02:34не розглядали це бінарне обмеження але
- 1:02:36ми розглянули всі унарні обмеження тобто
- 1:02:39обмеження які містять лише одну змінну і
- 1:02:42ми переконалися що кожен вузол
- 1:02:44відповідає цим унарним обмеженням тепер
- 1:02:46ми можемо сказати що ми забезпечили
- 1:02:48вузлову сумісність що для кожного з цих
- 1:02:51можливих вузлів ми можемо вибрати
- 1:02:53будь-яке з значення в області і не буде
- 1:02:56порушено жодного унарного
- 1:03:00обмеження Таким чином вузлову сумісність
- 1:03:02досить легко забезпечити Ми беремо кожен
- 1:03:05вузол І переконуємося що значення в
- 1:03:07області задовольняють унарні обмеження
- 1:03:11трохи цікавіше стає коли ми розглядаємо
- 1:03:13різні типи сумісності наприклад дугову
- 1:03:16сумісність дугова сумісність означає що
- 1:03:19всі значення в області змінної
- 1:03:20задовольняють бінарні обмеження змінної
- 1:03:23тобто коли ми намагаємося привести a до
- 1:03:25дугової сумісності ми вже не просто
- 1:03:28розглядаємо унарні обмеження які
- 1:03:30стосуються a Ми намагаємося врахувати
- 1:03:33всі бінарні обмеження які стосуються a
- 1:03:36тобто будь-яке ребро яке з'єднує a з
- 1:03:39іншою змінною всередині графа обмежень
- 1:03:41який ми розглядали раніше Якщо говорити
- 1:03:44більш формально то дуга - Це просто інше
- 1:03:47слово для позначення ребра яке з'єднує
- 1:03:50два вузли всередині графа обмежень ми
- 1:03:52можемо визначити дугову сумі місність
- 1:03:54трохи точніше для того щоб зробити
- 1:03:57змінну
- 1:03:58дугосумісною по відношенню до змінної y
- 1:04:01нам потрібно Видалити будь-який елемент
- 1:04:03з області визначення
- 1:04:05щоб переконатися що кожен вибір в
- 1:04:08області
- 1:04:09має можливий вибір для
- 1:04:12y інакше кажучи якщо у мене є зміна
- 1:04:15яку я хочу зробити дугосумісною то мені
- 1:04:18потрібно переглянути всі можливі
- 1:04:19значення яких може набувати х і
- 1:04:22переконатися що для всіх цих можливих
- 1:04:24значень є вибір який я можу зробити для
- 1:04:26y Якщо між X І Y є дуга щоби
- 1:04:29переконатися що y також має варіант які
- 1:04:32я можу
- 1:04:33вибрати розглянемо приклад повертаючись
- 1:04:36до попереднього прикладу ми вже
- 1:04:38забезпечили вузлову сумісність сказавши
- 1:04:40що a може бути тільки у вівторок або
- 1:04:42середу і не може бути в понеділок і ми
- 1:04:45сказали що область визначення B
- 1:04:47складається лише з середи бо ми знаємо
- 1:04:49що B не дорівнює Ні вівторку ні
- 1:04:52понеділку тепер тепер розглянемо дугову
- 1:04:55сумісність спробуємо зробити a
- 1:04:57дугосумісною із B що означає зробити a
- 1:05:02дугосумісним із B що для будь-якого
- 1:05:05вибору який ми робимо в області
- 1:05:06визначення a існує деякий вибір який ми
- 1:05:09можемо зробити в області B який буде
- 1:05:12сумісним спробуємо для a ми можемо
- 1:05:15вибрати вівторок як можливе значення
- 1:05:17якщо я виберу вівторок для A чи існує
- 1:05:19значення для B яке задовольняє бінарне
- 1:05:21обмеження так у B середа льнить це
- 1:05:24обмеження що a не дорівнює b тому що
- 1:05:27вівторок не дорівнює середі однак якщо
- 1:05:30ми вибрали середу для a тоді в області B
- 1:05:34немає вибору який би задовольняв це
- 1:05:36бінарне обмеження я ніяк не можу вибрати
- 1:05:39для B щось що задовольняє обмеження a не
- 1:05:42дорівнює b бо я знаю що B - це середа
- 1:05:46якщо я коли-небудь потраплю в таку
- 1:05:47ситуацію де побачу що є можливе значення
- 1:05:50для a якого немає в області B і яке не
- 1:05:53задовольняє обмеження тоді це не дугова
- 1:05:56сумісність А щоб зробити його
- 1:05:59дугосумісним Мені потрібно взяти середу
- 1:06:01і вилучити її з області a середа не може
- 1:06:04бути можливим вибором для a бо вона не
- 1:06:07сумісна з цим бінарним обмеженням для B
- 1:06:10не було жодного способу щоб я міг
- 1:06:12вибрати середу для a і при цьому мати
- 1:06:14доступне рішення вибравши щось і для B
- 1:06:18Тепер я зміг забезпечити дугову
- 1:06:20сумісність і таким чином розв'язав
- 1:06:22завдання маючи обмеження що іспити з a і
- 1:06:26b не можуть бути або в понеділок або у
- 1:06:28вівторок або в середу єдине рішення
- 1:06:30полягає в тому що іспит a має бути у
- 1:06:32вівторок а іспит бі у
- 1:06:34середу і це єдиний доступний
- 1:06:38варіант якщо ми хочемо застосувати
- 1:06:40послідовність до більшого графа а не
- 1:06:43просто розглядати одну конкретну пару є
- 1:06:45способи зробити і це ми можемо створити
- 1:06:48псевдокод для написання алгоритму який
- 1:06:50забезпечує дугову сумісність і ми
- 1:06:52почнемо з визна функції під назвоюise за
- 1:06:56вхідні даніise бере csp інакше відомо як
- 1:07:00завдання задоволення обмежень а також
- 1:07:02дві змінні X І Y вай зробить
- 1:07:06дугосумісною по відношенню до y тобто
- 1:07:08виділить з області визначення усе що не
- 1:07:11допускає можливого варіанта для
- 1:07:16y Як це працює спочатку відстежимо чи
- 1:07:20виконали ми ваice чи ні команда зрештою
- 1:07:23поверне True або False True у випадку
- 1:07:26якщо ми дійсно внесли зміни в областьі X
- 1:07:28і поверне False якщо ми не внесли жодних
- 1:07:31змін в область X за мить побачимо чому
- 1:07:34це може бути корисно але почнемо з того
- 1:07:36що нехай reваise дорівнює fлse ми не
- 1:07:39внесли ніяких змін потім пройдемося по
- 1:07:42всіх можливих значень в області тобто
- 1:07:44пройдемося по області визначення
- 1:07:46для кожного маленького X в області
- 1:07:49Я хочу переконатися що для кожного з цих
- 1:07:51варіантів Я маю доступний варіант в Y
- 1:07:54який задовольняє бінарні обмеження
- 1:07:56визначені всередині csp всередині
- 1:07:58завдання задоволення обмежень Отже якщо
- 1:08:02станеться так що в області визначення y
- 1:08:04не буде значення y яке задовольняє
- 1:08:07обмеження для І Y тоді це означає що це
- 1:08:11значення не має бути в області
- 1:08:15Тобто ми виділимо із області X і
- 1:08:18встановимо rваise дорівнює True бо я
- 1:08:21змінив область видаливши маленький
- 1:08:24а видалив Я маленький х тому що він не
- 1:08:27був
- 1:08:28госумісним і я ніяк не міг вибрати
- 1:08:30значення для y яке б задовольняло це
- 1:08:33обмеження XY Отже у цьому випадку ми
- 1:08:36продовжимо і встановимо rвай дорівнює
- 1:08:38True будемо робити це знову і знову для
- 1:08:40кожного значення в області
- 1:08:42іноді це може спрацювати іноді це може
- 1:08:45не дозволити робити вибір для y і тоді
- 1:08:47потрібно буде Виділити це значення з
- 1:08:49області
- 1:08:50і в кінці ми просто повертаємо ревай щоб
- 1:08:52вказати чи дійсно ми внесли зміни Отже
- 1:08:55функція reваise є реалізацією того що ви
- 1:08:58бачили графічну хвилину тому вона робить
- 1:09:00одну змінну X дугосумісною з іншою
- 1:09:03змінною в цьому випадку y але загалом
- 1:09:07коли ми хочемо забезпечити
- 1:09:08дугосумісність потрібно забезпечити
- 1:09:11дугосумісність не тільки для однієї дуги
- 1:09:13але й для всього завдання задоволення
- 1:09:15обмежень і Виявляється що для цього
- 1:09:17також існує алгоритм відомий як AC3 AC3
- 1:09:21бере завдання задоволення обмежень і
- 1:09:23забезпе дугосумісність у всьому
- 1:09:26завданні як він це робить Він підтримує
- 1:09:29чергу всіх дуг які йому потрібно зробити
- 1:09:32сумісними з часом ми можемо видаляти
- 1:09:34елементи з цієї черги коли почнемо
- 1:09:37працювати з сумісністю дух можливо
- 1:09:40доведеться додавати щось до цієї черги
- 1:09:42якщо з'явиться більше вузлів які
- 1:09:44потрібно буде зробити дугосумісними Отже
- 1:09:46почнемо з черги яка містить всі дуги
- 1:09:49завдань і задоволення обмежень усі ребра
- 1:09:51які з'єднують вузли що мають між собою
- 1:09:53якесь бінарне
- 1:09:56обмеження покии черга не порожня є
- 1:09:59Робота яку потрібно виконати черга - це
- 1:10:02все те що нам потрібно зробити
- 1:10:05госумісним поки черга не порожня нам Є
- 1:10:08над чим працювати що ми маємо зробити
- 1:10:11почнемо з того що видалимо щось із черги
- 1:10:14і строго кажучи це не обов'язково має
- 1:10:16бути черга але черга - Це традиційний
- 1:10:18спосіб зробити це ми видалимо з черги і
- 1:10:21це дасть нам догу між двома змінними X І
- 1:10:24Y Я хотів би зробити так щоб була
- 1:10:27сумісна з Y Як це зробити Ми можемо
- 1:10:30скористатися функцією rваise про яку ми
- 1:10:32говорили хвилину тому викликаємо функцію
- 1:10:35revise у якої за вхідні дані буде
- 1:10:38завдання задоволення обмеження а також
- 1:10:40змінні і y бо я хочу зробити
- 1:10:43догосумісним з Y інакше кажучи видаілити
- 1:10:46всі значення з області X які не
- 1:10:49залишають доступного варіанта для y
- 1:10:51Пригадайте що повертає функція rріва
- 1:10:54Вона повертає True якщо ми дійсно внесли
- 1:10:56зміни якщо ми видалили щось з області бо
- 1:10:59не було доступного варіанта для y і
- 1:11:02повертає fлse якщо ми взагалі не вносили
- 1:11:04змін в область визначення
- 1:11:06і виходить що якщо вай повертає fлse
- 1:11:08якщо ми не внесли жодних змін тоді для
- 1:11:11цієї дуги немає чого більше робити Ми
- 1:11:13можемо перейти до наступної дуги у черзі
- 1:11:16Але якщо ми внесли зміни якщо зменшили
- 1:11:19область
- 1:11:19видаливши значення з неї тоді це створює
- 1:11:22потенційні проблеми Пізніше це може
- 1:11:25означати що деяка дога яка була сумісна
- 1:11:28з Х цей вузол може більше не бути
- 1:11:32дугосумісним з
- 1:11:34бо якщо раніше існував варіант який ми
- 1:11:36могли вибрати для х То тепер його може
- 1:11:38не бути бо ми видаілили щось із Х для
- 1:11:41того щоб якась інша дуга була
- 1:11:43дугосумісною якщо ми коли-небудь
- 1:11:46переглядали область х потрібно буде
- 1:11:48додати дещо до черги деякі додаткові
- 1:11:51дуги які ми захочемо перевірити як нам
- 1:11:54це зробити Спершу ми переконаємося що
- 1:11:56область X не дорівнює нулю якщо область
- 1:11:59x дорівнює 0лю це означає що для взагалі
- 1:12:01Немає доступних варіантів Тобто ви не
- 1:12:04можете вирішити завдання задоволення
- 1:12:06обмежень якщо ми видалили все з області
- 1:12:09визначення ми повернемо значення fлse
- 1:12:12яке означає що виконати завдання
- 1:12:14неможливо бо в області х нічого не
- 1:12:16лишилося проте якщо в області х лишилися
- 1:12:19змінні але їх стало менше тоді ми
- 1:12:21переберемо кожну змінну Z яка є у всіх
- 1:12:24сусідів X окрім
- 1:12:27y з Y ми вже розібралися але ми
- 1:12:30розглянемо всіх інших сусідів
- 1:12:32і запитаємо себе чи не буде більше
- 1:12:35дугосумісної дуга від кожної із цих Z до
- 1:12:38X бо якщо для кожного Z ми могли вибрати
- 1:12:41варіант який відповідав би кожному з
- 1:12:43можливих значень
- 1:12:44То тепер такого варіанта може не бути
- 1:12:46тому що ми видалили деякі елементи з
- 1:12:49області
- 1:12:50Тому далі ми продовжимо ставити в чергу
- 1:12:52додаючи щось до неї дугу ZX для всіх
- 1:12:56сусідніх Z Отже нам потрібно додати ще
- 1:12:59кілька дух до черги щоби продовжувати
- 1:13:02забезпечувати сумісність дух у самому
- 1:13:04кінці якщо ми пройдемо через весь процес
- 1:13:06ми зможемо повернути тру Але це вже AC3
- 1:13:09алгоритм для забезпечення сумісності дух
- 1:13:12в завданні задоволення обмежень основна
- 1:13:15ідея полягає в тому щоб просто
- 1:13:16відстежувати всі дуги які можуть
- 1:13:18знадобитися для забезпечення сумісності
- 1:13:20дух зробити дугу сумісною можна за
- 1:13:22допомогою функції А якщо ми її
- 1:13:25переглянули то можливо до черги потрібно
- 1:13:27буде додати нові дуги щоб переконатися
- 1:13:29що все лишається дугосумісним навіть
- 1:13:32після того як ми виділимо деякі елементи
- 1:13:34з області визначення певної
- 1:13:36змінної що ж станеться якщо ми спробуємо
- 1:13:40застосувати сумісність дух на такому
- 1:13:42графі де кожна змінна має область що
- 1:13:44складається з понеділка вівторка і
- 1:13:46середи Виявляється що застосування
- 1:13:48сумісності дух на цьому графі нічого не
- 1:13:51змінює Хоча і може вирішити деякі
- 1:13:53проблеми для будь-якої конкретної дуги
- 1:13:56Що розглядає дві зміні завжди є спосіб
- 1:13:59пристосуватися до будь-якого вибору який
- 1:14:01я роблю для однієї з них і зробити вибір
- 1:14:04для іншої тому що є три варіанти і Мені
- 1:14:06просто потрібно щоб ці два різнилися
- 1:14:09насправді легко взяти дугу І заявити що
- 1:14:11вона дугосумісна бо якщо я виберу
- 1:14:14понеділок для дії а потім виберу щось що
- 1:14:16не є понеділком для бі в сумісності дух
- 1:14:19ми розглядаємо сумісність тільки між
- 1:14:21бінарними обмеженнями між двома вузлами
- 1:14:24і ми ще не розглядаємо всі інші
- 1:14:27вузли використання AC3 забезпечення
- 1:14:30сумісності дух Іноді може мати ефект
- 1:14:32зменшення області визначення щоби
- 1:14:35полегшити пошук рішень але це не завжди
- 1:14:37вирішує
- 1:14:38проблему можливо Нам все одно доведеться
- 1:14:41шукати щоби знайти рішення для цього ми
- 1:14:44можемо використовувати класичні
- 1:14:46традиційні алгоритми пошуку ви
- 1:14:48пам'ятаєте що завдання пошуку зазвичай
- 1:14:51складається з таких частин є початковий
- 1:14:53стан дії модель переходу яка переводить
- 1:14:55мене з одного стану в інший перевірка
- 1:14:57цілі яка показує чи правильно я
- 1:14:59задовольнив ціль і функція вартості
- 1:15:01шляху тому що у випадку проходження
- 1:15:03лабіринту Я намагався дістатися до цілі
- 1:15:06якомога швидше Отже ви можете
- 1:15:09сформулювати csp або завдання
- 1:15:11задоволення обмежень як один з цих типів
- 1:15:14завдань пошуку початковим станом буде
- 1:15:16порожнє присвоєння де присвоєння це
- 1:15:18спосіб присвоїти будь-які змінні і
- 1:15:20будь-яке конкретне значення якщо це
- 1:15:23порожнє значення тобто жодні змінні ще
- 1:15:26не присвоєно жодного значення тоді
- 1:15:28єдиною дією яку я можу виконати буде
- 1:15:31додавання до нього пари змінна дорівнює
- 1:15:33значення тобто я додам нове значення для
- 1:15:36цієї змінної а модель переходу визначає
- 1:15:39що відбувається коли ви виконуєте цю дію
- 1:15:43ви отримуєте нове присвоєння в якому ця
- 1:15:45змінна дорівнює цьому значенню перевірка
- 1:15:48цілі - це перевірка того чи всі змінні
- 1:15:50були присвоєні і чи всі обмеження були
- 1:15:52виконані а функція вартості шляху не має
- 1:15:55значення Мене не цікавить шлях Мене
- 1:15:58цікавить лише те щоб знайти таке
- 1:15:59присвоєння яке задовольняє всі обмеження
- 1:16:02тому всі шляхи мають однакову вартість
- 1:16:05Мене не цікавить шлях до цілі Мене
- 1:16:07цікавить лише рішення про що ми вже
- 1:16:10говорили
- 1:16:12раніше проблема в тому що якщо ми просто
- 1:16:14реалізуємо цей наївний алгоритм пошуку
- 1:16:17реалізуючи пошук у ширину або пошук у
- 1:16:20глибину Це буде дуже неефективно існують
- 1:16:22способ би скористатися перевагами
- 1:16:24ефективності в структурі самого завдання
- 1:16:26задоволення обмежень і одна з ключових
- 1:16:28ідей полягає в тому що ми можемо просто
- 1:16:31впорядкувати ці змінні і немає значення
- 1:16:33в якому порядку Ми присвоюємо змінні A =
- 1:16:362 а потім B = 8 це буде те саме що і b
- 1:16:40рі 8 а потім a Дор 2 зміна порядку
- 1:16:43нічого не змінює у фундаментальній
- 1:16:46природі
- 1:16:47присвоювання є кілька способів якими ми
- 1:16:50можемо спробувати переглянути ідею
- 1:16:52алгоритму пошуку щоби застосувати її
- 1:16:55конкретно до завдання задоволення
- 1:16:56обмежень Виявляється що алгоритм пошуку
- 1:16:59який ми зазвичай використовуємо коли
- 1:17:01говоримо про завдання задоволення
- 1:17:03обмежень називається пошук З поверненням
- 1:17:06Його ідея полягає в тому що ми будемо
- 1:17:08йти вперед і робити присвоєння від
- 1:17:09змінних до значень А якщо ми коли-небудь
- 1:17:12застрягнемо дійдемо до місця де не
- 1:17:14зможемо йти вперед зберігаючи при цьому
- 1:17:16обмеження які нам потрібно виконати ми
- 1:17:19повернемося назад і спробуємо натомість
- 1:17:21щось інше
- 1:17:23ось найпростіший приклад пошуку у
- 1:17:25зворотному напрямку функція backтрек яка
- 1:17:28бере за вхідні дані присвоєння і
- 1:17:31завдання задоволення обмежень спочатку в
- 1:17:33нас немає жодних присвоєних змінних коли
- 1:17:35ми запустимо пошук З поверненням це
- 1:17:37присвоєння буде порожним без жодних
- 1:17:40змінних усередині але пізніше ми
- 1:17:42побачимо що це буде рекурсивна функція
- 1:17:45Отже функція backктraк приймає за вхідні
- 1:17:47дані присвоєння і завдання якщо
- 1:17:49присвоєння завершено Тобто всі зміні
- 1:17:52присвоєно ми повертаємо присвоєння
- 1:17:54звісно Спочатку це буде не так Оскільки
- 1:17:56ми починаємо з порожнього значення Але з
- 1:17:59часом ми можемо додати щось до нього і
- 1:18:01якщо коли-небудь присвоєння буде
- 1:18:03завершено тоді все ми його просто
- 1:18:05повернемо але Якщо ні тоді Є над чим
- 1:18:08працювати нам потрібно вибрати
- 1:18:10неприсвоєну зміну для цього конкретного
- 1:18:13завдання потрібно взяти завдання
- 1:18:15подивитися на змінні які вже було
- 1:18:17присвоєно і вибрати змінну яку ще не
- 1:18:20було
- 1:18:21присвоєно Я виберу таку змінну а потім
- 1:18:24Мені потрібно врахувати всі значення в
- 1:18:26області цієї змінної викличемо функцію
- 1:18:29domain values поговоримо про неї пізніше
- 1:18:32яка візьме змінну і поверне мені
- 1:18:33впорядкований список всіх значень її
- 1:18:36області визначення я взяв випадково
- 1:18:38невибрану змінну Я збираюся перебрати
- 1:18:41всі можливі значення ідея в тому що я
- 1:18:43просто спробую всі ці значення як
- 1:18:45можливі значення
- 1:18:47змінною і якщо значення поки що
- 1:18:50відповідає призначенню не порушує
- 1:18:52жодного обмеження тоді додамо змінна
- 1:18:55дорівнює значення бо воно поки що
- 1:18:57відповідає призначенню А тепер
- 1:18:59рекурсивно викличемо бектрек щоби
- 1:19:01зробити решту присвоєнь також
- 1:19:05сумісним отже викличемо бектрек з новим
- 1:19:08присвоєнням яке я щойно додав зміна
- 1:19:11дорівнює значення Тепер я рекурсивно
- 1:19:14викликаю бектрак і дивлюся на результат
- 1:19:16якщо результат не невдалий тоді я просто
- 1:19:19поверну
- 1:19:21результат А якщо ні то що ще може
- 1:19:25статися якщо виявиться що результат був
- 1:19:28невдалим тоді це означає що це значення
- 1:19:30було поганим вибором для цієї конкретної
- 1:19:32змінної Бо коли я присвоїв цій змінні це
- 1:19:35значення зрештою я опинився в ситуації
- 1:19:37коли порушив обмеження я більше нічого
- 1:19:40не міг зробити Тому зараз я вилучу
- 1:19:42змінна дорівнює значення з присвоєння
- 1:19:45повернуся назад це значення не
- 1:19:47спрацювало спробуємо замість нього
- 1:19:49інше і в самому кінці якщо ми так і не
- 1:19:52не змогли повернути повне присвоєння ми
- 1:19:54повернемо фейр бо це означає що жодне
- 1:19:57значення не спрацювало для цієї
- 1:19:59конкретної змінної у цьому і полягає
- 1:20:02ідея пошуку З поверненням взяти кожну
- 1:20:04зміну спробувати значення для них і
- 1:20:06спробувати пошук З поверненням щоб
- 1:20:08побачити чи зможемо ми досягти прогресу
- 1:20:11а якщо ми зайдемо в глухий кут у
- 1:20:13ситуації коли немає жодного можливого
- 1:20:15значення яке б задовольняло обмеження ми
- 1:20:17повернемо фейлер і зрештою Ми зробимо
- 1:20:20інший вибір повертаючись назад і
- 1:20:22пробуючи що щось
- 1:20:23інше застосуємо цей алгоритм на практиці
- 1:20:26спробуємо використати пошук З
- 1:20:28поверненням для вирішення цього завдання
- 1:20:30де потрібно з'ясувати який день іспиту
- 1:20:33призначити кожному предмету понеділок
- 1:20:35вівторок чи середу причому так щоб він
- 1:20:37задовольняв обмеження що Кожне з цих
- 1:20:40ребер означає що в один і той самий день
- 1:20:42не може проходити іспит з двох предметів
- 1:20:44я почну з вузла неважливо з якого Але в
- 1:20:47цьому випадку почну з a далі пройдуся по
- 1:20:50значеннях з області у цьому випадку
- 1:20:53почну з понеділка почнемо з понеділка і
- 1:20:55призначимо е підемо по порядку понеділок
- 1:20:57вівторок
- 1:20:59середа тепер розглянемо вузол B я зробив
- 1:21:03присвоєння для a рекурсивно викликав
- 1:21:05бектрек цією новою частиною присвоєння
- 1:21:07Тепер я виберу іншу неприсвоєну зміну
- 1:21:09наприклад B Де також почну з понеділка
- 1:21:12бо це найперше значення в області B
- 1:21:14тепер подумаю чи не порушує понеділок
- 1:21:16якісь обмеження Виявляється що порушує
- 1:21:19він порушує обмеження між A і b тому що
- 1:21:21a і b тепер в понеділок а це не спрацює
- 1:21:25тому що B не може бути в той самий день
- 1:21:27що і a Отже це не спрацює тому замість
- 1:21:30цього спробуємо вівторок наступне
- 1:21:32значення в області B чи відповідає це
- 1:21:34поставленому завданню так b- вівторок a-
- 1:21:37понеділок поки що відповідаю тому що
- 1:21:39вони не в один день Це добре Тепер ми
- 1:21:41можемо рекурсивно викликати бектрек і
- 1:21:43спробуємо ще раз виберемо іншу не
- 1:21:45присвоїмо зміну наприклад дії пройдемося
- 1:21:47по її можливих значень чи відповідає
- 1:21:49понеділок цьому присвоєнню Так
- 1:21:51відповідає д - це різні дні понеділок і
- 1:21:54вівторок a b також різні дні понеділок і
- 1:21:57вівторок Поки що все добре спробуємо ще
- 1:22:00раз перейдемо до змінної і Чи можемо ми
- 1:22:03її зробити сумісною перебираємо можливі
- 1:22:05значення ми рекурсивно викликали бектрек
- 1:22:08можемо почати з понеділка сумісності не
- 1:22:10буде тому що іспити з D та і
- 1:22:12відбуваються в один день тож можемо
- 1:22:15спробувати вівторок натомість перейти до
- 1:22:17наступного і запитати чи це буде
- 1:22:19сумісним ні не буде тому що іспити з B
- 1:22:21та і відбуваються вди день Гаразд
- 1:22:23спробуємо середу і середа виявляється
- 1:22:25підходить тому що іспити з D та і тепер
- 1:22:28відбуваються в різні дні іспити з B та і
- 1:22:31також відбуваються в різні дні поки що
- 1:22:33здається все гаразд Я рекурсивно
- 1:22:36викликаю бектрек вибираю іншу
- 1:22:38неприсвоєно змінно цього разу с вибираю
- 1:22:40значення якого може набути с починаю З
- 1:22:44понеділка Виявляється що сумісності
- 1:22:46немає тому що тепер іспити з A і C
- 1:22:49відбуваються в один день і я вибираю
- 1:22:51вівторок він також ж не буде сумісним
- 1:22:53тому що іспити з бій і сі тепер
- 1:22:55відбуваються в один день тоді я спробую
- 1:22:58середу але і середа не підходить тому що
- 1:23:00іспити з C та і теж відбуваються в один
- 1:23:04день ми перебрали всі можливі значення
- 1:23:07для с понеділок вівторок і середу і
- 1:23:09жодне з них не буде сумісним ми ніяк не
- 1:23:12можемо отримати сумісне присвоєння
- 1:23:13бектрек у цьому випадку поверне фейлер і
- 1:23:17тоді ми повернемося аж сюди для вузла і
- 1:23:19ми перебрали і понеділок і вівторок і
- 1:23:21середу і жоден день не спрацював середа
- 1:23:25яка Здавалося б мала спрацювати
- 1:23:27повернулася зі значенням failр це
- 1:23:29означає що ми ніяк не можемо присвоїти
- 1:23:31значення і невдача повертаємося до ді що
- 1:23:34означає що присвоєня понеділка ді теж
- 1:23:36неправильне Треба спробувати щось інше
- 1:23:39Що як замість понеділка ми спробуємо
- 1:23:42вівторок вівторок не підходить тому що
- 1:23:45іспити з біїді тепер в один день а от
- 1:23:48середа
- 1:23:50підходить тепер ми знову можемо
- 1:23:52просуватися вперед повертаємося до і яке
- 1:23:55з цих значень спрацює Виявляється що
- 1:23:57понеділок Тому що він не порушує жодних
- 1:23:59обмежень тоді переходимо до сі понеділок
- 1:24:02не підходить бо порушує обмеження навіть
- 1:24:04два обмеження вівторок не працює Тому що
- 1:24:06також порушує обмеження а от середа
- 1:24:08працює переходимо до наступної змінної F
- 1:24:11понеділок підходить Ні він порушує
- 1:24:13обмеження а вівторок підходить І нарешті
- 1:24:16можемо перевірити останню зміну G
- 1:24:18рекурсивно викликавши бектрек ще раз
- 1:24:20понеділок не буде сумісним тому що
- 1:24:21порушує обмеження вівторок також порушує
- 1:24:24обмеження а от середа не порушує
- 1:24:28обмеження зараз на цьому етапі
- 1:24:30рекурсивно викликаємо бектрек в останньо
- 1:24:33У нас є задовільний розподіл усіх
- 1:24:35змінних На цьому етапі можна сказати що
- 1:24:37ми
- 1:24:38закінчили ми змогли успішно присвоїти
- 1:24:41значення кожній зміні Так що не порушили
- 1:24:44жодних
- 1:24:46обмежень у понеділок будуть іспити з
- 1:24:48предметів a та і у вівторок складатимуть
- 1:24:50іспити з предметів B та F а в середу
- 1:24:52можна провести іспити з предметів CD і G
- 1:24:56і тут немає жодних порушених
- 1:25:00обмежень Це був графічний огляд того як
- 1:25:03це може працювати тепер подивімося який
- 1:25:06код ми можемо використати для того щоби
- 1:25:08вирішити це завдання Я зараз перейду до
- 1:25:13каталога
- 1:25:14scheduel ось ми тут почнемо з перегляду
- 1:25:17schedule 0.p ми тут я визначаю список
- 1:25:21змінних A B C D E FG це все різні класи
- 1:25:26під ними я визначаю список
- 1:25:29обмежень обмеження a і B - це обмеження
- 1:25:32тому що вони не можуть бути в один день
- 1:25:34так само A і C b c і так далі всі пари
- 1:25:38обмежень і ось який вигляд може мати
- 1:25:40функція
- 1:25:42backtrack
- 1:25:43по-перше якщо присвоєння завершено якщо
- 1:25:46я присвоїв кожній зміні значення просто
- 1:25:49поверніть
- 1:25:51його потім ми беремо неприсвоєну змінну
- 1:25:54з цього присвоєння потім для кожного з
- 1:25:56можливих значень у області визначення
- 1:25:58понеділок вівторок середа створимо нове
- 1:26:00присвоєння яке присвоює змінній це
- 1:26:03значення я назву цю функцію consistн Ось
- 1:26:07я її показує вона перевіряє чи нове
- 1:26:10присвоєння сумісне якщо воно сумісне ми
- 1:26:12викличемо функцію backтraк щоб
- 1:26:14продовжити виконання пошуку З
- 1:26:15поверненням І доки результат не nн Тобто
- 1:26:18нефейлер ми можемо продовжити і
- 1:26:20повернути цей результат Але якщо ми
- 1:26:23перебираємо всі значення і нічого не
- 1:26:25виходить тоді розв'язку немає ми
- 1:26:27повертаємо
- 1:26:29нан що роблять ці функції Select unite
- 1:26:33variable вибирає зміну яку ще не
- 1:26:35присвоєно вона перебирає всі зміні і
- 1:26:37якщо вона ще не призначена ми повернемо
- 1:26:39цю змінну А що робить функція
- 1:26:43consнistн вона перебирає всі
- 1:26:46обмеження якщо ми маємо ситуацію коли ми
- 1:26:49присвоїли змінним обидва значення але
- 1:26:52вони однакові то це порушення обмеження
- 1:26:55і в цьому випадку ми повернемо фолse але
- 1:26:58якщо нічого не суперечи тоді присвоєння
- 1:27:01сумісне і повернеться
- 1:27:03True І тоді все що робить програма це
- 1:27:06викликає бектрек до порожнього значення
- 1:27:09порожнього словника у якому ще не
- 1:27:10присвоєно жодної змінною і немає жодних
- 1:27:12значень зберігаю його всередині
- 1:27:14розв'язку а потім виводить його на екран
- 1:27:17запустивши цю програму я запускаю Python
- 1:27:20schedule 0.p
- 1:27:22і в результаті я отримую присвоєння
- 1:27:24значень усім цим змінним Виявляється що
- 1:27:27ми присвоюємо е понеділок як її слід
- 1:27:30було очікувати бій вівторок с середа
- 1:27:32тобто саме про це ми говорили раніше про
- 1:27:34присвоєння кожній змінні значень які не
- 1:27:37порушують жодних
- 1:27:39обмежень мені довелося виконати чималий
- 1:27:41обсяг роботи щоб реалізувати цю ідею
- 1:27:43самому довелося написати функцію бектрек
- 1:27:46яка рекурсивно намагалася здійснити цей
- 1:27:48пошук З поверненням але Виявляється що
- 1:27:50завдання задоволення межень настільки
- 1:27:52популярні що існує багато бібліотек які
- 1:27:55вже реалізують подібні ідеї знову ж таки
- 1:27:58як і раніше конкретна бібліотека не
- 1:28:00настільки важлива Як сам факт існування
- 1:28:03бібліотек це лише один з прикладів
- 1:28:05бібліотеки обмежень python де замість
- 1:28:07того щоб пробити всю роботу з нуля
- 1:28:09всередині schedle 1.p я просто
- 1:28:11використовую бібліотеку яка вже реалізує
- 1:28:14багато з цих ідей я створюю нове
- 1:28:16завдання додам до нього зміні з певними
- 1:28:18областями визначення додаю купу
- 1:28:21індивідуальних обмежень викликаю Add
- 1:28:23constraint і передаю функцію яка описує
- 1:28:26що це за обмеження обмеження переважно
- 1:28:29говорить що це функція яка приймає дві
- 1:28:31змінні X І Y і гарантує що не дорівнює y
- 1:28:34забезпечуючи ідею що не можна в один
- 1:28:37день скласти іспити з цих двох предметів
- 1:28:39а потім для будь-якої задачі на
- 1:28:41задоволення обмежень я можу викликати
- 1:28:43Get Solutions щоб отримати всі розв'язки
- 1:28:46цієї задачі а потім для кожного з цих
- 1:28:49розв'язків роздрукувати те що це за
- 1:28:51розв'язок і якщо я запущу python
- 1:28:53schedule 1.p то побачу що насправді
- 1:28:56Існує декілька різних рішень які можна
- 1:28:58використати для розв'язання проблеми
- 1:29:00насправді є шість різних рішень
- 1:29:02присвоєння змінним значення які дадуть
- 1:29:04мені задовільну відповідь на це завдання
- 1:29:06задоволення обмежень Отже це була
- 1:29:09реалізація дуже простого пошуку З
- 1:29:11поверненням де ми перебирали всі змінні
- 1:29:13вибирали ту якій Не було присвоєного
- 1:29:15нічого пробували можливі значення яких
- 1:29:17вона могла набути і якщо це не
- 1:29:19порушувало жодних обмежень ми продовжули
- 1:29:22пробувати інші змінні А якщо заходили в
- 1:29:25глухий кут то поверталися але ми могли
- 1:29:28би діяти більш розумно щоби підвищити
- 1:29:30ефективність вирішення подібних завдань
- 1:29:33Наприклад ми могли би повернутися до
- 1:29:35ідеї висновку використовуючи знання які
- 1:29:39ми знаємо щоби мати можливість робити
- 1:29:41висновки і зробити решту процесу
- 1:29:43вирішення
- 1:29:45простішим А тепер повернемося до того
- 1:29:48місця де Ми застрягли вперше коли ми
- 1:29:51вирішували завдання задоволення обмежень
- 1:29:54Ми розібралися з бій а потім перейшли до
- 1:29:57дії і присвоїли її значення понеділок бо
- 1:29:59здавалося що має бути саме так і що
- 1:30:02обмеження не порушуються але згодом
- 1:30:04виявилося що вибір невдалий що він не
- 1:30:06був сумісним зрештою значені у чому
- 1:30:09полягає питання Чи можемо ми
- 1:30:11використовуючи знання які маємо на
- 1:30:13початковому етапі щось зробити щоб
- 1:30:16уникнути такої ситуації щоб не йти
- 1:30:18шляхом який зрештою нікуди не приведе
- 1:30:23Виявляється що ми маємо подібні знання
- 1:30:26Ми можемо подивитися на структуру графа
- 1:30:28і можемо сказати що зараз наприклад
- 1:30:31область с містить значення понеділок
- 1:30:33вівторок і
- 1:30:35середа і на основі цих значень ми можемо
- 1:30:38сказати що цей граф не
- 1:30:41дугосумісний нагадаю що сумісність дух
- 1:30:43полягає в тому що для кожного можливого
- 1:30:45значення вузла існує деяке інше значення
- 1:30:49яке ми можемо вибрати як видно тут
- 1:30:52понеділок і вівторок не будуть можливими
- 1:30:54значеннями які ми можемо вибрати для с
- 1:30:57Вони не будуть сумісними з вузлом B тому
- 1:31:00що b дорівнює вівторку а це означає що C
- 1:31:03не може бути вівторком А оскільки A
- 1:31:06дорівнює понеділку C також не може бути
- 1:31:08понеділком використовуючи цю інформацію
- 1:31:11зробивши C догосумісним з a і b ми
- 1:31:15можемо видалити понеділок і вівторок з
- 1:31:17області визначення Сі і залишити Сі і
- 1:31:20середою якщо ми продовжимо забезпечувати
- 1:31:23сумісність дух то побачимо що можна
- 1:31:25зробити й інші висновки ми бачимо що
- 1:31:28єдиним варіантом для b є вівторок А
- 1:31:30єдиним варіантом для с середа якщо ми
- 1:31:33хочемо зробити і дугосумісним то і не
- 1:31:35може бути вівторком бо не буде
- 1:31:37госумісним із B і не може бути середою
- 1:31:40бо не буде довгосумісним із C тому ми
- 1:31:43встановлюємо для і значення понеділок а
- 1:31:46потім повторимо цей процес щоб зробити
- 1:31:48ді довгосумісним із B і і ді має бути
- 1:31:52середою це єдиний можливий варіант і так
- 1:31:54само ми можемо зробити ті самі висновки
- 1:31:56для F і G Виявляється що без додаткового
- 1:32:00пошуку просто застосувавши сумісність
- 1:32:02дух ми змогли з'ясувати Що слід
- 1:32:04присвоювати кожній зміні причому без
- 1:32:07повернення суть цього процесу полягає в
- 1:32:10тому щоби ми чергували процес пошуку і
- 1:32:14висновки коли намагалися застосувати
- 1:32:17сумісність дух цей алгоритм часто
- 1:32:19називають підтримкою сумісності дух він
- 1:32:23застосовує сумісність дух щоразу коли ми
- 1:32:26присвоюємо нове значення
- 1:32:29змінні іноді ми можемо застосувати
- 1:32:32сумісність дух за допомогою алгоритму
- 1:32:34AC3 на самому початку завдання ще до
- 1:32:37того як почнемо пошук щоб обмежити
- 1:32:40область змінних і полегшити пошук але ми
- 1:32:44також можемо скористатися перевагами
- 1:32:46чергування пошуку та сумісності дух
- 1:32:48щоразу в процесі пошуку коли ми робимо
- 1:32:51нове прис двоєння Ми також застосовуємо
- 1:32:53сумісність дух щоби переконатися що що
- 1:32:56ми виключаємо можливість значення з
- 1:32:57областей визначення де це можливо як же
- 1:33:00ми це робимо це еквівалентно тому що
- 1:33:03кожного разу коли ми присвоюємо нове
- 1:33:05значення змінні ми будемо викликати
- 1:33:07алгаритм AC3 який забезпечує сумісність
- 1:33:10дух у завданні задоволення обмежень Ми
- 1:33:13почнемо з черги не з усіх дух які ми
- 1:33:15робили спочатку а лише з тих дух які ми
- 1:33:18хочемо зробити сумісними з
- 1:33:20тобто зі змінною яй Ми щойно присвоїли
- 1:33:23значення тобто з усіх дух yx dy - це
- 1:33:27сусідх тобто має спільне обмеження з
- 1:33:32підтримуючи послідовність під час пошуку
- 1:33:34з повернення ми можемо зробити процес
- 1:33:36пошуку трохи
- 1:33:38ефективнішим це переглянута версія
- 1:33:40функції
- 1:33:42backtrack зміни виділено жовтим кольором
- 1:33:45як і раніше щоразу коли ми додаємо
- 1:33:48змінна дорівнює значення ми запускаємо
- 1:33:50процедуру висновку яка може робити
- 1:33:52багато різних речей одна з яких - це
- 1:33:55виклик алгоритму підтримки сумісності
- 1:33:56дух щоби переконатися що ми можемо
- 1:33:59забезпечити сумісність дух у завданні у
- 1:34:02результаті цього процесу ми зможемо
- 1:34:03зробити нові висновки наприклад отримати
- 1:34:06нові гарантії того що ця змінна має
- 1:34:08дорівнювати цьому значенню Це може
- 1:34:11статися один раз чий багато разів Якщо
- 1:34:13ці висновки не невдалі якщо вони не
- 1:34:16призводять до ситуації коли немає
- 1:34:17жодного можливого способу просунутися
- 1:34:19вперед тоді ми можемо продовжити
- 1:34:22додавати ці висновки ті нові знання які
- 1:34:24я знаю про те яким змінним слід
- 1:34:27присвоїти які значення я можу додати їх
- 1:34:30до присвоєння щоб швидше просуватися
- 1:34:32вперед використовуючи інформацію яку я
- 1:34:35можу просто вивести інформацію яку я
- 1:34:37знаю виходячи з решти структури завдання
- 1:34:39задоволення обмежень є ще одна зміна яку
- 1:34:41потрібно буде внести якщо виявиться що
- 1:34:44це значення не працює то тут потрібно
- 1:34:46буде видалити Не тільки змінна дорівнює
- 1:34:48значення але й усі висновки які я зробив
- 1:34:53отак можна вирішити завдання
- 1:34:54повертаючись назад не так часто ніж
- 1:34:57спочатку просто скориставшись тим фактом
- 1:34:59що кожного разу коли ми присвоюємо
- 1:35:01змінні і нове значення це може зменшити
- 1:35:04області визначення інших змінних Також
- 1:35:07ми можемо використовувати цю інформацію
- 1:35:09щоби швидше робити висновки і вирішувати
- 1:35:11завдання
- 1:35:13ефективніше Виявляється що є й інші
- 1:35:16евристики які ми можемо використовувати
- 1:35:18щоби підвищити ефективність процесу
- 1:35:20пошуку усе зводиться до кількох функцій
- 1:35:23про які я вже говорив але не говорив як
- 1:35:26вони працюють одна з них функція Select
- 1:35:30un Inside variable де ми вибираємо якусь
- 1:35:34змінну завдані задоволення обмежень які
- 1:35:36ще не було присвоєно значення досі я
- 1:35:39вибирав змінні навмання просто вибирав
- 1:35:41одну змінну без присвоєного значення
- 1:35:44просто вирішував що ця зміна буде
- 1:35:46наступною а потім будемо рухатися далі
- 1:35:48та виявляється що трішки подумавши
- 1:35:50дотримуючись певних евристик ми можемо
- 1:35:53зробити процес пошуку набагато
- 1:35:54ефективнішим просто ретельно обираючи
- 1:35:57яку змінну досліджувати
- 1:36:00далі наприклад евристика мінімальних
- 1:36:03залишкових значень або mrv евристика що
- 1:36:07це означає якщо в мене є вибір яку зміну
- 1:36:09вибрати Я маю вибрати зміну з найменшою
- 1:36:12областю визначення зміну яка має
- 1:36:14найменшу кількість залишкових значень
- 1:36:17ідея в тому що якщо Лишилося тільки два
- 1:36:19залишкові значення Я можу дуже швидко
- 1:36:21відкинути одне з них щоби дістатися до
- 1:36:24іншого бо одне з цих двох значень має
- 1:36:26бути рішенням якщо рішення існує А іноді
- 1:36:30мінімальні залишкові значення можуть не
- 1:36:31дати переконливого результату Наприклад
- 1:36:34якщо всі вузли мають однакову кількість
- 1:36:37залишкових значень У такому випадку може
- 1:36:39бути корисною ще одна евристика - Це
- 1:36:41евристика степені степінь вузла - це
- 1:36:43кількість вузлів які приєднані до цього
- 1:36:46вузла кількість вузлів які обмежені цим
- 1:36:48конкретним вузлом яку змінну мені слід
- 1:36:50вибрати вибирати зміну з високим
- 1:36:52степенем яка пов'язана з багатьма
- 1:36:54вузлами чи зміну з низьким степенем яка
- 1:36:57не пов'язана з багатьма вузлами часто є
- 1:37:00сенс вибрати змінну яка має найвищий
- 1:37:02степінь тобто пов'язана з більшістю
- 1:37:04інших вузлів як таку що ви шукатимете в
- 1:37:07першу чергу Чому так Тому що вибір
- 1:37:09змінної з високим степенем одразу ж
- 1:37:12обмежує решту змінних і це радше за все
- 1:37:14дозволить виключити великі ділянки
- 1:37:16простору станів які вам узагалі не
- 1:37:19потрібно
- 1:37:20переглядати
- 1:37:22Як же це відбувається на практиці
- 1:37:24повернімося до завдання пошуку у цьому
- 1:37:27конкретному випадку я присвоїв значення
- 1:37:29тут присвоїв тут Куди ж рухатися
- 1:37:33далі згідно з веристикою мінімальних
- 1:37:35залишкових значень Я маю вибрати змінну
- 1:37:38яка має найменше можливих залишкових
- 1:37:40значень у цьому випадку це вузол C який
- 1:37:43має лише одну змінну в області
- 1:37:45визначення у цьому випадку середа це
- 1:37:48дуже розумний вибір для наступного
- 1:37:50присвоєння бо Я знаю що це єдиний
- 1:37:53варіант Я знаю що єдиний можливий
- 1:37:54варіант для с - це середа тому я можу
- 1:37:57присвоїти значення тут а потім уже
- 1:37:59досліджувати решту
- 1:38:02простору тим часом на самому початку
- 1:38:05коли я ще не знав які вузли повинні мати
- 1:38:07яке значення потрібно було вибрати якому
- 1:38:11вузлу присвоїти значення першому я
- 1:38:14довільно вибрав Горішній вузол a але ми
- 1:38:17можемо підійти до цього більш розумно
- 1:38:19Подивіться на граф усі вузли мають
- 1:38:22область однакового розміру три тому
- 1:38:25мінімальні залишкові значення нам не
- 1:38:27допоможуть але ми бачимо що вузол і має
- 1:38:30найвищий степінь він пов'язаний з
- 1:38:32найбільшою кількістю інших вузлів
- 1:38:34можливо є сенс почати пошук не з вузла a
- 1:38:37а з вузла з найвищим степенем почати
- 1:38:39пошук з вузла і тому що звідси буде
- 1:38:41набагато легше застосувати обмеження які
- 1:38:44поруч усунувши великі ділянки простору
- 1:38:46пошуку які можливо і не знадобляться для
- 1:38:50пошуку почавши з і ми можемо одразу ж
- 1:38:53присвоїти інші значення а потім можемо
- 1:38:56присвоїти значення іншим змінним без
- 1:38:58жодних повернень Навіть якщо я не
- 1:39:00використовую процедури висновку
- 1:39:02починаємо з вузла який має вищий степінь
- 1:39:05і дуже швидко обмежимо значення яких
- 1:39:07можуть набувати інші
- 1:39:09вузли Таким чином ми можемо вибирати
- 1:39:12змінні без присвоєних значень у певному
- 1:39:14порядку а не випадково якщо підійдемо до
- 1:39:18процесу вибору змінних з розумом то
- 1:39:20зробимо процес пошуку набагато
- 1:39:22ефективнішим і нам Не доведеться шукати
- 1:39:24в тих частинах простору пошуку які
- 1:39:26зрештою не матимуть значення інша
- 1:39:29функція про яку ми ще не говорили це
- 1:39:31функція domain values ця функція приймає
- 1:39:34змінну і повертає послідовність усіх
- 1:39:37значень в області визначення цієї
- 1:39:39змінної безхитрий спосіб підійти до
- 1:39:42цього - це те що ми робили раніше тобто
- 1:39:44просто йти по порядку в понеділок
- 1:39:46вівторок середа але проблема в тому що
- 1:39:48пошук у такому порядку може бути не на
- 1:39:51наефективнішим іноді ефективніше буде
- 1:39:53спочатку вибрати значення які ймовірно є
- 1:39:55рішенням а потім перейти до інших
- 1:39:59значень як же оцінити чи є значення
- 1:40:02більш імовірним для вирішення завдання
- 1:40:04чи менш імовірним ви можете поглянути на
- 1:40:07те скільки обмежень додається Скільки
- 1:40:09значень видаляється з областей коли ви
- 1:40:12присвоюєте нове значення цій конкретній
- 1:40:16змінні тут ми можемо використати
- 1:40:19евристику найменш обмеж значення її суть
- 1:40:22у тому що ми маємо повертати змінні в
- 1:40:25порядку заснованому на кількості
- 1:40:27варіантів які виключені для сусідніх
- 1:40:29значень я почну з найменш обмеженого
- 1:40:31значення значення яке виключає найменше
- 1:40:34можливих варіантів ідея полягає в тому
- 1:40:37що якщо мене цікавить тільки пошук
- 1:40:39рішення якщо я починаю зі значення яке
- 1:40:42виключає багато інших варіантів я
- 1:40:45виключає багато можливостей які можливо
- 1:40:47зроблять менш імовірним те що саме цей
- 1:40:50вибір приведе до рішення з іншого боку
- 1:40:53якщо в мене є змінна і я починаю з
- 1:40:55вибору значення яке не виключає дуже
- 1:40:57багато Тоді в мене лишається багато
- 1:40:59простору де можна шукати рішення це може
- 1:41:02здатися трохи нелогічним і трохи
- 1:41:04суперечить тому Про що ми говорили
- 1:41:06раніше коли я казав що коли ви вибираєте
- 1:41:09зміну Вам слід вибирати ту у якої
- 1:41:11лишиться найменше можливих значень але
- 1:41:14тут я хочу вибрати значення для змінної
- 1:41:16яка є найменш обмеженою загальна ідея
- 1:41:19така що коли я вибираю змінну Я хочу
- 1:41:21скоротити велику частину простору пошуку
- 1:41:23просто вибравши змінну яка дозволить
- 1:41:25швидко виключити можливі варіанти тоді
- 1:41:28як тут у межах конкретної зміної коли я
- 1:41:31розглядаю значення яких може набувати ця
- 1:41:33зміна я хочу просто знайти рішення тому
- 1:41:36я вибираю таке значення яке залишає
- 1:41:38відкритою можливість знайти рішення з
- 1:41:40максимально можливою
- 1:41:42іймовірністю не виключаючи багато
- 1:41:44варіантів я лишаю можливість того що я
- 1:41:46все ще можу знайти рішення без
- 1:41:48необхідності повертатися
- 1:41:51наприклад у цій конкретній ситуації якщо
- 1:41:53я намагаюся вибрати значення для вузла с
- 1:41:56то С дорівнює або вівторку або середі ми
- 1:42:01знаємо що це не може бути понеділок Тому
- 1:42:03що це суперечить цій області визначення
- 1:42:06де ми вже знаємо що a - це понеділок
- 1:42:09Отже C має бути вівторок або
- 1:42:12середа Питання в тому що спробувати
- 1:42:15спершу вівторок чи середа якщо я виберу
- 1:42:18вівторок що буде виключено один варіант
- 1:42:20від відпадає тут другий варіант відпадає
- 1:42:22тут і третій варіант відпадає тут
- 1:42:25вибравши вівторок я відкидаю три можливі
- 1:42:28варіанти А якщо вибрати середу вибір
- 1:42:30середи виключає один варіант Тут і один
- 1:42:32варіант Тут Отже В мене є два вибори я
- 1:42:35можу вибрати вівторок який виключає три
- 1:42:37варіанти або середу яка виключає два
- 1:42:39варіанти згідно з евристикою найменш
- 1:42:41обмеженого значення Я маю вибрати середу
- 1:42:44яка виключає найменшу кількість можливих
- 1:42:46варіантів залишаючи відкритими якомога
- 1:42:49більше шансів для того щоб зрештою
- 1:42:51знайти рішення всередині простору станів
- 1:42:54якщо ми продовжимо цей процес то
- 1:42:56знайдемо рішення присвоєння зміним
- 1:42:59значень які дозволять призначити кожному
- 1:43:01з цих іспитів кожному з цих предметів
- 1:43:04дату іспиту яка не буде конфліктувати з
- 1:43:07тими хто записаний на два іспити
- 1:43:10одночасно Отже основний висновок з
- 1:43:13усього цього полягає в тому що є багато
- 1:43:15різних способів сформулювати завдання
- 1:43:18Сьогодні ми розглянули як можна
- 1:43:20фомулювати завдання локального пошуку
- 1:43:22тобто завдання в якому ми розглядаємо
- 1:43:24поточний вузол і переходимо до
- 1:43:26сусіднього на основі того чи цей сусід
- 1:43:29кращий чи гірший за поточний вузол ми
- 1:43:32розглядали лінійні програми де описуючи
- 1:43:34все рівняннями й обмеженнями можна
- 1:43:36вирішувати завдання ефективніше ми
- 1:43:38розглядали завдання задоволення обмежень
- 1:43:40створення графа всіх обмежень які
- 1:43:43пов'язані зі зміними що мають певні
- 1:43:45обмеження між собою і використання цієї
- 1:43:48інформації для того щоби зрозуміти яким
- 1:43:50має бути рішення висновок якщо ми хочемо
- 1:43:53за допомогою штучного інтелекту вирішити
- 1:43:56якесь завдання Чи то з'ясувати де мають
- 1:43:58бути лікарні чи то вирішити задачу
- 1:44:01комівояжера чи то оптимізувати
- 1:44:03виробництво чи то з'ясувати як
- 1:44:05задовольнити певні обмеження чи то в
- 1:44:07судоку чи то в розкладі іспитів в
- 1:44:10університеті чи то розв'язати будь-які
- 1:44:12найрізноманітніші завдання Якщо ми
- 1:44:15можемо сформулювати це завдання як одне
- 1:44:16з таких тоді ми можемо використовувати
- 1:44:19відомі нам алгоритми алгоритми для
- 1:44:21сумісності дух і пошуку З поверненням
- 1:44:24алгоритми сходження на вершину і
- 1:44:27імітації відпалу симплексметоди і методи
- 1:44:30внутрішньої точки які можна
- 1:44:31використовувати для вирішення лінійних
- 1:44:34програм ми можемо використовувати ці
- 1:44:36методи щоби вирішити різноманітні
- 1:44:38завдання у світі оптимізації в рамках
- 1:44:40штучного інтелекту це вступ до штучного
- 1:44:43інтелекту з python побачимося наступного
- 1:44:49разу
- 1:44:51fore
About this transcript
This page contains the full transcript of 1354_lecture3_ver1 HarvardUniversity CS50_AI101 20 by Prometheus, generated from the public captions YouTube serves with the video. The transcript has 14,845 words across 2,529 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to choose a caption track available on the video.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, caption language selection, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.