Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
до лабораторної роботи №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
Висновок: на цій лабораторній роботі було досліджено модель взаємодії колективу агентів з середовищем та освоєно принципи ізольованого й інтерактивного колективного навчання з підкріпленням.