Лабараторна робота №2

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2018
Тип роботи:
Лабораторна робота
Предмет:
теорія інтелектуальних систем

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Кафедра ЕОМ Лабараторна робота №2 з дисципліни " Теорія інтелектуальних систем” на тему: Моделювання простих форм цілеспрямованої поведінки. Дослідження роботи цілеспрямованих автоматів (Learning Automata) у стаціонарному випадковому середовищі. Львів – 2017 НАЗВА: Моделювання простих форм цілеспрямованої поведінки. Дослідження роботи цілеспрямованих автоматів (Learning Automata) у стаціонарному випадковому середовищі. МЕТА: Змоделювати та дослідити роботу цілеспрямованого автомату у стаціонарному випадковому середовищі. Хід роботи Завдання: N Модель оптимальної поведінки Конструкція ЦА Кількість доступних агенту дій  1 W1 AL 2   w1 – сумарний виграш AL -> Автомат з лінійною тактикою (автомат М.Л.Цетліна) Пропишемо кількість доступних агенту дій #define NACTIONS 2 Пропишемо шляхи до файлів результатів та налаштувань, які повинні згенеруватись: Пройдемося в циклі і запишемо в файлі сумарний викраш для ідеального, випадкового агенту та автомата (де T – кількість ітерацій між агентом та середовищем) Результат роботи програми: / Рис.1 Діаграма для RA, PA, LA / Рис.2 Дисперсія для RA, PA, LA LA -1 ряд RA-2 ряд PA-3 ряд До досліду з попередньої лабараторної додався автомат з лінійною тактикою. Кількість доступних агенту дій буде наступною: nA = 2 LA type = 2 LA memory size = 8 ==================== p(a0) = 0.357067 p(a1) = 0.677633 Лістинг програми: #define ENVTYPE 0 #define NACTIONS 2 #define NSTATES 2 #define NSTEPS 200 #define NREPLICAS 1000 #define REWARD 1//+1 #define PENALTY 0//-1 #define LATYPE 2 //3 //4 #define LAMEMSIZE 8 // ---------------------------------------------------------------------------- // final simulation results float sumRm[NSTEPS]; // mean values of sumR(t) float sumRv[NSTEPS]; // corresponding variances // files for parameters and results char * par_file_name = "c:\\Users\\ Desktop\\TIS\\2\\lab2.parameters.dat"; FILE * par_file; char * RA_res_file_name = "c:\\Users\\Desktop\\TIS\\2\\lab2.RA.results.dat"; FILE * RA_res_file; char * PA_res_file_name = "c:\\Users\\Desktop\\TIS\\2\\lab2.PA.results.dat"; FILE * PA_res_file; char * LA_res_file_name = "c:\\Users\\Desktop\\TIS\\2\\lab2.LA.results.dat"; FILE * LA_res_file; // ---------------------------------------------------------------------------- // initialization of stationary environment void seInit(void) { for (int i = 0; i < nA; i++) sePa[i] = (float)rand() / (float)RAND_MAX; } // save parameters in file void saveParameters(void) { int i, j; if ((par_file = fopen(par_file_name, "w")) == NULL) { fprintf(stderr, "Cannot open file <%s> for parameters of experiment.\n", par_file_name); } fprintf(par_file, "T = %d\n", T); fprintf(par_file, "n = %d\n", n); fprintf(par_file, "env = %d\n", env); fprintf(par_file, "nA = %d\n", nA); if (env) fprintf(par_file, "nS = %d\n", nS); fprintf(par_file, "LA type = %d\n", LATYPE); fprintf(par_file, "LA memory size = %d\n", memSize); fprintf(par_file, "====================\n"); switch (env) { case 0: // se (stationary environment) for (i = 0; i < nA; i++) fprintf(par_file, "p(a%d) = %f\n", i, sePa[i]); break; case 1: // ce (commutative environment) // probabilities of rewards for (i = 0; i < nS; i++) { for (j = 0; j < nA; j++) fprintf(par_file, "p(s%d,a%d) = %f\n", i, j, cePa[i][j]); if (i < nS - 1) fprintf(par_file, "--------------------\n"); } fprintf(par_file, "\n====================\n"); // probabilities of state transition for (i = 0; i < nS; i++) { for (j = 0; j < nS; j++) fprintf(par_file, "p(s%d,s%d) = %f\n", i, j, cePs[i][j]); fprintf(par_file, "--------------------\n"); } break; default: printf("lab2 error: wrong env model code specified\n"); } fclose(par_file); } // save results of random agent void saveResultsRA(void) { int i; if ((RA_res_file = fopen(RA_res_file_name, "w")) == NULL) fprintf(stderr, "Cannot open file <%s> for experimental results.\n", RA_res_file_name); for (i = 0; i < T; i++) fprintf(RA_res_file, "%f\n", sumRm[i]); fclose(RA_res_file); } // save results of perfect agent void saveResultsPA(void) { int i; if ((PA_res_file = fopen(PA_res_file_name, "w")) == NULL) fprintf(stderr, "Cannot open file <%s> for experimental results.\n", PA_res_file_name); for (i = 0; i < T; i++) fprintf(PA_res_file, "%f\n", sumRm[i]); fclose(PA_res_file); } // save results of learning automaton void saveResultsLA(void) { int i; if ((LA_res_file = fopen(LA_res_file_name, "w")) == NULL) fprintf(stderr, "Cannot open file <%s> for experimental results.\n", LA_res_file_name); for (i = 0; i < T; i++) fprintf(LA_res_file, "%f\n", sumRm[i]); fclose(LA_res_file); } // init agent void initAgent(int _ag) { switch (_ag) { case 0: break; case 1: break; case 2: break; case 3: state = 1; action = uRand(nA); break; case 4: break; default: printf("lab22 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; } // ---------------------------------------------------------------------------- // learning automaton with linear tactics (Tsetlin's automaton) int LLA (void) { int _action = action; if (response > 0) // 1 -> reward { if (state < memSize) state++; // step up in current branch } else // 0 -> penalty { if (state == 1) { // change action (change branch of automaton) if (action == (nA-1)) _action = 0; else _action = action + 1; } else state--; // step down in current branch } /* // compact version (response>0)? ((state<memSize)?state++:state): ((state==1)? ((action==(nA-1))? (_action=0): (_action++)): (state--)); // one line version int r=response, s=state, m=memSize, a=action; (r>0)?((s<m)?s++:s):((s==1)?((a==(nA-1))?(a=0):(a++)):(s--)); state=s; return a; */ return _action; } // ---------------------------------------------------------------------------- // agent int agent(int _ag) { int _a = 0; switch (_ag) { case 0: _a = randomAgent(); break; case 1: _a = perfectAgent(); break; case 2: break; case 3: _a = TLA(); break; case 4: break; default: printf("lab2 error: wrong agent code specified\n"); } return _a; } // simulation void simulation(int _i) { initAgent(agt); sumR = 0.0f; avrR = 0.0f; for (t = 0; t < T; t++) { // get action of agent action = agent(agt); // get response of environment response = environment(env); // calculate cumulative results sumR = sumR + (float)response; avrR = sumR / ((float)t + 1); // save results _sumR[t][_i] = sumR; _avrR[t][_i] = avrR; } } // get mean values of simulation results void getMeanValues(void) { for (t = 0; t < T; t++) { float tmps1 = 0.0f; float tmps2 = 0.0f; for (int i = 0; i < n; i++) { tmps1 += _sumR[t][i]; tmps2 += _avrR[t][i]; } sumRm[t] = (float)tmps1 / (float)n; avrRm[t] = (float)tmps2 / (float)n; } } // ---------------------------------------------------------------------------- // get variances of simulation results void getVarianceValues(void) { for (t = 0; t < T; t++) { float tmps1 = 0.0f; float tmps2 = 0.0f; for (int i = 0; i < n; i++) { tmps1 += (sumRm[t] - _sumR[t][i]) * (sumRm[t] - _sumR[t][i]); tmps2 += (avrRm[t] - _avrR[t][i]) * (avrRm[t] - _avrR[t][i]); } sumRv[t] = (float)tmps1 / (float)(n - 1); avrRv[t] = (float)tmps2 / (float)(n - 1); } } // ---------------------------------------------------------------------------- // main int main(int argc, char* argv[]){ int i; // init random-number generator srand((unsigned)time(NULL)); // init environment if (env == 0) seInit(); else ceInit(); // save parameters of experiment saveParameters(); // run experiment for random agent agt = 0; for (i = 0; i < n; i++) simulation(i); getMeanValues(); getVarianceValues(); saveResultsRA(); // run experiment for perfect agent agt = 1; for (i = 0; i < n; i++) simulation(i); getMeanValues(); getVarianceValues(); saveResultsPA(); // run experiment for learning automaton agt = LATYPE; for (i = 0; i < n; i++) simulation(i); getMeanValues(); getVarianceValues(); saveResultsLA(); return 0;} Висновок: Під час виконання лабараторної роботи мною було змодельовано та досліджено роботу інерційного автомату у стаціонарному випадковому середовищі.
Антиботан аватар за замовчуванням

23.03.2018 15:11

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!