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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Кафедра ЕОМ Лабараторна робота №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:03-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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