1354_lecture0_ver2 HarvardUniversity CS50_AI101 20 — Transcript
Full transcript
- 0:04[музика]
- 0:23Вітаю на вступній лекції до курсу вступ
- 0:24до штучного інтелекту з паython мене
- 0:26звати Брайан ю в цьому курсі ми
- 0:28дослідимо ідеї техніки та алгоритми які
- 0:31є основою штучного
- 0:33інтелекту штучний інтелект охоплює
- 0:35широкий спектр типів технології щоразу
- 0:38коли ви бачите як комп'ютер робить щось
- 0:40Що здається розумним чи раціональним
- 0:42наприклад розпізнає обличчя на фото або
- 0:44грає в гру краще ніж людина або здатен
- 0:47розуміти людську мову коли ми
- 0:49розмовляємо з телефоном Він розуміє що
- 0:51ми маємо на увазі і може відповісти це
- 0:55приклади штучного інтелекту в цьому
- 0:57курсі дослідимо ідеї що роблять можливим
- 0:59іс вання штучного
- 1:01інтелекту почнемо розмову з пошуку
- 1:04проблема полягає в тому що у нас є
- 1:06штучний інтелект і ми хочемо щоби він
- 1:08міг шукати рішення проблеми і неважливо
- 1:11що це за проблема чи пошук маршруту від
- 1:13точки А до точки Б чи спроба зрозуміти
- 1:15як грати у Хрестики нулики з'ясовуючи
- 1:17який рух треба зробити потім ми
- 1:19розглянемо
- 1:20знання в ідеалі Ми хочемо щоби штучний
- 1:23інтелект міг знати інформацію
- 1:25представляти її і що важливіше мати
- 1:28можливість робити висновки на основі
- 1:30цієї
- 1:31інформації умійте використовувати відому
- 1:34йому інформацію робити додаткові
- 1:36висновки тож поговоримо про те як
- 1:38штучний інтелект можна запрограмувати
- 1:40для цього потім ми розглянемо тему
- 1:42невизначеності що відбувається якщо
- 1:44комп'ютер не впевнений у факті або
- 1:46впевнений лише з певною
- 1:49ймовірністю ми поговоримо про ідеї що
- 1:51лежать в основі ймовірності і про те як
- 1:54комп'ютери можуть працювати з
- 1:55невизначеними подіями щоби також трохи
- 1:58більше знатися на цьому після цього
- 2:00звернемо увагу на оптимізацію цея
- 2:02проблема пов'язана з тим що комп'ютер
- 2:04намагається оптимізувати проблему для
- 2:06досягнення цілі особливо в ситуації коли
- 2:08він може вирішити завдання кількома
- 2:10способами але ми шукаємо найкращий або
- 2:13потенційно найкращий спосіб якщо це
- 2:15взагалі можливо потім ми розглянемо
- 2:17машини навчання або навчання загалом
- 2:19коли ми маємо доступ до даних комп'ютери
- 2:21можна запрограмувати так щоб вони
- 2:22навчалися за допомого даних і досвіду
- 2:25були здатні виконувати завдання дедалі
- 2:27краще на основі ширшого доступу до даних
- 2:30щоб наприклад папка вхідні в електронній
- 2:32пошті якимось чином знала які листи
- 2:34хороші а які спам це Приклади того як
- 2:36комп'ютери можуть навчатися на минулих
- 2:38досвіді та
- 2:39даних також Розглянемо як комп'ютери
- 2:42беруть натхнення з людського інтелекту
- 2:45дивлячись на структуру людського мозку
- 2:47та як нейронні мережі можуть бути
- 2:49комп'ютерним аналогом такої
- 2:51ідеї і як використовуючи переваги
- 2:54комп'ютерної програми певного типу ми
- 2:56можемо написати нейронні мережі здатні
- 2:58ефективно виконувати завдання і нарешті
- 3:01звернемо увагу на мову не на мову
- 3:03програмування А на людські мови і
- 3:06розглянемо які проблеми виникають коли
- 3:08комп'ютер намагається зрозуміти природну
- 3:10мову і на те як насправді може працювати
- 3:13обробка природної мови яка відбувається
- 3:16в сучасному штучному інтелекті
- 3:19сьогоднішня розмова почнеться з пошуку
- 3:21це спроба зрозуміти що робити коли є
- 3:23якась ситуація у якій перебуває
- 3:25комп'ютер і якесь середовище в якому так
- 3:28би мовити є агент і ми би хотіли щоб цей
- 3:31Агент міг шукати вирішення
- 3:34завдання ці завдання можуть мати
- 3:36будь-яку кількість форматів одним із
- 3:38прикладів можуть бути п'ятнашки ви
- 3:41напевне знаєте цю головоломку треба
- 3:43вишикувати числа по порядку переміщаючи
- 3:46плиточки це приклад того що можна
- 3:48назвати завданням пошуку п'ятнашки вже
- 3:51переплутані Нам потрібен спосіб знайти
- 3:53послідовність ходів щоби повернути
- 3:55головоломку до початкового
- 3:58стану є схожі завдання які можна
- 4:01сформулювати іншими способами наприклад
- 4:04знайти шлях у лабіринті Це ще один
- 4:06приклад завдання пошуку ви починаєте в
- 4:09одному місці У вас є ціль Куди ви
- 4:11намагаєтеся потрапити і вам потрібно
- 4:13визначити правильну послідовність дій
- 4:15які приведуть вас від початкового стану
- 4:17до цілі це все трохи абстрактно Та коли
- 4:20ми говоримо про проходження лабіринту ви
- 4:22можете перекласти це на реальний світ
- 4:25порівнявши наприклад з маршрутом у
- 4:26дорозі ви коли-небудь замислювались як
- 4:29Google Maps може визначити який для вас
- 4:31найкращий спосіб дістатися з точки А в
- 4:33точку б де В який час повернути залежно
- 4:36від трафіку часто це певний алгоритм
- 4:38пошуку У вас є штучний інтелект який
- 4:40намагається дістатися від початкової
- 4:42позиції до цілі виконуючи певну
- 4:44послідовність дій розпочнемо нашу
- 4:46розмову з роздумів про ці типи завдань
- 4:48пошуку і про те що потрібно для
- 4:50вирішення такого завдання пошуку щоби
- 4:52штучний інтелект міг знайти хороше
- 4:53рішення для цього нам потрібно вивчити
- 4:56термінологію дещо ви вже чули від мене
- 4:58та спершу поговоримо про агента Агент -
- 5:01це сутність яка сприймає своє середовище
- 5:03вона здатна сприймати речі навколо себе
- 5:05та певним чином впливати на середовище
- 5:08Якщо говорити про маршрут поїздки
- 5:10агентом може виступати автомобіль який
- 5:12намагається з'ясувати які дії потрібно
- 5:15виконати щоби прибути на місце Якщо
- 5:17говорити про п'ятнашки агентом може бути
- 5:19штучний інтелект або людина яка
- 5:21намагається розв'язати головоломку
- 5:23намагаючи з'ясувати які плитки потрібно
- 5:27перемістити далі ми вводимо поняття
- 5:29стану стан - це конфігурація агента і
- 5:32його
- 5:34середовища наприклад у п'ятнашках
- 5:36будь-який стан може бути будь-яким з цих
- 5:39трьох стан - це лише конфігурація
- 5:41плиточок кожен із цих станів різний і
- 5:43вимагатиме дещо іншого рішення у кожному
- 5:46з них потрібна буде інша послідовність
- 5:48дій щоби дістатися від початкового стану
- 5:51до цілі куди ми намагаємося
- 5:54потрапити початковий стан що це
- 5:57початковий стан - це стан з якого
- 5:59починає Агент це один із таких станів з
- 6:02якого ми можемо почати це стане
- 6:04відправною точкою для нашого алгоритму
- 6:06пошуку Ми почнемо з цього початкового
- 6:09стану а потім почнемо міркувати про
- 6:11нього думати про те які дії ми можемо
- 6:13застосувати до цього початкового стану
- 6:16щоб з'ясувати як дістатися від початку
- 6:18до кінця від початкової позиції до цілі
- 6:21як ми прокладаємо шлях від початкової
- 6:23позиції до цілі Це залежить від дій дії
- 6:26- це лише вибір який ми можемо зробити в
- 6:28будь-якому у конкретному стані ми будемо
- 6:31намагатися формалізувати ці ідеї трохи
- 6:33точніше щоб ми могли запрограмувати їх
- 6:36математично ця тема буде повторюватися І
- 6:39ми можемо точніше визначити дії як
- 6:41функцію ми визначимо функцію actions із
- 6:45параметром S DS буде певним станом який
- 6:48існує всередині
- 6:50середовища actions S візьме стан як
- 6:53параметр і повернеться у вигляді
- 6:55результату набору всіх дій які можна
- 6:58виконати в цьому стані
- 7:00деякі дії можливі лише Для певних станів
- 7:04незабаром ми побачимо
- 7:05приклади у випадку з п'ятнашками це як
- 7:09правило чотири можливі дії які ми можемо
- 7:11виконувати більшу частину часу ми можемо
- 7:14пересунути плитку вправо вліво
- 7:16пересунути вгору або вниз і лише ці дії
- 7:19будуть нам
- 7:22доступні якимось чином штучному
- 7:25інтелекту програмі потрібне кодування
- 7:28стану яке часто має бути в числовому
- 7:30форматі і кодування дій але також
- 7:33потрібне кодування зв'язку між тим як
- 7:35стани та дії співвідносяться між собою
- 7:38для того щоб це зробити введемо в
- 7:40штучний інтелект модель переходу яка
- 7:43описуватиме який стан Ми отримаємо після
- 7:46виконання певної дії в іншому
- 7:48стані ми можемо бути трохи більш точними
- 7:51щодо цього визначаючи цю модель переходи
- 7:53трохи більш формальною як функцію це
- 7:56буде
- 7:56функція яка цього разу матиме два
- 7:59параметри перший параметр S - це стан
- 8:03другий параметр a - це
- 8:05дія функція повертає стан який ми
- 8:08отримаємо після виконання дії
- 8:11a у стані
- 8:13S подивімося на приклад і точніше
- 8:16побачимо що це означає ось стан на
- 8:19прикладі п'ятнашок А ось приклад дії
- 8:22ковзання плитки
- 8:24вправо що станеться якщо ми передамо ці
- 8:27параметри функції зал
- 8:30функція result приймає цю дошку цей стан
- 8:32як перший параметр і приймає дію як
- 8:35другий параметр я візуалізую приклад щоб
- 8:38ви бачили що таке стан і що таке дія у
- 8:41комп'ютері ви можете представити одну з
- 8:43дій як число Або якщо ви знайомі з
- 8:46переліками inams які дозволяють
- 8:48перераховувати кілька можливостей це
- 8:50може бути щось подібне а стан може бути
- 8:52представлений у вигляді масиву або
- 8:54двовимірного масиву цих чисел але я все
- 8:57візуалізую щоб ви могли це побачити коли
- 9:00ми приймаємо цей стан і цю дію передаємо
- 9:03їх функції result результатом є новий
- 9:05стан стан який ми отримаємо після того
- 9:08як беремо плитку і пересуваємо її вправо
- 9:11це стан який ми отримаємо в результаті
- 9:13якби ми мали іншу дію та інший стан і
- 9:16передали їх функції result то отримали б
- 9:18іншу відповідь Отже функція result має
- 9:22дбати про те як прийняти стан виконати
- 9:24дію та отримати результати це і буде
- 9:27наша модель переходу яка описує як
- 9:29пов'язані стани та дії Якщо ми візьмемо
- 9:32цю модель переходу і подумаємо про неї
- 9:35Загалом у масштабах усього завдання ми
- 9:37зможемо сформувати простір станів Це
- 9:40набір усіх станів які можна отримати з
- 9:42початкового стану за допомогою будь-якої
- 9:44послідовності дії виконуючи нуль одну
- 9:47дві або більше дій щоб ми могли
- 9:49намалювати приблизно таку діаграму тут
- 9:52кожен стан представлено ігровою дошкою є
- 9:55стрілки які з'єднують стан з іншим
- 9:58станом який можна отримати з цього стану
- 10:00простір станів набагато більший ніж те
- 10:02що ви бачите Це просто один фрагмент
- 10:04простору станів Загалом у багатьох
- 10:06завданнях пошуку Незалежно від того чи
- 10:08це п'ятнашки чи пошук маршруту чи щось
- 10:11інше простір станів матиме приблизно
- 10:13Такий вигляд є окремі стани та стрілки
- 10:16які їх
- 10:18з'єднують часто для простоти ми будемо
- 10:20спрощувати все це до вигляду графа тобто
- 10:23певної послідовності вузлів і ребер які
- 10:26з'єднують вузли ви можете вважати це
- 10:29абстрактним поданням тієї самої
- 10:31ідеї кожен з цих кругів або вузлів
- 10:34представлятиме Один зі станів усередині
- 10:36проблеми а стрілки представляють дії які
- 10:40ми можемо виконувати в будь-якому
- 10:41конкретному стані переходячи з одного
- 10:44конкретного стану в
- 10:47інший Отже тепер у нас є ідея вузлів які
- 10:51представляють стани дій які можуть
- 10:53перевести нас з одного стану в інший і
- 10:56моделі переходу яка визначає що
- 10:58відбувається після виконання певної дії
- 11:00з'ясуємо наступний крок як ми дізнаємося
- 11:03коли штучний інтелект закінчив вирішення
- 11:05завдання йому потрібен спосіб дізнатися
- 11:08що він досяг цілі коли він її досяг далі
- 11:11у штучному інтелекті потрібно закодувати
- 11:13перевірку цілі тобто якийсь спосіб
- 11:16визначити чи є певний стан цільовим Якщо
- 11:19говорити про маршрут це легко якщо ви
- 11:21перебуваєте в стані який відповідає тому
- 11:24що користувач ввів як Пункт призначення
- 11:26то ви знаєте що ви перебуваєте в
- 11:28цільовому
- 11:30у п'ятнашках можна перевірити чи
- 11:32розташовані числа в порядку зростання
- 11:34але штучному інтелекту потрібен спосіб
- 11:36кодування того чи є стан у якому він
- 11:38перебуває
- 11:39ціллю деякі завдання можуть мати одну
- 11:42ціль наприклад Лабіринт у якому є одна
- 11:44початкова позиція і одна кінцева у
- 11:46складніших завданнях можливе існування
- 11:48кількох цілей а отже і кілька способів
- 11:50вирішення завдання нам може бути байдуже
- 11:53яку з них знайде комп'ютер Головне щоб
- 11:55знайшов однак інколи комп'ютер дбає не
- 11:58лише про про те щоб знайти ціль а й про
- 12:00те щоб знайти ціль ефективною чи з
- 12:03низькою ціною саме тому останнім
- 12:05терміном який ми використовуємо для
- 12:07визначення завдання пошуку Є вартість
- 12:10шляху можете уявити що у випадку пошуку
- 12:13маршруту було б дуже неприємно Якби я
- 12:15сказав що хочу проїхати з точки А у
- 12:17точку б а маршрут який намалювала Google
- 12:20карта був довгим із багатьма поворотами
- 12:22і мені знадобилося значно більше часу
- 12:26саме з цієї причини коли ми формулюємо
- 12:28завдання пошуку ми часто надаємо кожному
- 12:31шляхові певну числову вартість якесь
- 12:33число яке говорить нам наскільки дорого
- 12:36обійдеться цей конкретний варіант
- 12:38вкажіть штучному інтелекту Що замість
- 12:40того щоби шукати будь-який спосіб
- 12:42дістатися від початкового стану до цілі
- 12:45Ми хотіли би знайти такий Який мінімізує
- 12:48вартість шляху або менш дорогий або
- 12:50займає менше часу або мінімізує якесь
- 12:53інше числове значення ми можемо
- 12:56представити це графічно якщо подивимося
- 12:58на граф І уявимо що кожна стрілка кожна
- 13:01дія які ми можемо виконувати для
- 13:03переходу з одного стану в інший має
- 13:05якесь число пов'язане з нею це число і є
- 13:08вартістю шляху цієї конкретної дії
- 13:11вартість будь-якої конкретної дії може
- 13:12бути дорожчою ніж вартість іншої дії
- 13:15хоча це можливо лише в деяких завданнях
- 13:18в інших завданнях ми можемо спростити
- 13:19схему і припустити що вартість будь-якої
- 13:22дії однакова це наприклад стосується
- 13:24п'ятнашок де немає значення рухаюся я
- 13:27праворуч чи ліворуч має значення лише
- 13:29загальна кількість кроків які я маю
- 13:31зробити щоби дістатися з пункту А у
- 13:34пункт б і кожен крок має однакову
- 13:36вартість можемо припустити що ця
- 13:38вартість стала наприклад одиниця це
- 13:41формує основу для того що ми можемо
- 13:43вважати завданням пошуку завдання пошуку
- 13:46має певний початковий стан місце з якого
- 13:49ми починаємо певну дію або кількість дій
- 13:51які ми можемо виконати і модель
- 13:53переходу- спосіб визначення того що
- 13:56відбувається коли ми переходимо з одного
- 13:58стану і і виконуємо одну дію в
- 14:00результаті якої отримаємо інший стан
- 14:03крім того потрібна перевірка цілі щоби
- 14:06дізнатися досягли ми цілі чи ні і
- 14:08функція вартості шляху яка повідомляє
- 14:11нам дотримуючись певної послідовності
- 14:13дій наскільки дорогий цей шлях яка його
- 14:16вартість з точки зору грошей часу чи
- 14:18інших ресурсів використання яких ми
- 14:21намагаємося мінімізувати мета полягає в
- 14:23тому щоби знайти рішення рішенням у
- 14:26цьому випадку буде послідовність дій
- 14:28якій переведуть нас із початкового стану
- 14:30До цільового стану вделі Ми хотіли би
- 14:33знайти не будь-яке рішення а оптимальне
- 14:36рішення яке має найнижчу вартість шляху
- 14:39серед усіх можливих рішень у деяких
- 14:41випадках може бути кілька оптимальних
- 14:43рішень але оптимальне рішення означає що
- 14:45ми не могли би зробити краще з точки
- 14:48зору пошуку рішення Отже ми визначили
- 14:51завдання тепер потрібно з'ясувати як ми
- 14:54вирішимо це завдання
- 14:56пошуку для того щоб зробити це ви мабуть
- 14:59уявити що комп'ютеру потрібно буде
- 15:01надати купу даних що стосуються завдання
- 15:04йому потрібні дані про те де ми в
- 15:06завданні можливо доведеться розглядати
- 15:08кілька різних варіантів одночасно часто
- 15:11Коли ми намагаємося об'єднати купу даних
- 15:13пов'язаних зі станом ми робимо це за
- 15:15допомогою структури даних яку називаємо
- 15:18вузлом вузол - це структура даних яка
- 15:21відстежує безліч різних значень зокрема
- 15:24у випадку завдання пошуку вона
- 15:25відстежуватиме ці чотири значення кожен
- 15:28вузол відстежуватиме стан у якому ми
- 15:31перебуваємо і кожен вузол також буде
- 15:33стежити за батьком батько - Це
- 15:36попередній стан або вузол який ми
- 15:38використовували для переходу до
- 15:40поточного стану це буде важливо бо Як
- 15:43тільки ми досягнемо цільового вузла як
- 15:45тільки підійдемо до кінця ми захочемо
- 15:48знати яку послідовність дій ми
- 15:50використали щоби досягти цілі а
- 15:52дізнаємося ми це дивлячись на цих
- 15:54батьків щоби відстежити що привело нас
- 15:57до цілі до цього стану до попереднього
- 15:59стану і так далі повертаючись назад до
- 16:02початку ми знатимемо всю послідовність
- 16:04дій які нам потрібні щоб пройти від
- 16:07початку до кінця вузол відстежуватиме
- 16:10які дії ми виконали щоб перейти від
- 16:12батьківського стану До поточного вузол
- 16:14також відстежуватиме вартість шляху
- 16:17інакше кажучи він відстежуватиме число
- 16:19яке Показує скільки часу знадобиться
- 16:22щоби перейти від початкового стану До
- 16:24поточного стану ми побачимо чому це
- 16:27важливо коли будемо говорити про
- 16:28оптимізації які ми можемо зробити з
- 16:31точки зору завдань
- 16:32пошуку Отже це структура даних яку ми
- 16:35будемо використовувати для вирішення
- 16:37завдання а тепер поговоримо про підхід
- 16:39як розпочати вирішення завдання Ми
- 16:41почнемо з одного конкретного стану
- 16:43просто будемо його досліджувати інтуїція
- 16:46вам підкаже що в нас є кілька варіантів
- 16:48розвитку подій ми будемо вивчати всі
- 16:50варіанти і Як тільки ми вивчимо їх то
- 16:53побачимо що ще більше варіантів стануть
- 16:55доступними ми розглянемо всі доступні
- 16:58варіанти що будуть зберігатися в одній
- 17:00структурі даних яку ми назвемо межею
- 17:04межа представлятиме все що ми могли би
- 17:06дослідити далі але ще не дослідили Отже
- 17:09розпочинаємо наш підхід з алгоритму
- 17:11пошуку почнемо з межі яка містить лише
- 17:14один стан межа містить початковий стан
- 17:17тому що на початку це єдиний стан про
- 17:19який ми знаємо це єдиний стан який
- 17:27існує тим пошуку фактично буде циклом ми
- 17:30будемо повторювати процес знову і знову
- 17:33і
- 17:34знову що ми зробимо зпершу якщо межа
- 17:38порожня то рішення немає можна
- 17:41повідомити що немає можливості досягнути
- 17:43цілі таке можливо є певні типи завдань
- 17:46які штучний інтелект може Дослідити і
- 17:48зрозуміти що немає способу вирішити це
- 17:50завдання це теж корисна інформація якщо
- 17:53межа буде порожньою це означає що
- 17:56досліджувати нема чого і що ми не
- 17:58знайшли рішення рішення немає нема чого
- 18:02досліджувати інакше ми видаілимо вузол
- 18:05із межі зараз на початку межа містить
- 18:08лише один вузол що представляє
- 18:10початковий стан але з часом межа Може
- 18:14розростатися вона Може містити кілька
- 18:16станів тому тут ми просто видалимо один
- 18:19вузол з межі якщо цей вузол є ціллю тоді
- 18:23ми знайшли рішення тому видаляємо вузол
- 18:26з межі і запитуємо себе це ціль а робимо
- 18:30це застосовуючи перевірку цілі про яку
- 18:32ми говорили раніше запитуючи чи ми на
- 18:35місці призначення або чи всі числа в
- 18:37п'ятнашках стоять по порядку Отже якщо
- 18:41вузол містить ціль ми знайшли рішення
- 18:44мити досягнуто інакше нам потрібно буде
- 18:47розширити вузол це термін у штучному
- 18:49інтелекті він означає переглянути всіх
- 18:52сусідів цього вузла інакше кажучи
- 18:55розглянемо всі можливі дії які я міг би
- 18:57виконати зі стану який представляє цей
- 19:00вузол і до яких вузлів я міг би
- 19:02дістатися візьмемо всі ці вузли наступні
- 19:05вузли до яких я можу дістатися з цього
- 19:08поточного і додамо їх до межі а потім
- 19:11повторимо процес на дуже загальному
- 19:13рівні ідея полягає в тому що ми
- 19:15починаємо з межі яка містить початковий
- 19:18стан постійно видаляємо вузол з межі
- 19:21Дивлячись куди можемо дістатися далі і
- 19:24додаємо ці вузли до межі повторюючи про
- 19:26це знову і знову доки або не видалимо
- 19:29вузол з межі бо він міститиме ціль Тобто
- 19:32ми вирішили завдання або не зіткнемося
- 19:34із ситуацією коли межа порожня тобто
- 19:37рішення немає спробуємо взяти псевдокод
- 19:40і застосувати його на практиці
- 19:41розглянувши приклад завдання пошуку це
- 19:44зразок графа a з'єднується з B за
- 19:46допомогою цієї дії B з'єднується з
- 19:49вузлами c і D C з і D з F Я хотів би
- 19:53щоби штучний інтелект знайшов шлях від a
- 19:56до і ми хочемо дістатися від цього
- 19:58початкового стану До цього цільового
- 20:00стану як ми це зробимо почнемо з межі
- 20:03яка містить початковий стан червоне поле
- 20:06буде межею вона спочатку міститиме лише
- 20:08a початковий стан з якого ми почнемо і
- 20:11повторимо процес якщо межа порожня
- 20:14рішення немає це не наш варіант бо межа
- 20:16не порожня тож видалимо вузол із межі як
- 20:20такий що слід розглянути наступним на
- 20:22межі є лише один вузол видалимо його з
- 20:25межі тепер Ей початковий вузол це вузол
- 20:28який ми зараз розглядаємо переходимо до
- 20:31наступного кроку запитуємо себе цей
- 20:33вузол є ціллю ні е не ціль ціль і тому
- 20:38не повертаємо рішення замість цього
- 20:41переходимо до останнього кроку
- 20:43розширюємо вузол і додаємо отримані
- 20:45вузли до межі що це означає це означає
- 20:48взяти стан a і подумати куди ми можемо
- 20:51потрапити після a є єдиний маршрут B Ось
- 20:55що ми отримаємо коли розгорнемо A ми
- 20:58знайдемо бій додаємо бій до межі тепер
- 21:01бій на межі А ми повторюємо процес межа
- 21:04непорожня Отже прибираємо бі з межі бій
- 21:07став вузлом який ми розглядаємо
- 21:09запитуємо бі - це ціль ні значить
- 21:13розширяємо бій і додаємо отримані вузли
- 21:15до межі Що станеться коли ми розширимо B
- 21:18тобто до яких вузлів ми можемо дістатися
- 21:20з B можемо дістатися до c і D додаємо c
- 21:23і D до межі тепер на межі два вузли c і
- 21:26D повторюємо про це видаляємо вузол межі
- 21:29поки що робимо це довільно спершу
- 21:32видаливши сі пізніше побачимо що вибір
- 21:34вузла який треба видалити з межі - Це
- 21:36важлива частина алгоритму Але зараз я
- 21:39довільно видаляю сі тому що це не ціль
- 21:42додаю і до межі тоді скажімо Я видаляю і
- 21:45з межі Я дивлюся на стан і це цільовий
- 21:48стан так тому що я намагаюся знайти шлях
- 21:51від Е до і тому Я повернув би ціль це і
- 21:55буде рішенням я можу повернути рішення Я
- 21:58знайшов шлях від a до
- 22:00і Отже це загальна ідея загальний підхід
- 22:04цього алгоритму пошуку виконувати кроки
- 22:06постійно видаляючи вузли з межі поки ми
- 22:09не знайдемо рішення наступне запитання
- 22:11яке виникає Логічно що може піти не так
- 22:15які потенційні проблеми в такому підході
- 22:18наведу вам один приклад проблеми яка
- 22:20може виникнути уявіть цей самий граф але
- 22:23з однією
- 22:24зміною зміна полягає в тому що замість
- 22:28від a до B Ми також маємо стрілку від B
- 22:31до a Тобто можна рухатися в обох
- 22:33напрямках це реальна ситуація у
- 22:35п'ятнашках Де я можу пересунути плитку
- 22:37праворуч а потім можу пересунути її
- 22:39ліворуч щоби Повернутися у вихідне
- 22:42положення ось яку ідею символізують Ці
- 22:44дві стрілки я можу потрапити з одного
- 22:47стану в інший а потім повернутися це
- 22:50реальна ситуація в багатьох завданнях
- 22:52пошуку що станеться якщо я спробую
- 22:54застосувати той самий підхід зараз почну
- 22:57з A як і раніше видаляю a з межі потім
- 23:01подумаю куди я можу потрапити з a після
- 23:03a я можу вибрати тільки B тому B
- 23:05переходить до межі далі розглянемо B
- 23:08тільки B лишилося на межі куди я можу
- 23:11потрапити з B раніше це були лише c і D
- 23:14але тепер завдяки зворотній стрілці є a
- 23:17c або D Отже усі три AC c і D Усі вони
- 23:22йдуть на межу це місця куди я можу
- 23:25потрапити збій Я знімаю одне з межі
- 23:27можливо мені не пощастить і я виберу a
- 23:30Тепер я знову Думаю куди я можу
- 23:32потрапити з a Ну я можу потрапити в B
- 23:34тепер ми бачимо проблему якщо я
- 23:37необережний то я йду з a у B потім
- 23:40повертаюся до a потім знову до B я можу
- 23:43перебувати в цьому нескінченному циклі
- 23:45де ніколи не досягну прогресу бо я
- 23:48постійно ходитиму між двома станами чи є
- 23:51рішення потрібен спосіб вирішення
- 23:53завдання Цей спосіб полягає в тому щоб
- 23:55якимось чином стежити за тим що ми вже
- 23:58дослідили логіка така якщо ми вже
- 24:01дослідили стан немає причин повертатися
- 24:03до нього після того як ми дослідили стан
- 24:06не повертайтесь до нього не додавайте
- 24:08його до межі Отже ось кращий спосіб
- 24:11підійти до такого роду завдання пошуку
- 24:13він буде дуже схожим лише з парою
- 24:15модифікацій почнемо з межі яка містить
- 24:18початковий стан те саме що і раніше але
- 24:22тепер почнемо з іншої структури даних
- 24:25яка буде просто набором вузлів які ми
- 24:27вже дослідили який стане ми дослідили
- 24:30Спочатку він порожній У нас є порожній
- 24:33досліджений набір тепер повторюємо якщо
- 24:36межа порожня рішення немає те саме щой
- 24:38раніше видаляємо вузол із межі і
- 24:41Перевіряємо чи це цільовий стан
- 24:44повертаємо рішення Поки що все так само
- 24:46але тепер Ми додамо вузол до
- 24:49дослідженого стану якщо станеться так що
- 24:51ми видалимо вузол з межі і це не ціль Ми
- 24:54додамо його до дослідженого набору щоб
- 24:57ми знали що ми його вже дослідили не
- 24:59потрібно повертатися до нього знову Якщо
- 25:01це станеться пізніше на останньому кроці
- 25:04ми розширяємо вузол і додаємо отримані
- 25:06вузли до межі ми завжди додаємо отримані
- 25:09вузли до межі але цього разу будемо
- 25:12розумнішими додамо до межі вузли тільки
- 25:14якщо вони ще не на межі і якщо вони ще
- 25:17не в дослідженому наборі Тобто ми
- 25:19перевіримо як межу так і досліджений
- 25:23набір переконаємося що вузла немає ні
- 25:25там ні там і поки це не Так Ми
- 25:28продовжимо і додамо до межі але не
- 25:30інакше тобто цей переглянутий підхід
- 25:33зрештою допоможе переконатися що ми не
- 25:36переходимо туди-сюди між двома вузлами
- 25:39єдиний момент про який я змовчав - це
- 25:41цей крок видалення вузла з межі раніше я
- 25:44вибирав довільно видалимо цей вузол і
- 25:46все але виявилося що насправді дуже
- 25:49важливо те як ми вирішуємо структурувати
- 25:52межу як ми додаємо та видаляємо вузли
- 25:55межа - це структура даних потрібно
- 25:58вибрати у якому порядку ми будемо
- 26:00видаляти елементи однією з найпростіших
- 26:02структур даних для додавання та
- 26:05видалення елементів є стек стек - це
- 26:07структура даних яка працює за принципом
- 26:10останнім прийшов першим вийшов це
- 26:12означає що Останнє що я додам до межі
- 26:15буде першим що я видаляю з межі Отже
- 26:18останнім елементом який увійде в стек
- 26:20або в цьому випадку в межу буде вузол
- 26:23який я досліджую подивімося що станеться
- 26:26якщо я сую стековий підхід до чогось на
- 26:29зразок цього завдання знаходження шляху
- 26:32від a до І що станеться ми знову почнемо
- 26:35з a спершу розглянемо a Зверніть увагу
- 26:39що цього разу ми додали a до
- 26:41дослідженого набору a уже досліджений у
- 26:45нас є структура даних яка це відстежує з
- 26:48a ми можемо дістатися до B що ми можемо
- 26:51зробити з b дослідимо b з нього ми
- 26:54можемо дістатися до c і D додамо C потім
- 26:57ді тож тепер коли ми досліджуємо вузол
- 27:01ми розглядатимемо межу як стек останнім
- 27:04увійшов першим вийшов D увійшов останнім
- 27:07Тому дослідимо далі його Куди ми можемо
- 27:10потрапити з D можемо дістатися до F
- 27:13ставимо F на межу оскільки межа - це
- 27:15стек F - це останній елемент у стеку
- 27:18тобто далі ми досліджуємо F досліджуємо
- 27:21F куди ми можемо дістатися з F нікуди
- 27:24тому до межі нічого не додається який
- 27:26останній елемент ми додали до межі тепер
- 27:29це C тому що це єдиний вузол у межі
- 27:32дослідимо його і C ми можемо дістатися
- 27:35до і і переходить до
- 27:38межі досліджуємо і і - це рішення ми
- 27:43розв'язали
- 27:44завдання коли ми розглядаємо межу як
- 27:47стек структуру даних останнім прийшов
- 27:50першим вийшов це результат який ми
- 27:52отримаємо ми переходимо від a до B df а
- 27:55потім повертаємося і йдемо до с а потім
- 27:58до і важливо отримати візуальне уявлення
- 28:01того як працює алгоритм ми зайшли дуже
- 28:04глибоко в дерево пошуку аж до самого дна
- 28:07де потрапили в глухий кут і повернули
- 28:09назад і дослідили інший маршрут який
- 28:12раніше не пробували це глибоке
- 28:14проникнення в ідею дерева пошуку Таким
- 28:16чином алгоритм закінчує роботу коли ми
- 28:19використовуємо стек ми називаємо цю
- 28:22версію алгоритму пошуком у глибину пошук
- 28:24у глибину - це алгоритм пошуку де ми
- 28:26завжди дос найглибший вузол у межі ми
- 28:29заглиблюємося в дерево пошуку А якщо
- 28:31потрапляємо в глухий кут повертаємось і
- 28:34пробуємо щось інше пошук у глибину - це
- 28:37лише один із можливих варіантів пошуку
- 28:40виявляється існує ще один алгоритм під
- 28:42назвою пошук ширину який поводиться
- 28:44подібно до пошуку в глибину з однією
- 28:47відмінністю замість того щоби
- 28:49досліджувати найглибший вузол у дереві
- 28:51пошуку як це робить пошук у глибину
- 28:53пошук у ширину завжди досліджуватиме
- 28:55найближчий вузол у межі що це означає що
- 28:59замість використання пошуку в глибину
- 29:00або deps First search dfs який досліджує
- 29:04останній елемент доданий до межі пошуку
- 29:07у ширину або breads First search bfs
- 29:11натомість буде використовувати чергу
- 29:13черга - це тип даних першим прийшов
- 29:15першим вийшов у черзі перше що ми
- 29:18додаємо до межі буде першим що ми
- 29:20досліджуємо елементи утворюють лінію або
- 29:22чергу у якій що раніше ви прибуваєте на
- 29:25межу То раніше вас досліджують
- 29:27що це означає те саме завдання пошуку
- 29:30шляху від a до і починаємо з A як і
- 29:33раніше досліджуємо a куди ми можемо
- 29:35дістатися з a до B так само як і раніше
- 29:39від B як і раніше до c і D C і D
- 29:42додаються до межі однак цього разу ми
- 29:46додали C перед D тому спочатку дослідимо
- 29:49C досліджуємо куди ми можемо потрапити з
- 29:52с до і і додається до межі але оскільки
- 29:56ді було досліджено раніше за і ми
- 29:59розглянемо D
- 30:01першим досліджуємо D куди можна
- 30:04дістатися з D до F і тільки тоді можемо
- 30:07перейти до і Отже що зробив пошук в
- 30:11ширину або bfs ми почали тут перевірили
- 30:14c і D а потім перейшли до і по суті ми
- 30:18перевірили все на відстані однієї
- 30:21стрілки від початкового стану потім на
- 30:24відстані двох Стрілок І лише потім усе
- 30:26на відстані трьох Стрілок на відміну від
- 30:28пошуку в глибину який просто заходив
- 30:31якомога глибше в дерево пошуку поки не
- 30:33потрапляв у глихий кут а потім
- 30:35повертався Отже це два різні алгоритми
- 30:38пошуку які ми можемо застосувати щоб
- 30:41вирішити завдання подивимося як це
- 30:43працюватиме на практиці наприклад із
- 30:45проходженням лабіринту порожні клітини
- 30:47представляють місця куди може
- 30:49пересуватися Агент затемнені сіри
- 30:51клітини представляють стіни через які
- 30:54Агент не може пройти Агент штучний
- 30:56інтелект спробує знайти спосіб пройти з
- 30:58позиції a у позицію
- 31:00B за допомогою певної послідовності дій
- 31:04ліворуч праворуч Вгору та вниз що в
- 31:07цьому випадку дасть пошук у глибину
- 31:10пошук у глибину проходитиме лише одним
- 31:12шляхом якщо він дійде до розвилки де він
- 31:15має кілька варіантів то спочатку вибере
- 31:17якийсь один переваг немає І продовжить
- 31:20іти цим шляхом поки не потрапить у
- 31:22глухий кут з глухого кута пошук у
- 31:25глибину повертається до останньої точки
- 31:27прийняття рішення і перевіряє інший шлях
- 31:30повністю вичерпавши весь цей шлях і
- 31:33зрозумівши що цілі тут немає Він звертає
- 31:36свою увагу на цей шлях іде якомога
- 31:39глибше потрапляє в глухий кут
- 31:41повертається назад перевіряє інший шлях
- 31:44продовжує йти якомога глибше одним
- 31:46конкретним шляхом А коли я розумію що це
- 31:49теж глухий кут повертається назад і
- 31:52зрештою знаходить шлях до цілі можливо
- 31:55вам пощастило Можливо ви раніше зробили
- 31:57інший вибір але зрештою Саме так
- 31:59працюватиме пошук у глибину він ітиме
- 32:02одним шляхом поки не потрапить у глухий
- 32:05кут а потім повернеться і шукатиме інше
- 32:07рішення ви слушно можете запитати чи
- 32:10завжди цей алгоритм працюватиме чи
- 32:12завжди він дійсно і знайдей спосіб
- 32:14дістатися від початкового стану до цілі
- 32:16Виявляється що поки Лабіринт обмежений
- 32:19поки ми маємо кінцеву кількість
- 32:21просторів де ми можемо подорожувати тоді
- 32:24так пошук у глибину допоможе знайти
- 32:26рішення а бо зрештою Він дослідить усе
- 32:29якщо Лабіринт нескінченний і існує
- 32:31нескінченний простір станів який дійсно
- 32:33існує в певних типах завдань тоді це
- 32:36інша історія але поки Лабіринт має
- 32:38кінцеву кількість квадратів Ми
- 32:40збираємося знайти рішення наступне
- 32:42запитання чи буде це рішення хорошим Чи
- 32:44це оптимальне рішення яке ми можемо
- 32:46знайти відповідь Не обов'язково
- 32:48розглянемо інший приклад у цьому
- 32:50лабіринті ми знову намагаємося знайти
- 32:53шлях від a до B ви вже помітили що тут є
- 32:56кілька можливих рішень можна піти цим
- 32:58шляхом або піднятися вгору щоб пройти
- 33:00від a до B Якщо нам пощастить пошук у
- 33:03глибину вибере цей шлях і дійде до Бій
- 33:07але немає жодної причини чому пошук у
- 33:09глибину вибирав би підйом у гору спершу
- 33:12це довільна точка прийняття рішення
- 33:14оскільки обидва будуть додані до межі
- 33:17Якщо нам не пощастить пошук і глибину
- 33:20Може спочатку вибрати цей шлях тому що
- 33:23це випадковий вибір Він буде
- 33:25досліджувати досліджувати досліджува
- 33:27і зрештою знайде ціль цей конкретний
- 33:30шлях хоча бу в кращий шлях було більш
- 33:33оптимальне рішення з меншою кількістю
- 33:35кроків ми припускаємо що вимірюємо
- 33:37вартість рішення на основі кількості
- 33:39кроків Таким чином Якщо нам не пощастить
- 33:42пошук у глибину може закінчитися
- 33:44знаходженням не найкращого рішення хоча
- 33:46краще буде доступне Отже Це dfs пошук у
- 33:50глибину як щодо bfs або пошуку в ширину
- 33:53Як би він спрацював у цій ситуації
- 33:56візуально алгорит матиме зовсім інший
- 33:58вигляд з точки зору того як bfs
- 34:00досліджує оскільки bfs спочатку дивиться
- 34:02на ближчі вузли ідея полягає в тому що
- 34:05bfs спочатку розглядатиме всі вузли які
- 34:08розташовані на одинарній відстані від
- 34:10початкового стану оцей і оцей наприклад
- 34:13які розташовані поруч із початковим
- 34:15станом потім він дослідить вузли
- 34:17розташовані на подвійній відстані потім
- 34:19дослідить вузли розташовані на потрійній
- 34:21відстані цей стан і цей У той час як
- 34:24пошук у глибину вибрав один шлях і йшов
- 34:27ним пошук у ширину використовує варіант
- 34:30дослідження всіх можливих шляхів ніби
- 34:32одночасно перескакуючи між ними
- 34:34Досліджуючи глибше і глибше кожен але
- 34:37обов'язково спершу Досліджуючи найближчі
- 34:39до початкового стану продовжуємо
- 34:42дотримуватися цієї моделі Досліджуючи на
- 34:44відстані чотирьох кроків п'яти кроків
- 34:47потім шести кроків поки зрештою не
- 34:49досягнемо
- 34:51цілі у цьому випадку правда що нам
- 34:54довелося досліджувати деякі стани які
- 34:56зрештою нікуди не привели але шлях який
- 34:59ми знайшли до цілі був оптимальним це
- 35:02найкоротший шлях яким ми могли пройти що
- 35:05ж може статися у більшому лабіринті
- 35:07подивімося як пошук у ширину спрацює в
- 35:10цьому лабіринті спочатку пошук у ширину
- 35:12стежитиме за
- 35:14станами Доки не досягне точки прийняття
- 35:17рішення іти ліворуч чи праворуч якщо dфs
- 35:20вибрав би один і продовжував би йти ним
- 35:23поки не зайшов у глухий кут bfs
- 35:26досліджувати обидва шляхи він дослідить
- 35:29цей вузол потім цей потім цей потім цей
- 35:31і так далі І коли дійде до точки
- 35:34прийняття рішення замість того щоб
- 35:36вибрати ліворуч чи праворуч досліджувати
- 35:39цей шлях він знову досліджуватиме обидва
- 35:41переключаючись між ними буде
- 35:43досліджувати тут Потім можливо тут і тут
- 35:46і так далі І буде повільно пробиратися
- 35:49ви це Бачите далі І далі Коли ми дійдемо
- 35:51до цієї точки прийняття рішення будемо
- 35:54досліджувати і вгору і вниз поки з
- 35:56рештою не досягнемо цілі Ви помітите що
- 36:00пошук у ширину справді знайшов шлях від
- 36:03a до B ідучи конкретним шляхом Але для
- 36:06цього потрібно було дослідити багато
- 36:08станів тому ми бачимо певний компроміс
- 36:11між ДФС і bfs у dfs можуть бути випадки
- 36:15з економією пам'яті порівняно з підходом
- 36:18спершу в ширину де в цьому випадку пошук
- 36:20у ширину має досліджувати багато станів
- 36:23Але можливо так буде не завжди тепер
- 36:27звернімо увагу на код подивімося на код
- 36:30який ми могли б написати щоб реалізувати
- 36:32Щось на кшталт пошуку в глибину або
- 36:34пошуку в ширину в контексті проходження
- 36:38лабіринту я За терміналом
- 36:41у.pie подано реалізацію тієї самої ідеї
- 36:45проходження
- 36:46лабіринту я визначив клас під назвою
- 36:49node Який у цьому випадку відстежую стан
- 36:52батьківський стан тобто стан перед
- 36:54станом і дію тут ми не відстежуємо
- 36:58вартість шляху Оскільки ми можемо
- 36:59обчислити вартість шляху після того як
- 37:02знайдемо шлях від початкового стану до
- 37:04цілі на додачу до цього я визначив клас
- 37:07під назвою stack fronteer якщо ви не
- 37:10знайомі з класами то використання класів
- 37:12- це спосіб створення об'єктів у пайthні
- 37:15це має пряме відношення до
- 37:17об'єктноорієнтованого програмування де
- 37:19ідея полягає в тому що створюється
- 37:21об'єкт у якому зберігаються всі дані
- 37:24межі до складу об'єкта входять функції
- 37:28інша назва методи які можна
- 37:30використовувати для маніпулювання
- 37:32об'єктом я прокоментую код якщо ви не
- 37:35знайомі з синтаксисом спочатку йде
- 37:37функція яка створює об'єкт frontteer
- 37:40тобто межу дані в якому будуть подані у
- 37:43вигляді списку спочатку межа
- 37:45представлена порожнім списком у межі
- 37:47нічого немає у мене є функція Add яка
- 37:50додає щось до межі додаючи це в кінець
- 37:52списку є функція яка перевіряє чи
- 37:55містить межа певни стан у мене є порожня
- 37:58функція яка перевіряє чи межа порожня
- 38:00якщо межа порожня це означає що довжина
- 38:03межі дорівнює нулю ще в мене є функція
- 38:05видалення чогось із межі я не можу
- 38:08нічого видалити з межі якщо межа порожня
- 38:10тому я спочатку перевіряю це але в
- 38:12іншому випадку якщо межа не порожня
- 38:14пам'ятайте що я реалізую цю межу як стек
- 38:18структуру даних останнім прийшов першим
- 38:20вийшов це означає що останнім що Я додаю
- 38:23до межі інакше кажучи останнім у списку
- 38:26є при Мет який я маю видалити з межі ви
- 38:30побачите що я видалив останній пункт зі
- 38:32списку якщо ви введете індекс -1 у
- 38:36список пайthна Ви отримаєте останній
- 38:38елемент у списку оскільки нуль - це
- 38:40перший елемент індекс -ну1 переходить до
- 38:42останнього елемента у
- 38:44списку це noe вузл оновлюємо frontр тут
- 38:49у рядку номер 28 Щоби сказати Видаліть
- 38:52вузол який ви щойно видалили з межі і
- 38:55повертаємо E я результат цей клас
- 38:57ефективно реалізує ідею межі це дає мені
- 39:00спосіб додати щось до межі та спосіб
- 39:03видаілити щось із межі як
- 39:06стеку Також я реалізував альтернативну
- 39:09версію того що називається
- 39:12qfronteer цей клас який ви бачите в
- 39:15дужках успадкований від steк frontр
- 39:17тобто він виконуватиме ті самі дії що і
- 39:20к fronter за винятком того що спосіб
- 39:23видалення вузла з межі буде дещо іншим
- 39:26замість видалення з кінця списку як це
- 39:28було б у стеку Ми видалимо спочатку
- 39:31списку
- 39:32self.fronteer0 дасть мені перший доданий
- 39:35вузол на межі Саме цей ми повернемо у
- 39:38випадку черги
- 39:40Q Тут у мене визначення класу mazee він
- 39:44впорається із процесом взяття
- 39:46послідовності текстового файлу схожого
- 39:49на лабіринт і з'ясування як його пройти
- 39:53візьмемо за вхідні дані текстовий файл
- 39:55maze1
- 39:57txt тут є решітки які представляють
- 39:59стіни літера a що представляє початкову
- 40:02позицію і Літера B що представляє
- 40:04кінцеву позицію ви можете переглянути
- 40:07код для аналізу цього текстового файлу
- 40:09це не так цікаво більш цікава тут
- 40:12функція solve яка з'ясовує як дістатися
- 40:15з точки
- 40:16A до точки B тут ми бачимо реалізацію
- 40:21тієї самої ідеї яку бачили мить тому ми
- 40:24будемо стежити за тим скільки станів ми
- 40:27дослідили щоб повідомити ці дані пізніше
- 40:29але я починаю з вузла який представляє
- 40:32початковий стан Я починаю з межі у цьому
- 40:35випадку стек frнр Враховуючи те що я
- 40:37розглядаю межу Як стек ви можете уявити
- 40:40що алгоритм який я тут використовую є
- 40:43пошуком у глибину оскільки він
- 40:44використовує стек як структуру
- 40:48даних спочатку ця межа міститиме
- 40:51початковий
- 40:53стан ми ініціалізуємо expр який спочатку
- 40:57порожній ми нічого не досліджували і ось
- 41:01наш цикл це поняття повторення чогось
- 41:04Спочатку ми перевіряємо чи межа порожня
- 41:07викликаючи функцію empt реалізацію якої
- 41:10ми бачили хвилину тому якщо межа справді
- 41:12порожня ми підемо далі та викличемо
- 41:15виняток або помилку пайтона щоб сказати
- 41:18Вибачте рішення немає інакше ми видалимо
- 41:22вузол з межі наприклад викликавши
- 41:24fronterкра remove та оновивши кількість
- 41:27станів які ми дослідили Оскільки ми
- 41:29дослідили один додатковий стан кажемо що
- 41:32selfкраn explored + дорівнює одиниця
- 41:36додає одиницю до кількості досліджених
- 41:38станів після того як ми видалимо вузол з
- 41:40межі наступним кроком буде перевірка чи
- 41:43досягли ми цілі тобто перевірка цілі у
- 41:46випадку з лабіринтом ціль проста Я
- 41:48перевіряю чи стан вузла відповідає цілі
- 41:51Спочатку коли я налаштував Лабіринт я
- 41:53встановлював це значення під назвою goл
- 41:56ціль яке є властивістю лабіринту щоби
- 41:59перевірити чи справді вузол є ціллю якщо
- 42:02це ціль тоді я хочу повернутися назад і
- 42:05з'ясувати які дії Я виконав для
- 42:08досягнення цілі Як це зробити Ми
- 42:10пам'ятаємо що кожен вузол зберігає свого
- 42:13батька вузол який був перед ним і який
- 42:15ми використовували щоб дістатися до
- 42:18цього вузла а також дію використану для
- 42:21того щоб туди потрапити Тож я можу
- 42:23створити цикл в якому постійно
- 42:25переглядаю батька кожного вузла
- 42:27відстежую всіх батьків і які дії я
- 42:30зробив щоб дістатися від батька до
- 42:32поточного вузла Таким чином цикл буде
- 42:34повторювати процес перегляду всіх
- 42:36батьківських вузлів доки ми не
- 42:38повернемося до початкового стану який
- 42:40немає батька
- 42:42деноdeкраpent дорівнюватиме NAN роблячи
- 42:45це я буду створювати список усіх дій які
- 42:48я виконую і список усіх комірок які є
- 42:50частиною розв'язку але робитиму це у
- 42:53зворотньому порядку Бо коли я роблю це
- 42:55повертаючись від цілі до початкового
- 42:58стану я будую послідовність дій від цілі
- 43:00до початкового стану проте я хочу
- 43:02змінити порядок на зворотні щоб отримати
- 43:05послідовність дій від початкового стану
- 43:07до цілі це і буде розв'язком це все
- 43:09можливо якщо Поточний стан відповідає
- 43:11цілі інакше Якщо це не ціль тоді я додам
- 43:15цей стан до дослідженого набору Щоби
- 43:17сказати що я дослідив цей стан і не
- 43:19треба повертатися до нього якщо я
- 43:21натраплю на нього в майбутньому логіка
- 43:23тут реалізує ідею додавання сусідів до
- 43:26межі Подивіться на всіх сусідів я
- 43:28реалізував функцію під назвою neighbor
- 43:30для кожного сусіда Я перевіряю чи стан
- 43:32уже на межі чи стан уже в дослідженому
- 43:35наборі Якщо його немає ні там ні там
- 43:37тоді я додам новий дочірній вузол до
- 43:40межі ви бачите чимало синтаксису але
- 43:42головне не в тому щоб розуміти всі його
- 43:45нюанси Хоча не соромтеся придивитися до
- 43:47цього файлу самостійно щоби зрозуміти як
- 43:50він працює головне побачити як це
- 43:52реалізує той самий псевдокод ту саму
- 43:55ідею яку ми описали хвилину тому на
- 43:57екрані коли розглядали кроки які ми
- 43:59могли б виконати щоб вирішити завдання
- 44:02пошуку тепер подивімося на це в дії я
- 44:04запущу maze.p на Maze
- 44:081txt ми побачимо який вигляд мав
- 44:11Лабіринт спочатку А внизу Лабіринт після
- 44:13розв'язку завдання для цього нам
- 44:15потрібно було дослідити 11 станів і ми
- 44:19знайшли шлях від a до
- 44:21B у цій програмі Я також згенерував
- 44:24графічне подання я відкрию файл Maze png
- 44:28що створюється цією програмою Він
- 44:30показує що темний колір - це стіна
- 44:32червоний- початковий стан зелений ціль
- 44:35жовтий шлях ми знайшли шлях від
- 44:38початкового стану до
- 44:40цілі тепер подивімося на складніший
- 44:42Лабіринт щоб побачити що може
- 44:45статися я відкрию файл Maze
- 44:472txt Як бачите це значно більший
- 44:50Лабіринт Ми намагаємося знайти шлях з
- 44:53пункту a у пункт B але тепер ви знаєте
- 44:56що пошук у глибину може не досягти цілі
- 44:59з першої спроби можливо доведеться йти
- 45:01одним шляхом потім повертатися і
- 45:03досліджувати щось інше спробуємо
- 45:07запустимо python ma.p Maze 2txt цього
- 45:11разу інший лабіринт і тепер пошук у
- 45:14глибину може знайти розв'язок зірочками
- 45:17вказано шлях від a до B і ми можемо це
- 45:20побачити відкривши
- 45:22Лабіринт ось такий він жовтим кольором
- 45:25ділено шлях від початкового стану до
- 45:28цілі але скільки станів ми маємо
- 45:30дослідити перш ніж знайти цей
- 45:34шлях Пригадайте що у програмі я
- 45:37відстежував кількість станів які ми
- 45:39дослідили на цей момент повертаюся до
- 45:41термінала щоб вирішити це завдання нам
- 45:44довелося дослідити 399 різних
- 45:49станів якщо я вношу одну невелику
- 45:51модифікацію в програму та повідомляю
- 45:54програмі в кінці коли ми виводи димо
- 45:56зображення Я додаю аргумент під назвою
- 45:59Show explor Я встановлюю Show explor як
- 46:02такий що дорівнює тру і повторно запущу
- 46:05програму pythonmaz.pie і Maze 2 потім
- 46:08відкрию лабіринт і ви побачите що
- 46:10червоним виділені всі стани які мали
- 46:13бути досліджені щоби дістатися від
- 46:15початкового стану до цілі пошук у
- 46:17глибину або dfs не відразу знайшов шлях
- 46:20до цілі Він вирішив спочатку дослідити
- 46:22цей напрямок і коли він його досліджував
- 46:25йому довелось пройти всі можливі шляхи
- 46:27аж до самого кінця навіть цей довгий і
- 46:30звивестий щоб усвідомити що це глухий
- 46:33кут і програмі довелося повернутися
- 46:35потім піти в цьому напрямку тут
- 46:37пощастило що не вибрав цей шлях але не
- 46:40пощастило тут Під час дослідження цього
- 46:42напрямку дослідження купи непотрібних
- 46:45станів і потім Аналогічно Під час
- 46:47дослідження всієї цієї верхньої частини
- 46:49чого взагалі не потрібно було робити
- 46:52Отже загалом пошук у глибину насправді
- 46:54не працює оптимально він досліджує
- 46:56більше станів ніж потрібно він знаходить
- 46:59оптимальне рішення найкращий шлях до
- 47:01цілі але кількість станів які довелося
- 47:03дослідити до цього кількість кроків які
- 47:06довелося зробити була набагато більшою
- 47:09порівняємо як пошук у ширину або bfs
- 47:12працював би в цьому лабіринті щоби це
- 47:14зробити достатньо внести невелику зміну
- 47:16алгоритм для dfs і bfs однаковий за
- 47:19винятком того яку структуру даних ми
- 47:22використовуємо для представлення межі у
- 47:25dfs використовував Ек fronteer останнім
- 47:28прийшов першим вийшов тоді як у bfs я
- 47:31використаю Q fronteer першим прийшов
- 47:34першим вийшов те що я першим додам до
- 47:37межі я першим і видалю повернусь до
- 47:41термінала повторно запущу програму в
- 47:43тому самому лабіринті і тепер ви
- 47:45побачите що кількість станів які
- 47:47потрібно було дослідити лише 77 а під
- 47:50час пошуку в глибину було досліджено
- 47:52майже 400 і ми бачимо чому ми бачимо що
- 47:55сталось відкриваємо Ma png і поглянемо
- 47:59жовтим виділено розв'язок який було
- 48:01знайдено пошуком у ширину це до речі той
- 48:04самий розв'язок який було знайдено
- 48:05пошуком у глибину вони обидва знаходять
- 48:08найкращий розв'язок але бачите білі
- 48:11недосліджені клітини щоб знайти шлях до
- 48:14цілі пошуку в ширину довелося дослідити
- 48:16набагато менше станів пошиук у ширину
- 48:18працює Трохи поверхневіше він досліджує
- 48:21вузли близькі до початкового стану без
- 48:23дослідження того що розташова надалі
- 48:26Отже якщо ціль не дуже далеко пошуку
- 48:29ширини може діяти досить ефективно в
- 48:31подібному
- 48:33лабіринті у цьому випадку і bfs і dfs
- 48:37знайшли однаковий розв'язок але так
- 48:39буває не завжди погляньмо на ще один
- 48:42приклад
- 48:443
- 48:46txt у May 3 txt Зверніть увагу що тут є
- 48:50кілька шляхів якими ви можете дістатися
- 48:53від a до B це відносно на великий
- 48:56Лабіринт якщо я вимкну Show explor щоб
- 49:00ми побачили тільки розв'язок Я
- 49:02використовую bfs пошук у ширину щоби
- 49:06вирішити May
- 49:073xt ми знайшли розв'язок Я відкриваю
- 49:11Лабіринт ось наш розв'язок він
- 49:13оптимальний лише за Чотири кроки ми
- 49:16можемо дійти від початкового стану до
- 49:20цілі але що станеться якщо замість цього
- 49:23ми спробуємо використати пошук у глибину
- 49:26або dfs знову ж таки я повернувся до Q
- 49:29fronteer що означає використання пошуку
- 49:32в ширину зміню його на stack fronteer
- 49:34тобто тепер ми будемо використовувати
- 49:36пошук у
- 49:38глибину запускаю
- 49:41pythonm.p Тепер ви побачите що ми
- 49:43знаходимо розв'язок але він не
- 49:46оптимальний це те що знаходить наш
- 49:48алгоритм можливо пошук у глибину знайшов
- 49:51би цей розв'язок Можливо але не
- 49:53гарантовано що якщо нам просто не
- 49:55пощастить якщо ми виберемо цей стан
- 49:58замість того стану То пошук у глибину
- 50:00може знайти довший шлях щоб дістатися
- 50:02від початкового стану до цілі ми бачимо
- 50:06певні компроміси коли пошук у глибину
- 50:08може не знайти оптимального розв'язку На
- 50:11цьому етапі здається що пошук у ширину
- 50:13це досить добре чи це найкраще що ми
- 50:15можемо зробити якщо він знайде
- 50:17оптимальний розв'язок нам Не доведеться
- 50:19турбуватися про ситуацію коли ми можемо
- 50:21знайти довший шлях до розв'язку ніж той
- 50:24який насправді існує
- 50:26там де ціль далеко від початкового стану
- 50:28і потрібно зробити багато кроків щоб
- 50:30дістатися від початкового стану до цілі
- 50:32алгоритм bfс дослідив майже весь графік
- 50:35пройшов майже весь Лабіринт щоби знайти
- 50:37шлях від початкового стану до цілі Ми би
- 50:41хотіли щоб алгоритм був розумнішим але
- 50:44що в цьому випадку означає розумніший
- 50:46алгоритм погляньмо де пошук у ширину міг
- 50:49би прийняти інше рішення та врахуємо
- 50:51також людську інтуїцію в цьому процесі
- 50:55на на приклад що такого іншого може
- 50:58зробити людина проходячи Лабіринт
- 51:01порівняно з діями які б вирішив зробити
- 51:07bfs Перше рішення яке bfs прийняв було б
- 51:11тут коли він зробив п'ять кроків і
- 51:13опинився на розвилці він може піти
- 51:16ліворуч або праворуч у перших кількох
- 51:19кроках не було вибору з кожного цього
- 51:22стану можна було виконати лише одну дію
- 51:25тому алгоритм пошуку зробив єдине що міг
- 51:27зробити будь-який алгоритм пошуку
- 51:29продовжив переходи з одного стану в
- 51:32інший але ця точка прийняття рішення вже
- 51:35цікавіша пошук у глибину той самий
- 51:38перший алгоритм пошуку який ми
- 51:40розглядали вирішив сказати виберемо один
- 51:43шлях і пройдемо його до кінця перевіримо
- 51:46чи має який-небудь цей шлях ціль А якщо
- 51:49ні то спробуємо інший шлях пошук у
- 51:52ширину використовував альтернативний
- 51:54підхід спочатку досліди предмети які
- 51:56ближчі які поблизу Він дивився ліворуч і
- 51:59праворуч знову ліворуч і праворуч
- 52:01чергуючи варіанти в Надії знайти щось
- 52:03поблизу А що може зробити людина
- 52:06Опинившись у подібній ситуації йти
- 52:08ліворуч або праворуч людина може
- 52:10візуально побачити що вона намагається
- 52:12дістатися до стану бій який високо там і
- 52:16поворот праворуч здається ближчим до
- 52:18цілі рух праворуч має бути кращим ніж
- 52:20ліворуч тому що так швидше дістатися до
- 52:23цілі я зроблю кілька щень я роблю
- 52:26припущення що ми можемо представити цю
- 52:28сітку як двовимірну сітку де я знаю
- 52:31координати всього a має координати 00 B
- 52:35якісь інші координати і я знаю На яких
- 52:38координатах я зараз я можу розрахувати
- 52:42що йти сюди це ближче до цілі але це
- 52:45може бути розумним припущенням лише для
- 52:48деяких завдань пошуку поки що Припустимо
- 52:51що я знаю свої поточні координати і знаю
- 52:54координати ці цілі до якої намагаються
- 52:56дістатися у цій ситуації Я хотів би щоб
- 52:59алгоритм був розумнішим і знав що я
- 53:02повинен просуватися до цілі а проходити
- 53:05Лабіринт знаючи координати цілі це
- 53:08зазвичай чудовий спосіб Хоча і не завжди
- 53:11Тому тут ми встановлюємо відмінність між
- 53:14двома різними типами алгоритмів пошуку
- 53:17неінформованим пошуком та інформованим
- 53:22пошуком алгоритми неінформованого пошуку
- 53:25це такі алгоритми як dfs і bfs це
- 53:28стратегії пошуку які не використовують
- 53:31жодних специфічних знань для розв'язку
- 53:34завдання dfs і bfs було байдуже до
- 53:37структури лабіринту чи до нього самого
- 53:40як такого вони просто дивляться на
- 53:42доступні дії та вибирають зпоміж них і
- 53:45немає значення Чи це Лабіринт чи інша
- 53:48проблема розв'язок або спосіб яким
- 53:51намагаються вирішити проблему буде
- 53:53однаковим за Зараз ми розглянемо
- 53:56вдосконалений варіант неінформованого
- 53:58пошуку ми розглянемо інформований пошук
- 54:01інформований пошук - це стратегії пошуку
- 54:04які використовують знання специфічні для
- 54:06завдання щоби знайти кращий розв'язок у
- 54:10випадку з лабіринтом конкретне знання
- 54:12про завдання схоже на щось таке якщо я
- 54:14збираюся побудувати квадрат географічно
- 54:17ближче до цілі це краще ніж перебувати в
- 54:20квадраті який географічно далі І це те
- 54:23що ми можемо дізнатися ше поміркувавши
- 54:26над цією проблемою та міркуючи про те
- 54:28які знання можуть бути корисними для
- 54:31нашого агента зі штучним інтелектом
- 54:33Існує кілька різних типів інформованого
- 54:36пошуку по-перше ми розглянемо певний тип
- 54:39алгоритму пошуку який називається
- 54:41евристичним пошуком за першим найкращим
- 54:43збігом евристичний пошук або gbfs - це
- 54:47алгоритм пошуку який замість розширення
- 54:50найглибшого вузла як dfs або найближчого
- 54:53вузла як bfs за завжди розширює вузол
- 54:56який На його думку є найближчим до
- 54:59цілі алгоритм пошуку не знатиме напевно
- 55:02Чи це ближче до цілі бо Якби ми знали що
- 55:05ближче до цілі то вже мали б рішення
- 55:09знаючи що ближче до цілі Ми би просто
- 55:12пішли від початкової позиції до
- 55:15рішення Але якщо ми не знаємо рішення
- 55:17тобто не знаємо точно що ближче до цілі
- 55:21можемо оцінити те що ближче до цілі
- 55:24інакше це відомо як евристика спосіб
- 55:27оцінити ближче ми до цілі чи ні Ми
- 55:30зробимо це за допомогою евристичної
- 55:32функції яку стандартно називають H відn
- 55:35Вона приймає стан вхідних даних і
- 55:38повертає оцінку того наскільки ми
- 55:40близькі до цілі якою ж може бути
- 55:42евристична функція для алгоритму
- 55:45проходження лабіринту Отже ми проходимо
- 55:47алгоритм якою буде евристика Вона має
- 55:50відповісти на запитання яка клітинка
- 55:52краща C чи D якій із них я б віддав
- 55:56перевагу шукаючи шлях до
- 55:59цілі людина поглянула б і сказала знаєте
- 56:03ді здається
- 56:05краще навіть якщо лабіринт заплутаний і
- 56:08ви не подумали про всі стіни ді напевне
- 56:11краще але чому Бо якщо не зважати на
- 56:14стіни удамо на мить що стін не існує
- 56:17полегшимо собі завдання так би мовити
- 56:19так от дій якщо взяти до уваги
- 56:21координати ближче до цілі від клітини
- 56:24дій до цілі значно менше кроків
- 56:26порівняно із с навіть якщо ігнорувати
- 56:28стіни якщо ви знаєте координати XY точки
- 56:32С і координати XY цілі а також знаєте
- 56:35координати XY точки D ви можете
- 56:37обчислити що ді просто географічно без
- 56:40урахування стін краща Ми збираємося
- 56:43використовувати евристичну функцію яка
- 56:45називається манхетенська відстань це
- 56:48конкретний тип евристики де евристика -
- 56:50це кількість квадратів по вертикалі та
- 56:52горизонталі ліворуч або правоч поруч не
- 56:55можна йти по діагоналі тобто тільки
- 56:57вгору тільки вправо тільки вліво тільки
- 57:00вниз скільки кроків треба зробити щоби
- 57:02дійти до цілі від кожної клітинки
- 57:05виявилося що ді набагато ближча кроків
- 57:08менше Потрібно зробити лише шість кроків
- 57:10щоби досягти цілі знову ж таки ігноруємо
- 57:13стіни ми полегшили собі завдання нас
- 57:16хвилює лише оцінка того наскільки ми
- 57:18далеко це можна обчислити віднявши
- 57:20значення одне від одного і значення y
- 57:23одне від одного і ми можемо оцінити що
- 57:25dі ближче до цілі ніж с тепер у нас є
- 57:28підхід є спосіб вибрати Який вузол
- 57:30видалити з межі на кожному етапі
- 57:33алгоритму ми будемо видаляти вузол із
- 57:35межі ми будемо досліджувати вузол якщо
- 57:37він має найменше значення для цієї
- 57:39евристичної функції якщо він має
- 57:41найменшу манхетенську відстань до цілі
- 57:45Як це працює на практиці я спершу
- 57:47позначу Лабіринт числами які
- 57:49представляють значення евристичної
- 57:50функції значення манхетенської відстані
- 57:53від будь-якої з цих клітинок
- 57:55відстань від цієї клітинки до цілі один
- 57:58крок від цієї два кроки
- 58:00тричотири тут п'ять кроків одна клітинка
- 58:03праворуч і чотири вгору звідси
- 58:06манхетенська відстань дорівнює двом
- 58:09крокам географічно ми лише за два
- 58:11квадрати від цілі хоча в реальності
- 58:14доведеться йти довшим шляхом але ми ще
- 58:16не знаємо цього евристика - це простий
- 58:19спосіб оцінити наскільки ми далеко від
- 58:21цілі може наша евристика надто
- 58:23оптомістична вона вважає що ми За два
- 58:26кроки від цілі тоді як У реальності якщо
- 58:28взяти до уваги стіни їх може бути більше
- 58:31важливо те що евристика не гарантує
- 58:34скільки кроків буде зроблено
- 58:37це оцінка це спроба наближення і справді
- 58:41здається що квадрати які ніби ближче до
- 58:43цілі мають менш значення для евристичної
- 58:46функції ніж квадрати розташовані
- 58:50далі Отже що може зробити цей алгоритм
- 58:53використовуючи чний пошук знову ж таки
- 58:56для цих перших п'яти кроків немає
- 58:58особливого вибору починаємо з
- 59:00початкового стану a досліджуємо п'ять
- 59:03станів і тепер точка прийняття рішення
- 59:06треба вибрати куди йти ліворуч чи
- 59:08праворуч раніше dfs і bfs вибирали
- 59:11довільно бо це залежало від того в якому
- 59:14порядку ви розміщуєте два вузли на межі
- 59:16ми не вказували в якому порядку
- 59:18розміщувати лише порядок в якому
- 59:20видаляти тут ми можемо подивитися на 13
- 59:23і 11 сказати що цей квадрат розташований
- 59:27на відстані 11 кроків від цілі згідно з
- 59:29нашою евристикою А цей за нашою оцінкою
- 59:32на відстані 13
- 59:34кроків Отже між цими двома варіантами я
- 59:37би радше обрав 11 я волію бути за 11
- 59:41кроків від цілі тому піду праворуч ми
- 59:44можемо прийняти обґрунтоване рішення
- 59:46оскільки знаємо дещо Більше про це
- 59:48завдання йдемо далі 10 9 8 і ми між
- 59:53двома сімками ми не можемо дізнатися
- 59:55нічого конкретного тому вибираємо
- 59:57довільно Можливо ми оеремо неправильно
- 1:00:00Але це не страшно далі ми можемо вибрати
- 1:00:03цю Сімку Ідемо
- 1:00:05СШ робимо цей вибір навіть якщо він
- 1:00:08збільшує значення евристичної функції
- 1:00:10але тепер ми маємо іншу точку прийняття
- 1:00:12рішення між шісткою і вісімкою згадаємо
- 1:00:1513 але вона набагато вища між шісткою
- 1:00:19вісімкою і 13кою шість має найменше
- 1:00:22значення тому ми радше оберемо її ми
- 1:00:25можемо прийняти обґрунтоване рішення що
- 1:00:27рухатися праворуч краще ніж униз Ідемо
- 1:00:30сюди п'ять знову точка прийняття рішення
- 1:00:34ми Приймаємо рішення яке можливо і не
- 1:00:36хочемо приймати але немає способу його
- 1:00:38обійти бачимо четвірку і шістку четвірка
- 1:00:41ближче до цілі Вона веде вгору а ціль
- 1:00:44угорі і вибираємо Шлях який зрештою
- 1:00:46приводить нас у глухий кут але це
- 1:00:49нормально бо ми можемо спробувати шістку
- 1:00:51і підемо цим шляхом який зрештою приведе
- 1:00:53нас до цілі
- 1:00:55Ось як евристичний пошук може підійти до
- 1:00:58цієї проблеми Коли у нас є вибір між
- 1:01:00кількома вузлами які ми можемо дослідити
- 1:01:03ми дослідимо вузол який має найменше
- 1:01:05значення H від N евристичної функції яка
- 1:01:09оцінює як далеко я маю
- 1:01:12пройти так сталося що в цьому випадку ми
- 1:01:15маємо кращу кількість досліджених станів
- 1:01:17порівняно із bfs bfs дослідив би всю цю
- 1:01:21ділянку і всю цю ділянку але ми змогли
- 1:01:24уникнути цього скориставшись евристикою
- 1:01:27знанням про те наскільки ми близькі до
- 1:01:29цілі або про оцінку цієї
- 1:01:33ідеї це явно краще То може завжди
- 1:01:37вибиратимемо цей алгоритм а не наприклад
- 1:01:39пошук у ширину можливо однак слід узяти
- 1:01:42до уваги те що нам потрібно придумати
- 1:01:45хорошу евристику наскільки хороша
- 1:01:47евристика настільки хороший алгоритм
- 1:01:49проте розробити хорошу евристику не так
- 1:01:52і
- 1:01:53легко начим м ще варто подумати як і у
- 1:01:56випадку з попередніми двома алгоритмами
- 1:01:58чи цей алгоритм оптимальний чи завжди
- 1:02:01він знайде найкоротший шлях від
- 1:02:03початкового стану до
- 1:02:05цілі щоби відповісти на це питання на
- 1:02:08мить поглянемо на цей приклад Ми
- 1:02:10намагаємося дістатися від a до B Я
- 1:02:13позначив кожну клітинку манхетенською
- 1:02:16відстанню від цілі тобто кількістю
- 1:02:18квадратів угору і праворуч які вам
- 1:02:20потрібно пройти щоби дістатися від цього
- 1:02:23квадрата до цілі
- 1:02:24подумаємо чи жадібний пошук який завжди
- 1:02:28вибирає найменше число знайде оптимальне
- 1:02:32рішення яке найкоротше рішення і чи
- 1:02:35знайде його цей алгоритм важливо
- 1:02:38розуміти що тут точка прийняття
- 1:02:41рішення за нашою оцінкою ми за 12 кроків
- 1:02:45від цілі У нас є два вибори можемо піти
- 1:02:49ліворуч і будемо на відстані 13 кроків
- 1:02:51від цілі або вгору 11 кроків від цілі
- 1:02:54розглянувши Ці дві позиції жадібний
- 1:02:57пошук скаже що 11 краще за 13 Таким
- 1:03:01чином жадібний пошук знайде отакий шлях
- 1:03:04до
- 1:03:06цілі та виявляється що цей шлях не
- 1:03:09оптимальний є спосіб дістатися до цілі
- 1:03:12за меншу кількість кроків цей шлях
- 1:03:15складався з меншої кількості кроків хоча
- 1:03:18в цій точці прийняття рішення довелося
- 1:03:20вибрати гірший варіант із двох або те що
- 1:03:23ми оцінили як гірший варіант базуючись
- 1:03:26на евристиці ось що маємо на увазі під
- 1:03:29жадібним алгоритмом це найкраще рішення
- 1:03:31локально на цьому етапі прийняття
- 1:03:34рішення здається що краще перейти сюди
- 1:03:36ніж до
- 1:03:3713 але загалом це не обов'язково
- 1:03:40оптимальне алгоритм може знайти рішення
- 1:03:43однак може існувати і краще рішення
- 1:03:45треба якось знайти рішення нам
- 1:03:47подобається ідея евристики тобто
- 1:03:49можливість оцінити шлях відстань між
- 1:03:52нами та ціллю це допомагає прийняти
- 1:03:54краще рішення і уникнути перегляду
- 1:03:56всього простору станів але ми хотіли би
- 1:03:59змінити алгоритм щоби досягнути
- 1:04:01оптимальності щоби він був
- 1:04:04оптимальним як це зробити до чого тут
- 1:04:07інтуїція погляньмо на це
- 1:04:11завдання у цьому лабіринті евристичний
- 1:04:14пошук знайшов рішення отакий довгий шлях
- 1:04:18чому це неоптимальне рішення так з першу
- 1:04:21числа евристики дійшли до дуже низького
- 1:04:23значення але потім почали зростати 8 9
- 1:04:2710 11 аж до 12 у цьому випадку як ми
- 1:04:30можемо вдосконалити цей алгоритм ми
- 1:04:33розуміємо що якщо проходити весь
- 1:04:35алгоритм цим шляхом ми зрештою дійдемо
- 1:04:38до 12ти доведеться зробити от стільки
- 1:04:41кроків ніхто не знає скільки точно
- 1:04:43кроків просто щоб дістатися до 12 але
- 1:04:47натомість як альтернатива ми могли би
- 1:04:49зробити набагато менши кроків лише шість
- 1:04:52і опинитися на 13ти Так 13 більше за 12
- 1:04:56здається що це погано Проте це шлях із
- 1:04:59меншою кількістю кроків лише шість
- 1:05:01кроків щоби дістатися до 13 і набагато
- 1:05:04більше щоби дістатися до 12 і хоча
- 1:05:07жадібний пошук каже 12 краще ніж 13
- 1:05:10вибере 12 ми можемо діяти розумніше
- 1:05:13краще я буду там де евристично здається
- 1:05:16що потрібно більше часу проте можна
- 1:05:19дістатися туди набагато швидше Ми
- 1:05:21збираємося закодувати цю загальну ідею в
- 1:05:24формальний алгоритм відомий як пошук
- 1:05:26езірочка Він вирішить це завдання не
- 1:05:29просто розглядаючи евристику а також
- 1:05:31враховуючи Скільки часу знадобилося нам
- 1:05:34щоби дістатися до будь-якого конкретного
- 1:05:37стану відмінність у тому що при
- 1:05:39евристичному пошуку в будь-якому стані
- 1:05:41Мене хвилює лише оціночна відстань
- 1:05:43евристична цінність між мною та ціллю
- 1:05:47пошук езірочка враховуватиме дві частини
- 1:05:50інформації буде взято до уваги те як
- 1:05:53далеко я цілі а також як далеко Мені
- 1:05:56довелося пройти щоби потрапити сюди бо
- 1:05:59це теж актуально Отже ми шукатимемо
- 1:06:02алгоритми розгортаючи вузол із найменшим
- 1:06:05значенням g відn + h віn h відn - це та
- 1:06:09сама евристика про яку ми вже говорили
- 1:06:12яка змінюватиметься залежно від завдання
- 1:06:14а gvdn - це вартість досягнення вузла
- 1:06:17Скільки кроків потрібно було зробити
- 1:06:19щоби досягти поточного
- 1:06:22стану як цей алгоритм пошуку працює в
- 1:06:25реальності подивімося Знову той самий
- 1:06:28лабіринт і знову я позначив манхетенську
- 1:06:31відстань це значення є значенням H від N
- 1:06:34евристичною оцінкою того наскільки кожен
- 1:06:36квадрат віддалений від
- 1:06:39цілі коли ми починаємо досліджувати
- 1:06:42стани нам важливе не лише евристичне
- 1:06:44значення а й gvdн кількість кроків які
- 1:06:47довелося зробити щоби потрапити туди
- 1:06:50Мені потрібна сума цих двох чисел Як це
- 1:06:52працює перший хід один крок оцінка Я за
- 1:06:5616 кроків від
- 1:06:59цілі загальне значення дорівнює
- 1:07:0217 роблю ще один крок Тепер я зробив два
- 1:07:06кроки оцінюю відстань від цілі у 15
- 1:07:08кроків знову ж таки загальне значення 17
- 1:07:11я зробив Три кроки оцінюю відстань від
- 1:07:14цілі у 14 кроків і так далі І так далі
- 1:07:17Чотири кроки оцінка 13 п'ять кроків
- 1:07:20оцінка 12 А ось тепер точка прийняття
- 1:07:22рішення я можу бути на відстані шести
- 1:07:25кроків від початку з евристикою 13 із
- 1:07:27загальною оцінкою 19 або я можу бути на
- 1:07:31відстані шести кроків від початку з
- 1:07:33евристикою 11 із загальною оцінкою 17
- 1:07:36між 19 і 17 я би вибрав 17 6 + 11 поки
- 1:07:41що нічим не відрізняється від того що ми
- 1:07:44бачили раніше ми вибираємо цей варіант
- 1:07:46оскільки він видається кращим Я
- 1:07:48продовжую йти цим шляхом але саме тут
- 1:07:51усе стає
- 1:07:52інакше тепер тепер я можу бути на
- 1:07:54відстані 15 кроків від початку із
- 1:07:57орієнтовною дистанцією 6 15 + 6 =
- 1:08:0221 як альтернатива я можу бути за шість
- 1:08:05кроків від початку це було п'ять кроків
- 1:08:07Отже цешість із загальним оціненим
- 1:08:10значенням 13 6 + 13 = 19 тут ми б
- 1:08:15оцінили g відn + h відn як 19 6 + 13
- 1:08:20тоді як тут ми б отримали 15 + 6 або 21
- 1:08:24інтуїція така 19 менше за 21 йдемо сюди
- 1:08:29але я волів би зробити менше кроків щоби
- 1:08:31дістатися до 13 ніж зробити 15 кроків і
- 1:08:35опинитися на шістці Оскільки тут
- 1:08:37доведеться зробити більше кроків можливо
- 1:08:40цей шлях
- 1:08:41кращий тому дослідимо його робимо ще
- 1:08:45один крок це 7+ 14 = 21 між цими двома
- 1:08:51ніби рівність ми все одно можемо слідити
- 1:08:54цей Але після цього коли евристичні
- 1:08:56значення цих чисел почнуть збільшуватися
- 1:08:59а ці евристичні значення почнуть
- 1:09:02зменшуватися ви побачите що ми фактично
- 1:09:04продовжимо досліджувати цей шлях Можете
- 1:09:07порахувати і побачити що в кожній точці
- 1:09:10прийняття рішення пошук е зірочка
- 1:09:12зробить вибір на основі Суми того
- 1:09:15скільки кроків мені знадобилося щоб
- 1:09:17дістатися до поточної позиції і як
- 1:09:19далеко я від цілі Отже хоча нам і
- 1:09:22довелося досліджувати деякі з цих станів
- 1:09:24остаточне рішення яке ми знайшли було по
- 1:09:26суті оптимальним таки знайшовся
- 1:09:28найшвидший спосіб дістатися від
- 1:09:30початкового стану до цілі Виявляється що
- 1:09:32пошук зірочка - це оптимальний алгоритм
- 1:09:35але за певних умов умови H вn моя
- 1:09:38евристика має бути
- 1:09:40прийнятною що означає прийнятність
- 1:09:42евристики евристика прийнятна якщо вона
- 1:09:45ніколи не переоцінює справжню вартість
- 1:09:48кожну подію завжди потрібно або точно
- 1:09:50визначити або її потрібно недооцінити ми
- 1:09:53бачили попередній приклад де евристичне
- 1:09:55значення було набагато меншим за
- 1:09:57фактичну вартість це нормально але
- 1:09:59ніколи не слід переоцінювати евристичні
- 1:10:03значення ніколи не слід думати що я далі
- 1:10:05від цілі ніж
- 1:10:07насправді щоби зробити твердження
- 1:10:10сильнішим H від N також має бути
- 1:10:13послідовною Що це означає математично це
- 1:10:16означає що для кожного вузла який ми
- 1:10:19називатимемо N І наступного вузла який я
- 1:10:22називатиму nш
- 1:10:24з вартістю кроку C евристичне значення N
- 1:10:27має бути меншим або дорівнювати
- 1:10:29евристичному значенню n' плюс вартість
- 1:10:33висловимо цю математичну формулу словами
- 1:10:35якщо я зараз у цьому стані евристичне
- 1:10:38значення від мене до цілі не має бути
- 1:10:40більшим ніж евристичне значення мого
- 1:10:43наступника наступного місця куди я міг
- 1:10:45би піти плюс вартість кроку таким чином
- 1:10:48це лише перевірка того що моя евристика
- 1:10:51відповідає всім крокам які я можу
- 1:10:53зробити поки це правда пошук езірочка
- 1:10:56знайде оптимальне рішення і Саме тут
- 1:10:58інколи може виникнути велика частина
- 1:11:00викликів у завданнях пошуку пошук
- 1:11:03езірочка - це відомий алгоритм і ви
- 1:11:06можете написати код досить легко а от
- 1:11:08вибір евристики може бути цікавим
- 1:11:10викликом що краще евристика то краще я
- 1:11:14зможу вирішити завдання і то менше
- 1:11:16станів мені доведеться
- 1:11:18досліджувати Мені потрібно переконатися
- 1:11:21що евристика задовольняє ці конкретні
- 1:11:26обмеження Отже це лише деякі приклади
- 1:11:28алгоритмів пошуку які можуть працювати
- 1:11:31їх звісно набагато більше наприклад
- 1:11:33пошук езірочка має тенденцію
- 1:11:35використовувати багато пам'яті тому
- 1:11:38існують альтернативні підходи які
- 1:11:40використовують менше пам'яті Ніж ця
- 1:11:42версія пошуку езірочка існують інші
- 1:11:45алгоритми пошуку оптимізовані для інших
- 1:11:48випадків поки що ми розглядали алгоритми
- 1:11:51пошуку з одним агентом я намагаюся
- 1:11:54вирішити
- 1:11:56завдання Я намагаюся пройти Лабіринт я
- 1:12:00намагаюся скласти п'ятнашки я намагаюся
- 1:12:03знайти маршрут з пункту a в пункт B
- 1:12:06однак іноді в пошукових ситуаціях ми
- 1:12:08потрапляємо в змагальну ситуацію де я
- 1:12:11агент намагаюся приймати розумні рішення
- 1:12:14а проти мене так би мовити бореться
- 1:12:16хтось інший який має протилежну ціль
- 1:12:19хтось інший який хоче щоб я зазнав
- 1:12:22невдачі уявити це можна знову ж таки на
- 1:12:25прикладі гри Хрестики нулики де є ігрове
- 1:12:28поле 3хтри квадрати у яких по черзі
- 1:12:31треба ставити хрестик або Нулик ціль
- 1:12:34полягає в тому щоби виставити три
- 1:12:35хрестики в лінію або три нулики
- 1:12:38комп'ютери добре грають в ігри вони
- 1:12:41легко можуть впоратися зі складними
- 1:12:43іграми Не кажучи вже про Хрестики нулики
- 1:12:47можете собі уявити яким буде розумне
- 1:12:49рішення в цій грі Перший гравець ставить
- 1:12:52хрестик по всередині другий Нулик угорі
- 1:12:55яким буде розумний хід для хрестика куди
- 1:12:58би ви його поставили є кілька варіантів
- 1:13:01але якщо штучний інтелект грає
- 1:13:03оптимально тоді він має поставити
- 1:13:06хрестик угорі праворуч Нулик у цій
- 1:13:08ситуації має ціль протилежну хрестику
- 1:13:11хрестик намагається виграти гру
- 1:13:13заповнивши діагональ а в нулика
- 1:13:15протилежна ціль завадити цьому тому
- 1:13:18Нулик стане тут щоби заблокувати хрестик
- 1:13:21але тепер хрестик може зробити хитрий
- 1:13:24хід він може стати тут і тепер у
- 1:13:27хрестика є два можливі шляхи виграти гру
- 1:13:29хрестик може виграти закривши центральну
- 1:13:31горизонталь або хрестик може виграти
- 1:13:34закривши праву вертикаль і вже неважливо
- 1:13:36де Нулик зробить наступний крок може
- 1:13:39стати тут блокуючи горизонтальний ряд
- 1:13:41але тоді хрестик виграє гру заповнивши
- 1:13:44праву вертикаль для того щоб комп'ютер
- 1:13:46міг вирішити це завдання у нього є
- 1:13:48безліч даних це завдання за своєю суттю
- 1:13:51схоже на ті які ми розглядали раніше є
- 1:13:54дії є певний стан дошки є певний перехід
- 1:13:57від однієї дії до наступної але
- 1:14:00відмінність полягає в тому що це тепер
- 1:14:02не просто класичне завдання пошуку А
- 1:14:04завдання змагального пошуку Я граю за
- 1:14:07хрестик і намагаюся знайти найкращі ходи
- 1:14:10але знаю що є супротивник який
- 1:14:12намагається зупинити мене Отже Нам
- 1:14:15потрібен алгоритм який впорається із цим
- 1:14:18змагальним пошуком розглянемо алгоритм
- 1:14:21мінімаксу який дуже добре працює для
- 1:14:23подібних Ігор де є два гравці він може
- 1:14:26працювати і в інших типах Ігор але зараз
- 1:14:28ми розглянемо ігри де я роблю хід потім
- 1:14:32суперник робить хід я намагаюся виграти
- 1:14:35і суперник намагається виграти інакше
- 1:14:38кажучи суперник змушує мене
- 1:14:41програти що потрібно щоби цей алгоритм
- 1:14:43працював щоразу коли ми намагаємося
- 1:14:46перекласти людську концепцію гри
- 1:14:48Перемоги та поразки на комп'ютер Ми
- 1:14:51хочемо перекласти її так щоб комп
- 1:14:53комютер її зрозумів комп'ютер насправді
- 1:14:55розуміє лише числа ми хочемо якимось
- 1:14:58чином перевести гру в Хрестики нулики у
- 1:15:01щось числове у те що комп'ютер
- 1:15:04розуміє зазвичай комп'ютер не розуміє
- 1:15:07поняття виграш чи програш але він
- 1:15:09розуміє концепцію більшого та меншого що
- 1:15:12ми можемо зробити узяти кожен із
- 1:15:15можливих шляхів якими може йти гра в
- 1:15:17Хрестики нулики і призначити значення чи
- 1:15:20корисність кожному з цих можливих
- 1:15:22способів
- 1:15:23у хрестиках-нуликах як і в багатьох
- 1:15:25типах Ігор є три можливі результати
- 1:15:28результати Нулик виграє хрестик виграє
- 1:15:31або нічия тобто виграє Перший гравець
- 1:15:34виграє другий гравець або нічия
- 1:15:36присвоємо кожному з цих можливих
- 1:15:38результатів різні значення ситуація
- 1:15:41Нулик виграє матиме значення -ну1 нічия
- 1:15:45матиме значення нуль і хрестик виграє
- 1:15:49матиме значення один ми присвоїли числа
- 1:15:52кожному з трьох можли
- 1:15:53результатів ще у нас є два гравці
- 1:15:57гравець хрестик і гравець
- 1:15:59Нулик ми підемо далі і назвемо гравця
- 1:16:02хрестик гравцем Макс а гравця Нулик
- 1:16:04гравцем
- 1:16:06міні навіщо тому що в міні максному
- 1:16:09алгоритмі гравець Макс яким у цьому
- 1:16:12випадку є хрестик прагне максимізувати
- 1:16:15рахунок це можливі варіанти рахунку -10
- 1:16:18і о хрестик хоче максимізувати рахунок
- 1:16:21якщо це взагалі можливо хрестик хотів би
- 1:16:24таку ситуацію коли він виграє гру і
- 1:16:26отримає одиницю Але якщо це неможливо
- 1:16:29Якщо хрестику потрібно вибрати між цими
- 1:16:32двома варіантами -1 означає перемогу
- 1:16:34нулика нуль означає нічию хрестик воліє
- 1:16:38щоби ніхто не виграв йому краще нуль ніж
- 1:16:40-нус1 тобто перемога нулика Таким чином
- 1:16:43поняття виграшу та програшу було зведено
- 1:16:46математично до простої спроби
- 1:16:48максимізувати рахунок гравець хрестик
- 1:16:51завжди хоче щоби рахунок був більший з
- 1:16:53іншого боку гравець міні у цьому випадку
- 1:16:56Нулик прагне мінімізувати рахунок
- 1:16:59гравець Нулик хоче щоби рахунок був
- 1:17:01якомога меншим ми взяли гру Хрестики
- 1:17:04нулики і перетворили її на щось
- 1:17:06математичне на щось таке де хрестик
- 1:17:09намагається максимізувати рахунок а
- 1:17:11Нулик
- 1:17:12мінімізувати розглянемо всі частини гри
- 1:17:15які нам потрібні для закодування її в
- 1:17:18штучний інтелект щоби штучний інтелект
- 1:17:20міг грати у Хрестики нулики для гри нам
- 1:17:23знадобиться ще дещо деякий початковий
- 1:17:26стан який ми в цьому випадку назвемо s0
- 1:17:29з нього починається гра це незаповнене
- 1:17:32поле для хрестиківнуликів нам також
- 1:17:34знадобиться функція під назвою Player
- 1:17:36Вона прийматиме за вхідні дані стан тут
- 1:17:39представлений S а результатом функції
- 1:17:41playр буде черга якого гравця потрібно
- 1:17:45дати комп'ютеру поле для гри в Хрестики
- 1:17:47на улики і запустити його через функцію
- 1:17:50яка повідомляє чия черга
- 1:17:54нам знадобиться уявлення про дії які ми
- 1:17:57можемо Виконати за мить побачимо
- 1:17:59приклади нам потрібно уявлення про
- 1:18:02модель переходу як і раніше Якщо у мене
- 1:18:04є стан і я роблю дію Мені потрібно знати
- 1:18:07до чого це приведе потрібен спосіб
- 1:18:09дізнатися коли гра закінчилася це
- 1:18:12еквівалентно перевірці цілі але мені
- 1:18:14потрібна завершальна перевірка якийсь
- 1:18:17спосіб перевірити чи стан завершальний
- 1:18:20тобто чи закінчилася гра у класичній грі
- 1:18:24в хрестикинуликий завершальний стан
- 1:18:25означає що або хтось виставив три знаки
- 1:18:28вряд або всі квадрати заповнені будь-яка
- 1:18:31з цих умов означає завершальний стан у
- 1:18:34шахах це може бути мат або ситуація у
- 1:18:36якій мат неможливий це буде завершальний
- 1:18:38стан і нарешті нам знадобиться функція
- 1:18:41корисності функція яка приймає стан і
- 1:18:43дає нам числове значення для
- 1:18:45завершального стану Скажімо так Якщо
- 1:18:47виграє хрестик значення буде один якщо
- 1:18:50Нулик мінус1дин якщо нічия тоді нуль
- 1:18:54розглянемо по черзі кожен із них
- 1:18:56початковий стан ми можемо представити як
- 1:18:58порожнє поле для грив Хрестики нулики з
- 1:19:01цього починаємо це місце з якого ми
- 1:19:04починаємо пошук я представлятиму все
- 1:19:07візуально ви можете уявити що це масив
- 1:19:09або двовимірний масив усіх можливих
- 1:19:13квадратів нам потрібна функція playр яка
- 1:19:16приймає стан і повідомляє чия черга
- 1:19:19Припустимо що перший хід робить хрестик
- 1:19:22якщо ігрове поле порожняє тоді функція
- 1:19:24playр повертає хрестик якщо поле уже з
- 1:19:26хрестиком тоді функція playр повертає
- 1:19:29нуль
- 1:19:30функція Player приймає ігрове поле і
- 1:19:33повідомляє чия
- 1:19:35черга далі розглянемо функцію actions
- 1:19:39функція actions подібно до класичного
- 1:19:41пошуку приймає стан і дає нам набір усіх
- 1:19:43можливих дій які ми можемо виконати в
- 1:19:46цьому
- 1:19:47стані уявімо що настала черга нулика
- 1:19:51робити хід Що станеться коли ми
- 1:19:54передаємо його функції actions функція
- 1:19:57actions с приймає цей стан гри як вхідні
- 1:20:00дані а результатом буде набір можливих
- 1:20:02дій набір хід у верхній лівий кут або в
- 1:20:06нижній квадрат посередині це два можливі
- 1:20:09варіанти дій коли починаю з цього
- 1:20:10конкретного
- 1:20:13стану як і раніше коли ми додаємо стани
- 1:20:16та дії нам потрібна модель переходу щоби
- 1:20:19повідомити який новий стан Ми отримаємо
- 1:20:22коли виконаємо дію в цьому стані
- 1:20:25визначаємо це за допомогою функції
- 1:20:27result яка приймає стан як вхідні дані а
- 1:20:30також дію коли застосовуємо функцію
- 1:20:33result до цього стану ставлячи Нулик у
- 1:20:35верхній лівий кут новий стан який ми
- 1:20:37отримаємо - це результуючи стан де Нулик
- 1:20:40у верхньому лівому куті Це здається
- 1:20:42очевидним для тих хто вміє грати в
- 1:20:44Хрестики нулики Логічно що поставивши
- 1:20:46Нулик у верхній лівий кут Ви отримаєте
- 1:20:48таке поле але всю цю інформацію потрібно
- 1:20:51закодувати в штучний інтелект Він не
- 1:20:53знає як грати в Хрестики нулики доки ви
- 1:20:55не скажете йому як працюють правила гри
- 1:20:58ця функція дозволяє повідомити штучному
- 1:21:00інтелекту як ця гра працює і як дії
- 1:21:03впливають на результат гри штучний
- 1:21:05інтелект має знати як працює гра і коли
- 1:21:08гру закінчено визначивши функцію
- 1:21:11terminнаal яка приймає як вхідні дані
- 1:21:14стан S якщо ми беремо гру яка ще не
- 1:21:17закінчилася передаємо її функції terміal
- 1:21:20результат буде хибним гру не закін але
- 1:21:23якщо взяти гру яка закінчилася або
- 1:21:25хрестик заповнив діагональ передамо це
- 1:21:28функції terminal тоді результат буде
- 1:21:30істиним тому що гру
- 1:21:32закінчено Нарешті ми розповіли штучному
- 1:21:35інтелекту як працює гра які рухи можна
- 1:21:37робити І що відбувається коли ви їх
- 1:21:40робите повідомили йому коли гра
- 1:21:43закінчиться тепер потрібно повідомити
- 1:21:46йому значення кожного з цих станів ми
- 1:21:48робимо це визначаючи функцію tility яка
- 1:21:51приймає стан S і повідомляє нам рахунок
- 1:21:54або корисність цього стану ще раз якщо
- 1:21:58хрестик виграє utility дорівнює один
- 1:22:01коли Нулик виграє utility дорівнює
- 1:22:05-1 штучний інтелект має знати корисність
- 1:22:08кожного завершального стану коли гру
- 1:22:10буде закінчено покажу вам отаке поле де
- 1:22:13гру закінчено і я прошу штучний інтелект
- 1:22:16сказати яке значення має цей
- 1:22:19стан він може це зробити значення стану
- 1:22:22один але все цікавіше якщо гру ще не
- 1:22:25закінчено уявімо таке ігрове поле ми
- 1:22:28всередині гри черга нулику зробити хід
- 1:22:32це можна обчислити за допомогою функції
- 1:22:35Player Player S передаємо стану
- 1:22:37відповідь Нулик Ось як ми знаємо чий хід
- 1:22:41яке значення цього поля і які дії має
- 1:22:44зробити Нулик тут треба зробити
- 1:22:47розрахунки і саме тут на допомогу
- 1:22:49приходить мінімаксний алгоритм
- 1:22:51пам'ятайте що що хрестик намагається
- 1:22:53максимізувати рахунок а Нулик
- 1:22:55мінімізувати рахунок Нулик хотів би
- 1:22:58мінімізувати загальне значення яке ми
- 1:23:00отримуємо в кінці гри оскільки гру ще не
- 1:23:04закінчено ми не знаємо значення ігрового
- 1:23:07поля потрібно зробити розрахунки щоби це
- 1:23:11зрозуміти як же зробити ці розрахунки
- 1:23:14для цього Розглянемо як і в класичні
- 1:23:17ситуації пошуку які дії можуть відбутися
- 1:23:19далі І до яких станів вони
- 1:23:23ведуть у цій позиції є лише два відкриті
- 1:23:26квадрати тобто є лише два відкриті місця
- 1:23:29куди Нулик може зробити хід або у
- 1:23:33верхній лівий кут або внизу
- 1:23:37посередині мінімаксний не знає одразу
- 1:23:40який із цих ходів буде кращим тому він
- 1:23:43розглядатиме обидва але зараз ми
- 1:23:46потрапляємо в таку саму ситуацію тепер у
- 1:23:48мене є ще два незакінчені ігрові поля що
- 1:23:51далі і саме в цьому сенсі ми будемо
- 1:23:54називати мінімаксний алгоритм
- 1:23:56рекурсивним він повторить той самий
- 1:23:58процес але тепер розглядатиме його з
- 1:24:01протилежної точки зору ніби я гравець
- 1:24:04Нулик збираюся Поставити себе на місце
- 1:24:07суперника гравця хрестик і буду думати
- 1:24:10що зробив би мій суперник Якби він був у
- 1:24:13цій позиції що зробив би гравець хрестик
- 1:24:17у цій позиції І що сталося б інший
- 1:24:20гравець мій суперник гравець хрестик
- 1:24:23намагається максимізувати рахунок тоді
- 1:24:25як я гравець Нулик намагаюся
- 1:24:28мінімізувати рахунок хрестик намагається
- 1:24:31отримати максимально можливе значення що
- 1:24:33ж буде у цій позиції на полі хрестик має
- 1:24:36лише один вибір заповнити центральну
- 1:24:39вертикаль ми знаємо що це поле На якому
- 1:24:42хрестик виграє має значення один якщо
- 1:24:45хрестик виграє значення цього ігрового
- 1:24:47поля дорівнюватиме одиниці якщо цей стан
- 1:24:51може привести лише до цього стану якщо
- 1:24:54це єдиний можливий варіант і цей стан
- 1:24:56має значення один тоді максимально
- 1:24:58можливе значення яке гравець хрестик
- 1:25:00може отримати з цього ігрового поля
- 1:25:03також дорівнює одиниці звідси ми можемо
- 1:25:06закінчити гру зі значенням один тому
- 1:25:08поле також має значення
- 1:25:10один тепер розглянемо це поле що буде
- 1:25:14хрестик має зробити хід єдиний варіант
- 1:25:16ходу верхній лівий кут хрестик іде Туди
- 1:25:19і в цій грі ніхто не виграє ні в кого
- 1:25:21немає ліній тобто значення цього
- 1:25:23ігрового поля дорівнює нулю за тією
- 1:25:26самою логікою якщо з цієї позиції поля
- 1:25:29єдине місце куди ми можемо потрапити це
- 1:25:32поле із значенням нуль тоді цей стан
- 1:25:34також має значення нуль і ось тепер
- 1:25:36вибір спроба мінімізувати я як гравець
- 1:25:39Нулик тепер знаю що якщо я походжу у
- 1:25:42верхній лівий кут це закінчиться грою зі
- 1:25:46значенням один це ми припускаємо що всі
- 1:25:49грають оптимально А якщо я натомість
- 1:25:52виберу нижній ряд це приведе до появи
- 1:25:55ігрового поля зі значенням нуль У мене
- 1:25:57два варіанти один і нуль потрібно
- 1:25:59вибрати як гравець міні я би вибрав
- 1:26:02варіант із мінімальним значенням щоразу
- 1:26:05коли гравець має кілька варіантів
- 1:26:07гравець міні вибере варіант із найменшим
- 1:26:09значенням а гравець Макс із найбільшим
- 1:26:12значенням між одиницею і нулем нуль
- 1:26:15менший тобто я краще виберу нічию ніж
- 1:26:18програю це ігрове поле Скажімо так також
- 1:26:21має значе нуль бо якщо я граю оптимально
- 1:26:24Я виберу цю розвилку я поставлю Нулик
- 1:26:27тут щоби заблокувати хрестикурят хрестик
- 1:26:30стане у верхньому лівому куті і гра
- 1:26:32закінчиться в нічию це логіка
- 1:26:34мінімаксного алгоритму розглянути всі
- 1:26:37варіанти які можна зробити усі дії які
- 1:26:39можна зробити а потім Поставити себе на
- 1:26:42місце суперника я вирішую який хід
- 1:26:44зробити Зараз враковуючи який хід
- 1:26:47зробить мій суперник потім для цього я
- 1:26:50обмірковую який хід я зробив би після
- 1:26:52цього І так далі І так далі поки не
- 1:26:55дійду до кінця гри до одного з
- 1:26:57завершальних станів ця точка прийняття
- 1:26:59рішення коли я як гравець Нулик
- 1:27:01намагаюся вирішити щодо чого приймати
- 1:27:04рішення могла бути лише частиною логіки
- 1:27:07яку гравець хрестик мій суперник
- 1:27:09використовував захід переді мною це може
- 1:27:12бути частиною якогось більшого дерева де
- 1:27:15хрестик намагається зробити крок у цій
- 1:27:17ситуації йому потрібно прийняти рішення
- 1:27:19вибираючи між трьома варіантами що далі
- 1:27:22ми від кінця гри то глибшим буде дерево
- 1:27:25тому що кожен його рівень відповідатиме
- 1:27:28одному ходу чи дії які я роблю одному
- 1:27:31ходу чи дії які суперник робить щоби
- 1:27:34вирішити що станеться і Виявляється що
- 1:27:37якщо я гравець хрестик у цій позиції і
- 1:27:40якщо я рекурсивно виконую логіку то бачу
- 1:27:43що в мене є три варіанти один з яких
- 1:27:45веде до значення нуль якщо я походжу
- 1:27:47сюди і якщо всі гратимуть оптимально
- 1:27:50буде нічия якщо я походжу сюди Нулик
- 1:27:53виграє а Я програю граючи оптимально або
- 1:27:56сюди де я гравець хрестик можу виграти
- 1:27:58між результатом нуль -1 і О я би вибрав
- 1:28:02поле зі значенням один тому що це
- 1:28:04максимальне значення яке я можу отримати
- 1:28:06Отже це поле також матиме максимальне
- 1:28:08значення один це дерево може стати дуже
- 1:28:11глибоким особливо коли у грі стає дедалі
- 1:28:13більше ходів Ця логіка працює не лише
- 1:28:16для хрестиківнуликів але й для будь-якої
- 1:28:19з ігор Де я роблю хід суперник робить
- 1:28:22хід і ми
- 1:28:23змагаємося можна спростити цю діаграму
- 1:28:26до ось такої діаграми це абстрактна
- 1:28:28версія мінімаксного дерева з усіма
- 1:28:31станами я не показую вам поле для
- 1:28:33Хрестиків нуликів це репрезентація
- 1:28:36якоїсь загальної гри чи то Хрестиків
- 1:28:39нуликів чи то якоїсь
- 1:28:41іншої Зелена стрілка спрямована вгору
- 1:28:44означає стан
- 1:28:45максимізації Я хочу щоби рахунок був
- 1:28:48якомога більшим а червоні стрілки
- 1:28:51спрямовані в низ це стани мінімізації де
- 1:28:53гравець міні намагається зробити рахунок
- 1:28:56якомога меншим уявіть у цій ситуації що
- 1:28:59я гравець який максимізує і я маю три
- 1:29:03варіанти один вибір дає мені рахунок пть
- 1:29:06балів інший рахунок три і ще один
- 1:29:08рахунок дев'ять між цими трьома
- 1:29:11варіантами мій найкращий варіант вибрати
- 1:29:13дев'ятку оцінку яка максимізує мої
- 1:29:16можливості зпоміж усіх трьох варіантів
- 1:29:19тому я можу дати цьому стану знач де
- 1:29:22тому що серед трьох варіантів це
- 1:29:24найкращий
- 1:29:27вибір це моє рішення Уявіть що до кінця
- 1:29:31гри один хід і виникне логічне запитання
- 1:29:34Що може зробити мій суперник за два ходи
- 1:29:36до кінця
- 1:29:38партії мій суперник гравець міні він
- 1:29:41намагається зробити рахунок якомога
- 1:29:43меншим Уявіть що сталося би якби йому
- 1:29:46довелося вибирати один вибір веде нас до
- 1:29:49цього стану де я гравець Макс збираюся
- 1:29:52вибрати дев'ять найбільший рахунок один
- 1:29:55веде до цього стану де я гравець Макс
- 1:29:58вибрав би вісім тому що це був би
- 1:30:00найбільший рахунок тепер гравець міні
- 1:30:04змушений вибирати між дев'яткою і
- 1:30:06вісімкою він вибере найменший рахунок
- 1:30:09тобто вісім Ось так цей процес
- 1:30:12розгортатиметься але гравець міні у
- 1:30:15цьому випадку розглядає обидва свої
- 1:30:17варіанти а потім усі варіанти які
- 1:30:19стануть можливими в результаті Отже це
- 1:30:22загальна картина мінімаксного алгоритму
- 1:30:24спробуємо формалізувати його за
- 1:30:27допомогою псевдокоду Отже що саме
- 1:30:30відбувається в мінімаксному алгоритмі
- 1:30:32враховуючи стан S нам потрібно вирішити
- 1:30:35що має статися гравець Макс якщо це Його
- 1:30:37черга вибере дію a у actions від S
- 1:30:41нагадаю що actions - це функція яка
- 1:30:44приймає стан і повертає всі мої можливі
- 1:30:46дії вона повідомляє мені про всі можливі
- 1:30:50рухи
- 1:30:53гравець Макс збирається вибрати дію a у
- 1:30:56наборі дій яка дає мені найвище значення
- 1:30:59minanvue result від S і
- 1:31:03a що це означає що я хочу вибрати
- 1:31:07варіант Який дасть найвищий рахунок з
- 1:31:09усіх дій
- 1:31:11a але яким буде цей рахунок щоб
- 1:31:14обчислити це мені потрібно знати що мій
- 1:31:16суперник гравець міні збирається робити
- 1:31:19якщо він хоче мінімізувати значення
- 1:31:21стану який виник яким буде значення
- 1:31:24стану після того як я виконаю цю дію І
- 1:31:27що станеться коли гравець міні спробує
- 1:31:29мінімізувати значення цього стану я
- 1:31:32розгляну це для всіх можливих варіантів
- 1:31:34І після того виберу дію A яка має
- 1:31:37найвище
- 1:31:39значення подібним чином гравецьміні
- 1:31:42зробить те саме але обернено він також
- 1:31:45розгляне Які можливі дії він може
- 1:31:47виконати під час свого ходу і вибере дію
- 1:31:50a що має наймен ше можливе значення з
- 1:31:53усіх варіантів а звідки він знає яке
- 1:31:56найменше можливе значення з усіх
- 1:31:57варіантів він розгляне те що збирається
- 1:32:00зробити гравець Макс який результат
- 1:32:02застосування цієї дії до поточного стану
- 1:32:06яке значення розрахував би гравець Макс
- 1:32:08для цього конкретного
- 1:32:11стану кожен приймає рішення оцінюючи що
- 1:32:14може зробити
- 1:32:17суперник тепер звернімо увагу на функції
- 1:32:20maxv і meanue Як ви обчислюєте значення
- 1:32:24стану коли намагаєтеся максимізувати
- 1:32:27його значення або мінімізувати його
- 1:32:29значення якщо ви можете це зробити тоді
- 1:32:33ми маємо повну реалізацію мінімаксного
- 1:32:36алгоритму спробуємо реалізувати функцію
- 1:32:38Max value яка приймає стан і повертає
- 1:32:41значення цього стану якщо я намагаюся
- 1:32:44максимізувати його
- 1:32:47значення Спершу я перевірю чи
- 1:32:49закінчилася гра якщо так інакше кажучи
- 1:32:52якщо стан є завершальним тоді все легко
- 1:32:56У мене є функція utility яка повідомляє
- 1:32:59вартість поля якщо гра закінчилася Я
- 1:33:02перевіряю виграв хрестик виграв Нулик
- 1:33:05нічия функція tilліity просто знає
- 1:33:08значення стану складніше якщо гра не
- 1:33:10закінчилася тоді мені потрібно міркувати
- 1:33:13рекурсивно про те що суперник зробить
- 1:33:15під час наступного ходу потім я обчислюю
- 1:33:18значення цього стану і хочу щоб воно
- 1:33:20було якомога
- 1:33:22вищим я відстежуватиму це значення у
- 1:33:25змінні V якщо я хочу щоби значення було
- 1:33:28якомога вищим Мені потрібно надати в
- 1:33:30початкове значення Спочатку я встановлю
- 1:33:33його якомога нижчим бо ще не знаю які
- 1:33:35варіанти мені доступні нехай V дорівнює
- 1:33:38від'ємний нескінченності це дивно але
- 1:33:41ідея в тому що я визначаю початкове
- 1:33:43значення якомого нижчим тому що
- 1:33:45розглядаючи свої дії Я завжди
- 1:33:47намагатимуся зробити краще ніж V А при V
- 1:33:51дорів від'ємній нескінченності Я завжди
- 1:33:54можу зробити
- 1:33:56краще я обмірковую свої дії це буде
- 1:33:59різновид циклу де для кожної дії в
- 1:34:02actions від
- 1:34:03State Нагадую що actions - це функція
- 1:34:06яка приймає мій стан і надає мені всі
- 1:34:08можливі дії які я можу використовувати в
- 1:34:10цьому стані кожну з цих дій треба
- 1:34:13порівняти з
- 1:34:15в тому V буде
- 1:34:18дорівнювати максимуму V та результату
- 1:34:22цього виразу що це за вираз Спочатку це
- 1:34:25отримання результату виконання дії та
- 1:34:27стану а потім отримання мінімального
- 1:34:30значення цього результату інакше кажучи
- 1:34:33я хочу з'ясувати з цього стану що
- 1:34:36найкраще може зробити гравець міні бо
- 1:34:39він намагається мінімізувати рахунок
- 1:34:41яким би не був результат мінімального
- 1:34:43значення цього стану порівняйте його з
- 1:34:46поточним найкращим значенням і виберіть
- 1:34:48максимальне оскільки я намагаюся
- 1:34:51максимізувати значення Коротше кажучи що
- 1:34:54роблять ці три рядки коду переглядають
- 1:34:57усі мої можливі дії і запитують як
- 1:34:59максимізувати рахунок Враховуючи те що
- 1:35:01мій суперник збирається зробити після
- 1:35:04цього циклу я можу повернути в і це
- 1:35:07тепер значення цього конкретного стану а
- 1:35:09для гравця міні усе прямо протилежне та
- 1:35:12сама логіка тільки обернено щоб
- 1:35:15обчислити мінімальне значення стану
- 1:35:17спочатку Перевіряємо чи це завершальний
- 1:35:19стан Якщо так повер
- 1:35:22інакше ми будемо намагатися мінімізувати
- 1:35:25значення стану враховуючи всі можливі
- 1:35:27дії тому мені потрібне початкове
- 1:35:29значення для V що дорівнює
- 1:35:31нескінченності бо я знаю що завжди можна
- 1:35:33отримати щось менше за нескінченність
- 1:35:36установивши в що дорівнює нескінченності
- 1:35:40я гарантував що перша дія яку я знайду
- 1:35:42буде меншою за це значення в потім я
- 1:35:46роблю те саме переглядаю всі мої можливі
- 1:35:48дії і для кожного результату який ми
- 1:35:50можемо отримати коли гравець maxс
- 1:35:52приймає рішення візьмемо мінімум цього
- 1:35:55та поточного значення V після того як
- 1:35:58усе зроблено я отримую найменше можливе
- 1:36:01значення V яке потім повертає
- 1:36:03користувачеві по суті це псевдокод для
- 1:36:06мінімаксного алгоритму Ми беремо гру та
- 1:36:09визначаємо який найкращий хід зробити
- 1:36:12рекурсивно використовуючи функції Max
- 1:36:14value Та minan value де Max value
- 1:36:17викликає minanvue minan value викликає
- 1:36:20Max value туди і назад доки ми не
- 1:36:22досягнемо завершального стану в якому
- 1:36:25наш алгоритм може повернути тиліity
- 1:36:27цього конкретного стану можете уявити що
- 1:36:30цей процес буде тривалим особливо коли
- 1:36:33ігри будуть складнішими та довшими коли
- 1:36:36Ми додамо більше ходів і більше можливих
- 1:36:38варіантів виникає питання Яку
- 1:36:40оптимізацію ми можемо виконати Як це
- 1:36:43можна зробити краще щоби використовувати
- 1:36:45менше місця або витрачати менше часу на
- 1:36:48вирішення завдання розглянемо кілька
- 1:36:50можливих оп ці але для початку
- 1:36:52поговоримо про цей приклад це знову
- 1:36:54стрілки спрямовані вгору і вниз уявімо
- 1:36:57що я зараз гравець Макс ця Зелена
- 1:37:00Стрілка я намагаюся зробити рахунок
- 1:37:02якомога вищим це легка гра де всього два
- 1:37:05виходи я роблю хід один із цих трьох
- 1:37:08Потім мій суперник робить хід один із
- 1:37:10цих трьох Що залежить від мого ходу у
- 1:37:13результаті Ми отримаємо значення
- 1:37:15подивимося на порядок в якому я виконую
- 1:37:18обчислення і з'ясуємо Чи можу я якось
- 1:37:21омізувати процес обчислення розглядатиму
- 1:37:23ці стани по- оддному Я починаю тут зліва
- 1:37:28я буду думати що гравець міні мій
- 1:37:30суперник спробує зробити тут гравець
- 1:37:32міні розгляне всі три можливі дії та
- 1:37:35оцінить їх значення тому що це
- 1:37:37завершальні стани які означають кінець
- 1:37:40гри він побачить цей вузол має значення
- 1:37:42чотири цей ві цей пть і гравець міні
- 1:37:45скаже між цими трьома варіантами 4 ві і
- 1:37:495 я візьму найменший чоти тепер цей стан
- 1:37:53має
- 1:37:53значеннячотири тоді я як гравець Макс
- 1:37:57кажу якщо я візьму цю дію вона матиме
- 1:38:00значення чотири це найкраще що я можу
- 1:38:03зробити бо гравець міні намагається
- 1:38:05мінімізувати рахунок А якщо я виберу цей
- 1:38:08варіант дослідимо що зробить гравець
- 1:38:11міні якщо я виберу цю дію гравець міні
- 1:38:13скаже які є три варіанти гравець міні
- 1:38:17має варіанти дет і с три найменше серед
- 1:38:20них тобто цей стан має значення три я як
- 1:38:24гравець Макс дослідив два із трьох своїх
- 1:38:27варіантів і знаю що один із них
- 1:38:28гарантуватиме мені рахунокчотири а інший
- 1:38:31гарантуватиме рахунок
- 1:38:34три Тепер я розглядаю свій третій
- 1:38:37варіант що тут
- 1:38:39відбувається така сама логіка гравець
- 1:38:41міні розглядатиме і три стани 2 4 іш
- 1:38:45найменший з них- два тому він вибирає
- 1:38:48його тепер я як гравець Макс обчи числив
- 1:38:51усю інформацію дивлячись на два шари
- 1:38:53вглиб вибираючи між чотиритри і два Я
- 1:38:57вибрав би чотири тому що в цій ситуації
- 1:39:00якщо суперник гратиме оптимально він
- 1:39:02спробує привести мене до четвірки але це
- 1:39:05найкраще що я можу зробити я не можу
- 1:39:08гарантувати Вищий бал бо якщо я виберу
- 1:39:11будь-який із цих двох варіантів то можу
- 1:39:13отримати три або два але тут є дев'ять
- 1:39:16це найвищий рахунок зпоміж усіх в мене
- 1:39:19може виникнути Спокуса вибрати трійку
- 1:39:21можливо варто вибрати її бо тут я міг би
- 1:39:24отримати дев'ять але якщо гравець міні
- 1:39:26грає розумно і вибирає найкращі ходи
- 1:39:29зпоміж усіх можливих я можу лишитися з
- 1:39:31трійкою замість того щоби граючи
- 1:39:33оптимально гарантувати собі
- 1:39:35четвірку це не впливає на логіку якою я
- 1:39:38б користувався як гравець міні maкс
- 1:39:40намагаючись максимізувати свій рахунок
- 1:39:42із цього вузла Та мені знадобилося
- 1:39:45чимало обчислень щоби це зрозуміти
- 1:39:47довелося розглянути всі вузли щоби
- 1:39:50зробити такий висновк і це у простій грі
- 1:39:52де в мене і суперника є по три варіанти
- 1:39:55і гра закінчується Отже я хотів би
- 1:39:57придумати якусь оптимізацію можливо мені
- 1:40:00не потрібно робити Всі ці розрахунки щоб
- 1:40:02дійти висновку що дія ліворуч - це
- 1:40:05найкращий для мене
- 1:40:07варіант спробуємо ще раз і спробуємо
- 1:40:10діяти трохи
- 1:40:11розумніше починаю так само не знаю що
- 1:40:15робити спочатку тому просто розглядаю
- 1:40:18один із варіантів і думаю що може
- 1:40:21зробити гравець міні Він має три
- 1:40:23варіанти 48 і5 зпоміж них міні вибирає
- 1:40:27найкращі для себечотири бо хоче
- 1:40:30мінімізувати
- 1:40:31рахунок Тепер я гравець Макс розгляну
- 1:40:34свій другий варіант зробивши хід тут і
- 1:40:37подумавши що суперник зробив би у
- 1:40:40відповідь що робитиме гравець міні Він
- 1:40:43збирається з цього стану розглянути свої
- 1:40:45варіанти - це варіант 3 це варіант і
- 1:40:50якщо я в цьому початковому стані виконую
- 1:40:52всі ці обчислення То коли бачу три це
- 1:40:55має негайно стати для мене червоним
- 1:40:57прапорцем Бо коли я бачу три у цьому
- 1:41:00стані Я знаю що значення цього стану
- 1:41:02становитиме щонайбільше
- 1:41:05три це буде три або менше за три Хоча я
- 1:41:08ще навіть не дивився на останню дію чи
- 1:41:11подальші дії якщо тут можна було б їх
- 1:41:14виконати звідки я це знаю я знаю що
- 1:41:17гравець міні намагається мінімізувати
- 1:41:19мій рахунок якщо він бачить три тут тоді
- 1:41:22тут може бути не трійка тільки якщо ця
- 1:41:25дія яку я ще не перевірив менша за
- 1:41:27трійку а це означає що це значення не
- 1:41:30може бути більшим за трійку бо гравець
- 1:41:32міні уже може гарантувати три і він
- 1:41:35намагається мінімізувати
- 1:41:37рахунок про що це мені говорить Це
- 1:41:40говорить мені якщо я виберу цю дію мій
- 1:41:43рахунок Буде три або навіть менше за три
- 1:41:45якщо мені не пощастить але я вже знаю що
- 1:41:49ця дія гарантує чотири і оскільки я знаю
- 1:41:52що ця дія гарантує чотири А ця дія
- 1:41:55означає що я не зможу заробити більше
- 1:41:58ніж три то якщо я намагаюся
- 1:42:00максимізувати рахунок нема потреби
- 1:42:02розглядати цей трикутник тут не може
- 1:42:04бути жодного значення жодного числа яке
- 1:42:07змінило би мій вибір між цими двома
- 1:42:09варіантами Я завжди оберу цей шлях який
- 1:42:12приносить мені чотири на відміну від
- 1:42:14цього шляху де найкращою для мене буде
- 1:42:16трійка якщо суперник грає оптимально і
- 1:42:19це також буде справедливо для всіх
- 1:42:21майбутніх станів що гравець міні може
- 1:42:23зробити тут якщо я бачу що цей стан
- 1:42:25дорівнює двійці то я знаю що цей стан
- 1:42:27дорівнює що найбільше двом бо єдиний
- 1:42:30спосіб завдяки якому це значення може
- 1:42:32бути чимось іншим ніж два це якщо один
- 1:42:35із цих двох станів що залишились менше
- 1:42:37за два то гравець міні вибере це
- 1:42:39натомість Отже навіть не переглядаючи
- 1:42:42стани що залишились я як гравець Макс
- 1:42:45може знати що шлях ліворуч буде кращим
- 1:42:47ніж будь-який шлях праворуч тому що цей
- 1:42:50не може бути кращим за три А цей не може
- 1:42:53бути кращим за два Отже чотири в цьому
- 1:42:57випадку найкращий варіант тепер я можу
- 1:43:00сказати що цей стан має значення чотири
- 1:43:03щоби виконати такий тип розрахунків я
- 1:43:05звертав увагу на математику весь час
- 1:43:08відстежував що я можу зробити найкраще
- 1:43:11що я можу зробити
- 1:43:13найгірше якщо я вже знаю що можу
- 1:43:16отримати чотири а в цьому стані я можу
- 1:43:18отримати максимум три мені не причин
- 1:43:21його
- 1:43:22розглядати я можу ефективно обрізати цю
- 1:43:25гілку і все що під нею саме з цієї
- 1:43:28причини оптимізація мінімаксного
- 1:43:31алгоритму називається Альфа Бета
- 1:43:34відсіченням Альфа та бета означають два
- 1:43:36значення які вам доведеться відстежувати
- 1:43:38найкраще і найгірше що ви можете зробити
- 1:43:42відсічення полягає в тому що якщо у мене
- 1:43:44є глибоке дерево пошуку я міг би
- 1:43:46здійснити пошук у ньому ефективніше якщо
- 1:43:49мені не потрібно перебирати все якщо я
- 1:43:52можу видалити деякі вузли щоб
- 1:43:54оптимізувати процес перегляду всього
- 1:43:56простору пошуку альфабета відсічення
- 1:43:58може заощадити нам багато часу під час
- 1:44:01пошуку зробивши його ефективнішим але
- 1:44:04навіть так не все чудово оскільки ігри
- 1:44:07стають складнішими Хрестики нулики - це
- 1:44:09відносно проста гра ми можемо розумно
- 1:44:12поставити запитання скільки всього існує
- 1:44:15можливих ігор у Хрестики нулики
- 1:44:18подумайте про це спробуйте оцінити скіль
- 1:44:20скільки ходів є в будь-якій конкретній
- 1:44:22точці скільки ходів може тривати гра
- 1:44:25виявляється існує приблизно 255 000
- 1:44:28можливих ігор у Хрестики
- 1:44:30нулики порівняйте Це зі складнішою грою
- 1:44:34наприклад шахами більше фігур більше
- 1:44:37ходів довше грати скільки всього може
- 1:44:40бути можливих шахових партій Виявляється
- 1:44:43що Після чотирьох ходів білими і
- 1:44:46чотирьох ходів чорними існує
- 1:44:48288 млрдв можливих шахових
- 1:44:52партій лише після чотирьох ходів кожного
- 1:44:55гравця А якщо ви візьмете шахові партії
- 1:44:58загалом і те скільки можливих шахових
- 1:45:00партій може існувати Ви отримаєте понад
- 1:45:0310 у степені 29 000 набагато більше
- 1:45:06шахових партій ніж Можна було б
- 1:45:08розглянути це велике завдання для
- 1:45:11мінімаксного алгоритму тому що він
- 1:45:13починає з початкового стану розглядає
- 1:45:16всі можливі дії та всі можливі дії після
- 1:45:18них Доки не дійде до кінця
- 1:45:22гри це буде проблемою якщо комп'ютеру
- 1:45:25доведеться переглядати стільки станів А
- 1:45:27це набагато більше ніж будь-який
- 1:45:29комп'ютер міг би зробити за розумний
- 1:45:31проміжок часу як же вирішити це завдання
- 1:45:35замість того щоб переглядати всі стани
- 1:45:37що абсолютно неможливо для комп'ютера
- 1:45:39потрібен кращий підхід цей кращий підхід
- 1:45:41набуває форми мінімаксного алгоритму з
- 1:45:44обмеженням глибини зазвичай мінімаксний
- 1:45:46алгоритм не обмежений за глибиною Ми
- 1:45:49продовжуємо шар за шаром хід за ходом
- 1:45:52Доки не дійдемо до кінця гри мінімаксний
- 1:45:55алгоритм з обмеженням глибини після
- 1:45:57певної кількості ходів може 10ти чи 12ти
- 1:46:00зупиниться і не розглядатиме додаткові
- 1:46:03ходи тому що буде обчислювально важко
- 1:46:06розглянути всі можливі
- 1:46:11варіанти але що робити після 10 12 ходів
- 1:46:15у глибину якщо гра ще не закінчиться
- 1:46:18мінімаксу потрібен спосіб призначення
- 1:46:20рахунок цьому ігровому полю або стану
- 1:46:23гри щоби визначити його поточне значення
- 1:46:26це легко зробити якщо гра
- 1:46:28закінчилася але не так легко якщо гра ще
- 1:46:31триває для цього потрібно додати одну
- 1:46:34додаткову особливість до мінімаксного
- 1:46:36алгоритму з обмеженням глибини яка
- 1:46:38називається оцінювальною функцією
- 1:46:41це функція яка оцінює очікувану
- 1:46:43корисність гри із заданого стану у такій
- 1:46:47грі як шахи якщо ви уявите що значення
- 1:46:49гри один означає перемогу білих міну1
- 1:46:52перемогу чорних нуль нічию тоді ви
- 1:46:55можете уявити що рахунок
- 1:46:570,8 означає що виграють радше білі хоча
- 1:47:00звісно це
- 1:47:02негарантовано оцінювальна функція
- 1:47:04оцінить наскільки хорошим є стан гри
- 1:47:07якість оцінювальної функції визначатиме
- 1:47:09наскільки якісно працює штучний інтелект
- 1:47:12що краще штучний інтелект оцінює
- 1:47:14наскільки хороший чи поганий певний стан
- 1:47:16гри то краще він зможе зіграти якщо
- 1:47:19оцінювальна функці не така хороша як
- 1:47:21оцінка очікуваної корисності тоді все
- 1:47:24буде набагато складніше ви можете уявити
- 1:47:27спробу придумати ці оцінювальні функції
- 1:47:29у шахах Ви можете написати оцінювальну
- 1:47:32функцію на основі того скільки фігур є у
- 1:47:34вас скільки у супротивника оскільки
- 1:47:37кожна з них має значення у оцінювальній
- 1:47:40функції ймовірно все це має бути
- 1:47:42складніше ніж зараз щоб розглянути інші
- 1:47:45можливі ситуації які також можуть
- 1:47:47виникнути у мінімаксному алгоритмі є
- 1:47:49багато інших варіантів які додають
- 1:47:52особливості щоб допомогти йому працювати
- 1:47:54краще в таких масштабах і складних з
- 1:47:57точки зору обчислень ситуаціях де ми не
- 1:47:59можемо дослідити всі можливі ходи Тому
- 1:48:01нам потрібно з'ясувати як
- 1:48:03використовувати оцінювальні функції та
- 1:48:05інші техніки щоб мати можливість краще
- 1:48:07грати в ці ігри це був погляд на
- 1:48:10різновид змагального пошуку завдання
- 1:48:12пошуку коли ми маємо ситуації де я
- 1:48:14намагаюся грати проти суперника ці
- 1:48:17завдання пошуку виявляються у штучному
- 1:48:19інтелекті сьогодні Ми багато говорили
- 1:48:21про класичні завдання пошуку як от пошук
- 1:48:24маршруту але щоразу коли штучний
- 1:48:27інтелект намагається прийняти рішення на
- 1:48:29зразок того що мені робити зараз щоби
- 1:48:31зробити щось раціональне або розумне або
- 1:48:34спробувати зіграти в гру і з'ясувати
- 1:48:36який хід зробити такі алгоритми можуть
- 1:48:39стати у пригоді для хрестиків-нуликів
- 1:48:42рішення досить просте бо це маленька гра
- 1:48:44xkcd створив відомий веб-комікс у якому
- 1:48:48він розкаже який оптимальний хід зроби
- 1:48:50бити незалежно від того як походить
- 1:48:52суперник такий тип речей неможливий для
- 1:48:55більшої гри як от шашки чи шахи шахи
- 1:48:58абсолютно не піддаються обчисленню і
- 1:49:00більшість комп'ютерів не можуть
- 1:49:02дослідити всі можливі стани Тому нам
- 1:49:04потрібно щоби штучний інтелект був
- 1:49:06набагато розумнішим у вирішенні цих
- 1:49:09завдань і в тому як він шукатиме рішення
- 1:49:12Опинившись у цьому середовище Отже Це
- 1:49:15пошук і штучний інтелект Наступного разу
- 1:49:18розглянемо знання і подумаємо як штучний
- 1:49:21інтелект здатний знати інформацію думати
- 1:49:24про неї та робити висновки і все це з
- 1:49:27огляду на штучний інтелект і принципи що
- 1:49:29лежать в його основі до
- 1:49:36зустрічі
About this transcript
This page contains the full transcript of 1354_lecture0_ver2 HarvardUniversity CS50_AI101 20 by Prometheus, generated from the public captions YouTube serves with the video. The transcript has 15,006 words across 2,482 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.