Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
до лабораторної роботи №6
з дисципліни: «Теорія інтелектуальних систем»
на тему: «Дослідження та моделювання колективної поведінки інтелектуальних агентів в задачах навчання з підкріпленням»
Львів 2017
Мета: Дослідити модель взаємодії колективу агентів з середовищем та засвоїти принципи ізольованого й інтерактивного колективного навчання з підкріпленням.
Порядок виконання роботи
1. Дослідити роботу програми обчислювального експерименту по моделюванню взаємодії колективу агентів з стаціонарним випадковим середовищем.
2. Модифікувати вхідні дані програми обчислювального експерименту згідно заданого варіанту.
3. Провести обчислювальний експеримент:
1) по дослідженню взаємодії колективу "випадкових" агентів з СВС;
2) по дослідженню взаємодії колективу "ідеальних" агентів з СВС.
3) по дослідженню взаємодії колективу RL-агентів заданого типу з СВС, при умові що вони виконують одночасне ізольоване колективне навчання з підкріпленням (Concurrent Isolated Reinforcement Learning).
4) по дослідженню взаємодії колективу RL-агентів заданого типу з СВС, при умові що вони виконують інтерактивне колективне навчання з підкріпленням (Interactive Reinforcement Learning).
4. Для всіх чотирьох випадків отримати усереднену залежність 1) sumRmas(t) - сумарного виграшу колективу агентів від часу; 2) avrRmas(t) - середнього виграшу колективу агентів від часу. Порівняти отримані залежності та зробити висновки.
Варіант
greedy -> жадібний метод навчання з підкріпленням
Номер варіанту
Метод навчання з підкріпленням
Кількість доступних окремому агенту дій, k
Кількість агентів в колективі, N
6
greedy
4
10
Текст програми обчислювального експерименту
void initAgent(int _ag, int id)
{
int i;
switch (_ag)
{
case 0: break;
case 1: break;
case 2: for (i = 0; i<nA; i++){ ka[id][i] = 0; ra[id][i] = 0; Q[id][i] = 1.0f; }; action[id] = uRand(nA); break;
case 3: for (i = 0; i<nA; i++){ ka[id][i] = 0; ra[id][i] = 0; Q[id][i] = 1.0f; }; action[id] = uRand(nA); break;
case 4: for (i = 0; i<nA; i++){ ka[id][i] = 0; ra[id][i] = 0; Q[id][i] = 0.0f; p[id][i] = 0.0f; }; action[id] = uRand(nA); break;
default: printf("lab4 error: wrong agent code specified\n");
}
}
// ----------------------------------------------------------------------------
// random agent
int randomAgent(void)
{
return uRand(nA);
}
// ----------------------------------------------------------------------------
// perfect agent
int perfectAgent(void)
{
if (env) paction = argmax(cePa[ceState], nA);
else paction = argmax(sePa, nA);
return paction;
}
// ----------------------------------------------------------------------------
// greedy RL
int greedy(int id)
{
int _action = action[id];
// modify estimated action value
ra[id][action[id]] += response[id];
ka[id][action[id]]++;
Q[id][action[id]] = (float)ra[id][action[id]] / (float)ka[id][action[id]];
// select next action
_action = argmax(Q[id], nA);
return _action;
}
// ----------------------------------------------------------------------------
// epsilon greedy RL
int epsilonGreedy(int id)
{
int _action = action[id];
// modify estimated action value
ra[id][action[id]] += response[id];
ka[id][action[id]]++;
Q[id][action[id]] = (float)ra[id][action[id]] / (float)ka[id][action[id]];
// select next action
float rnum = (float)rand() / (float)RAND_MAX;
if (rnum < e) _action = uRand(nA);
else _action = argmax(Q[id], nA);
return _action;
}
// ----------------------------------------------------------------------------
// softmax action selection
int softmax(int id)
{
int i;
int _action = action[id];
float tmp[NACTIONS], pSum = 0.0f;
// modify estimated action value
ra[id][action[id]] += response[id];
ka[id][action[id]]++;
Q[id][action[id]] = (float)ra[id][action[id]] / (float)ka[id][action[id]];
// modify values of selection probabilities
for (i = 0; i < nA; i++) { tmp[i] = expf(Q[id][i] / tau); pSum += tmp[i]; }
for (i = 0; i < nA; i++) { p[id][i] = tmp[i] / pSum; }
// select next action
_action = dRand(p[id], nA);
return _action;
}
// ----------------------------------------------------------------------------
// interactive greedy RL
int greedyINT(int id)
{
int _action = action[id];
// modify estimated action value
ra[id][action[id]] += response[id];
ka[id][action[id]]++;
Q[id][action[id]] = (float)ra[id][action[id]] / (float)ka[id][action[id]];
// get action values from neighbours -> average out
int left = (id == 0) ? (nK - 1) : (id - 1);
int right = (id == (nK - 1)) ? 0 : (id + 1);
for (int i = 0; i<nA; i++) Q[id][i] = (Q[left][i] + Q[id][i] + Q[right][i]) / 3.0f;
// select next action
_action = argmax(Q[id], nA);
return _action;
}
// ----------------------------------------------------------------------------
// interactive epsilon greedy RL
int epsilonGreedyINT(int id)
{
int _action = action[id];
// modify estimated action value
ra[id][action[id]] += response[id];
ka[id][action[id]]++;
Q[id][action[id]] = (float)ra[id][action[id]] / (float)ka[id][action[id]];
// get action values from neighbours -> average out
int left = (id == 0) ? (nK - 1) : (id - 1);
int right = (id == (nK - 1)) ? 0 : (id + 1);
for (int i = 0; i<nA; i++) Q[id][i] = (Q[left][i] + Q[id][i] + Q[right][i]) / 3.0f;
// select next action
float rnum = (float)rand() / (float)RAND_MAX;
if (rnum < e) _action = uRand(nA);
else _action = argmax(Q[id], nA);
return _action;
}
// ----------------------------------------------------------------------------
// interactive softmax action selection
int softmaxINT(int id)
{
int i;
int _action = action[id];
float tmp[NACTIONS], pSum = 0.0f;
// modify estimated action value
ra[id][action[id]] += response[id];
ka[id][action[id]]++;
Q[id][action[id]] = (float)ra[id][action[id]] / (float)ka[id][action[id]];
// get action values from neighbours -> average out
int left = (id == 0) ? (nK - 1) : (id - 1);
int right = (id == (nK - 1)) ? 0 : (id + 1);
for (int i = 0; i<nA; i++) Q[id][i] = (Q[left][i] + Q[id][i] + Q[right][i]) / 3.0f;
// modify values of selection probabilities
for (i = 0; i < nA; i++) { tmp[i] = expf(Q[id][i] / tau); pSum += tmp[i]; }
for (i = 0; i < nA; i++) { p[id][i] = tmp[i] / pSum; }
// select next action
_action = dRand(p[id], nA);
return _action;
}
Графічні залежності отриманих результатів
Сумарний «виграш»
/
/
Середній «виграш»
/
/
Результати обчислення :
p(a0) = 0.200000
p(a1) = 0.800000
p(a2) = 0.416242
p(a3) = 0.269478
Висновок: на цій лабораторній роботі було досліджено модель взаємодії колективу агентів з середовищем та освоєно принципи ізольованого й інтерактивного колективного навчання з підкріпленням.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!