Alice … went on “Would you please tell me, please, which way I ought to go from here?” “That depends a good deal on where you want to get to,” said the Cat. “I don’t much care where -” said Alice. “Then it doesn’t matter which way you go,” said the Cat. Lewis Carroll (1832-1898) Alice’s Adventures in Wonderland, 1865
Отже агент приймає рішення на основі трьох елементів:
В результаті була запропонована ідея відношення переважності. Відношення переважності задає відношення порядку на просторі станів. Ще фон Нейман показав, що якщо виконуються 6 аксіом, то можна ввести функцію корисності, яка описує переваги агента. Коли ми вводили поняття раціонального агента, то було сказано, що він намагається діяти найкращим чином для досягнення мети. Це означає, що агент має класифікувати власні дії на ті, що наближують до мети (більш бажані) і ті, що відділяють від мети. Поняття мети формалізується за допомогою функції корисності. Ця функція є відображенням з простору станів гри (у які може потрапити агент) у числову вісь
\[u_{i}(\cdot): S \rightarrow R \]
Визначення функції корисності для реальних задач може бути складним і вимагає глибокого розуміння проблемної області. Задання функції корисності задає на просторі станів упорядкування, яке має наступні властивості:
Функції корисності можна використовувати для визначення поведінки практично будь-яких агентів. Також вони корисні для врахування різних додаткових обставин, які агент має брати до уваги при планування своїх дій. Наприклад, можна розглянути ситуацію, коли агент отримує певну суму за доставку вантажу але також має враховувати витрати на дорогу (час, ресурси) та можливу втрату через пропуск більш вигідної пропозиції. Якщо перевести всі ці фактори у функцію корисності, ми зможемо дослідити які дії є оптимальними.
Зауважимо, що корисність представляє переважність агента відносно того або іншого стану, що, очевидно, не завжди дорівнює грошам. Дослідження показали, що відношення корисності і грошей можна оцінити як логарифм. Наприклад, розглянемо двох гравців А та Б. У А є 100 мільйонів у банку, у Б - 0. Кожному надається можливість виграти мільйон доларів. Очевидно, що цінність (корисність) виграшу неоднакова для А і Б. Для Б вона набагато вища. Експерименти демонструють, що для невеликих сум корисність лінійна, зі збільшенням вона стає логарифмічна в тому сенсі, що корисність десятого мільйона доларів меньше ніж в десять раз більша за корисність першого. Деякі експерименти показують, що власне коли справа у грошах люди не мислять раціонально. Проведемо експеримент: Який варіант ви оберете
(а) Отримати 10000 грн і 50/50 шанс ще 10000 грн
(б) Отримати 20000 грн і потім я підкину монетку і якщо випаде герб то заберу у вас 10000 грн.
Після визначення функцій корисності потрібно визначити як агенти будуть їх використовувати. Як правило, агенти отримують інформацію про поточний стан та мають певні можливості змінювати його, вибираючи власні дії. Іноді, звичайно ці дії не досконалі - сенсори можуть помилятися, а механізми не завжди працювати яе очікується. Введемо до розгляду функцію переходу \(T(s,a,s_{0})\) яка дорівнює ймовірності переходу зі стану \(s\) в стан \(s_{0}\) за умови виконання дії \(a\). Зрозуміло, що сума \(T(s,a,s_{0})\) за всіма можливими \(s_{0}\), \(a\) має дорівнювати одиниці. Використовуючи функцію корисності агенти можуть обчислити очікувану корисність від здійснення дії \(a\) в стані \(s\):
\[E[u_{i},s,a]= \sum_{s' \in S} T(s,a,s')u_{i}(s') \] де \(S\) - множина всіх можливих станів.
Агент може використовувати очікувану корисність для оцінки вартості інформації, що надійшла від іншого агента або сенсора. Вартість інформації визначається формулою: \[ E[u_{i}, t, \pi_{i}(t)] − E[u_{i}, t, \pi_{i}(s)]\]
як різниця між очікуваною корисністю за умови використання найкращої стратегії \(\pi_{i}(t)\) у стані \(t\) та використання найкращої стратегії \(\pi_{i}(s)\) для стану \(s\) за умови перебуванні у стані \(t\).
Policy - політика, аналог стратегії в теорії корисності. Політика визначає що має робити агент для будь-якої ситуації. Агент намагається знайти оптимальну політику - ту, що максимізує його очікувану корисність. Дерева рішень (або мережі рішень) описують поведінку агента за умов скінченної та відомої кількості рішень, виграшів та ймовірностей. Як правило, розв’язуються за допомогою зворотної індукції.
Якщо кількість кроків до мети невідома або може бути нескінченною, для моделювання використовують Марковські процеси.
Поки що ми розглядали ситуацію певного фіксованого стану світу. В реальних задачах агенти існують у середовищі, стан якого змінюється внаслідок дій агента або зовнішних подій. Тобто агент сприймає стан світу, виконує дію, сприймає новий змінений стан. Спрощуючи, можна вважати, що стан світу в момент часу \(t_{i}\) залежить лише від дії агента у попередній момент часу \(t_{i-1}\) і стану \(s(t_{i-1})\). Формально ця ідея виражається Марковським процесом прийняття рішень (МППР).
Визначення. (Марковського процесу прийняття рішень). МППР визначається початковим станом \(s_{1}\in S\), перехідною функцією \(T(s, a, s_{0})\) і функцією виграшу \(r:S\rightarrow R\).
Є два головних типи:
Перехідна функція \(T(s, a, s_{0})\) дорівнює ймовірності переходу агента зі стану \(s\) в стан \(s_{0}\) при здійсненні дії \(a\). Для чисто детерміністичного світу ця функція буде для кожного фіксованого \(s\) приймати значення \(1\) для одного \(s_{0}\) і \(0\) для всіх інших пар.
Поведінка агента визначається стратегією, яка є відображенням множини станів у множину дій. Будемо позначати її \(\pi\). Мета агента - знайти оптимальну стратегію, тобто ту, що максимізує очікувану корисність (бо егоїстичний агент піклується тільки про свою власну корисність). Отже, оптимальна стратегія агента дорівнює: \[\pi_{i}^{*}(s) = \underset{a\in A}{argmax}\;E[u_{i},s,a]\]
Але для виконання обчислення очікуваного значення потрібно вирішити проблему врахування майбутніх виграшів. Що краще - здійснити 100 дій з 0 виграшем а потім отримати 100, чи виконати 100 дій з виграшем 1 за кожну. Встановлення значень виграшів диктується задачею і може вплинути на роботу алгоритма.
Існує три загальноприйнятих способа інтегрувати поточні виграші у функцію корисності \(V(\cdot)\):
При цьому ми володіємо інформацією тільки про \(s_{1}\). Всі інші значення залежать від перехідної функції \(T(\cdot)\), наприклад ми знаємо ймовірності переходу зі стану \(s_{1}\) в інші стани для кожної дії \(a\). Вважаючи, що агент максимізує корисність, його стратегія має вибиратись з умови \[\pi^{*}(s) = \underset{a\in A}{argmax}\;T(s,a,s')u(s')\]
Таким чином, агент обчислює виграш від здійснення тієї чи іншою дії використовуючи функцію корисності, корисність для кожного стану визначається рівнянням \[u(s) = r(s) + \gamma max_{a} T(s,a,s')u(s')\]. Це правда означає, що значення функції в одному стані залежать від значень в інших станах, тому для її обчислення потрібний ітераційний розподілений алгоритм.
Отже світ 5-3, є дві клітинки з винагородою. При цьому можливими рухами є:
globals [current-action r current-utility]
to setup
clear-all
reset-ticks
ask patch -1 0 [set pcolor white
set plabel "wall "
set plabel-color black]
ask patch 1 1 [set pcolor green
set plabel "+ 1 "
set plabel-color black]
ask patch 1 0 [set pcolor red
set plabel " - 1 "
set plabel-color black]
create-turtles 1 [
set color blue
set size 0.7
set shape "person"
setxy -2 -1]
end
to go
tick
perform-action
calculate-reward
end
to to-left
set current-action "left"
go
end
to to-right
set current-action "right"
go
end
to to-up
set current-action "up"
go
end
to perform-action
ask turtles [
if ((current-action = "left") and (check-constraints (pxcor - 1) pycor) = true)
[
setxy pxcor - 1 pycor
]
if ((current-action = "right") and (check-constraints (pxcor + 1) pycor))
[
setxy pxcor + 1 pycor
]
if ((current-action = "up") and (check-constraints pxcor (pycor + 1)))
[
setxy pxcor pycor + 1
]
]
end
to calculate-reward
ask turtles [
let my-patch patch-here
if (([pcolor] of my-patch) = green) [
set current-utility current-utility + green-reward
]
if (([pcolor] of my-patch) = red) [
set current-utility current-utility + red-reward
]
if (([pcolor] of my-patch) = black) [
set current-utility current-utility + black-reward
]
]
end
to-report check-constraints [x y]
let f false
if (x <= max-pxcor) and (x >= min-pxcor) and (y <= max-pycor) and (y >= min-pycor)
[
set f true
]
let p patch x y
if (p != nobody) [
if ([pcolor] of patch x y = white)
[
set f false
]
]
report f
end
Як додати ймовірності? Як вивести поточні виграші? Як вивести функцію корисності?