Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
до лабораторної роботи №6
з дисципліни: «Теорія інтелектуальних систем»
на тему: «Дослідження та моделювання колективної поведінки інтелектуальних агентів в задачах навчання з підкріпленням»
Прийняв: ст. вик.
Бочькарьов О. Ю.
Мета: Дослідити модель взаємодії колективу агентів з середовищем та засвоїти принципи ізольованого й інтерактивного колективного навчання з підкріпленням.
Порядок виконання роботи
1. Дослідити роботу програми обчислювального експерименту по моделюванню взаємодії колективу агентів з стаціонарним випадковим середовищем.
2. Модифікувати вхідні дані програми обчислювального експерименту згідно заданого варіанту.
3. Провести обчислювальний експеримент:
1) по дослідженню взаємодії колективу "випадкових" агентів з СВС;
2) по дослідженню взаємодії колективу "ідеальних" агентів з СВС.
3) по дослідженню взаємодії колективу RL-агентів заданого типу з СВС, при умові що вони виконують одночасне ізольоване колективне навчання з підкріпленням (Concurrent Isolated Reinforcement Learning).
4) по дослідженню взаємодії колективу RL-агентів заданого типу з СВС, при умові що вони виконують інтерактивне колективне навчання з підкріпленням (Interactive Reinforcement Learning).
4. Для всіх чотирьох випадків отримати усереднену залежність 1) sumRmas(t) - сумарного виграшу колективу агентів від часу; 2) avrRmas(t) - середнього виграшу колективу агентів від часу. Порівняти отримані залежності та зробити висновки.
Варіант 8
Номер варіанту
Метод навчання з підкріпленням
Кількість доступних окремому агенту дій, k
Кількість агентів в колективі, N
8
softmax
3
10
Текст програми обчислювального експерименту
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;
}
void initMAS (int _mas)
{
int i;
switch (_mas)
{
case 0: for(i=0;i<nK;i++){initAgent(agt,i); sumR[i]=0.0f; avrR[i]=0.0f;} break;
case 1: for(i=0;i<nK;i++){initAgent(agt,i); sumR[i]=0.0f; avrR[i]=0.0f;} break;
case 2: for(i=0;i<nK;i++){initAgent(agt,i); sumR[i]=0.0f; avrR[i]=0.0f;} break;
case 3: for(i=0;i<nK;i++){initAgent(agt-10,i); sumR[i]=0.0f; avrR[i]=0.0f;} break;
default: printf("lab4 error: wrong mas code specified\n");
}
}
// ----------------------------------------------------------------------------
// simulation
void simulation (int _i)
{
float tmpS = 0.0f;
float tmpA = 0.0f;
initMAS(mas);
sumRmas = 0.0f;
avrRmas = 0.0f;
for (t=0; t < T; t++) {
// get action of each agent
for (k=0; k < nK; k++) action[k] = agent(agt,k);
// get response of environment for each agent
for (k=0; k < nK; k++) response[k] = environment(env,k);
// calculate cumulative results for each agent
tmpS = 0.0f;
tmpA = 0.0f;
for (k=0; k < nK; k++)
{
sumR[k] = sumR[k] + (float)response[k]; tmpS = tmpS + sumR[k];
avrR[k] = sumR[k] / ((float)t + 1); tmpA = tmpA + avrR[k];
}
// calculate cumulative results for malti-agent system
sumRmas = tmpS / (float)nK;
avrRmas = tmpA / (float)nK;
// save results
_sumR[t][_i] = sumRmas;
_avrR[t][_i] = avrRmas;
}
}
Графічні залежності отриманих результатів
////////
Розрахунок ймовірності:
p(a0) = 0.200000 p(a1) = 0.800000 p(a2) = 0.860317
Висновок: На лабораторній роботі я дослідив модель взаємодії колективу агентів з середовищем та засвоїти принципи ізольованого й інтерактивного колективного навчання з підкріпленням.