Моделювання середовища.

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра електронних обчислювальних машин

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

Рік:
2005
Тип роботи:
Лабораторна робота
Предмет:
Теорія колективної поведінки інтелектуальних систем
Група:
КІ-4

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 1 з курсу „ Теорія колективної поведінки інтелектуальних систем ” Тема: Моделювання середовища Виконав: ст. гр. КІ-4 Львів – 2005 Мета: Реалізувати різні за складністю моделі середовищ та дослідити власну поведінку в цих середовищах. Загальні відомості Процес навчання досліджується шляхом ітераційної взаємодії студента з невідомим наперед типом середовища (одне з чотирьох: статичне детерміноване, динамічне детерміноване, стаціонарне випадкове, випадкове з перемиканням станів). В кожній ітерації взаємодії студент має можливість обрати одну з двох дій (D={1,2}). Реалізувавши цю дію, студент отримує відгук від середовища (R={0,1}). Мета студента – максимізувати сумарний виграш на протязі заданого числа ітерацій взаємодії з середовищем. В процесі взаємодії визначаються три залежності: Залежність біжучого виграшу від часу: R(t). Залежність біжучого сумарного виграшу від часу: R(t) = Rt. Залежність біжучого проценту виграшних дій від часу (середнє значення виграшу, що припадає на одну дію): Ps(t) = Rt / t. Завдання 1. Скласти програму наступного змісту (алгоритм роботи програми): Випадково вибрати тип середовища (env_model) Ініціалізувати середовище (випадкова ініціалізація) Відкрити файл для збереження результатів Цикл від 1 до T (індекс t) Отримати код дії, яку обрав користувач Отримати відгук середовища на цю дію (біжучий виграш) Модифікувати значення сумарного виграшу Модифікувати значення проценту виграшних (правильних) дій Запам’ятати отриманні значення у файлі результатів Перейти на п.4 Закрити файл результатів. 2. Реалізувати моделі наступних типів середовища: 2.1. Статичне детерміноване. 2.2. Динамічне детерміноване. 2.3. Стаціонарне випадкове. 2.4. Випадкове з перемиканням. 3. Дослідити власну поведінку в реалізованих моделях середовища (метою поведінки є отримання максимального сумарного виграшу за найменшу кількість спроб). Отримати вказані залежності від часу для кожного з типів середовища. 4. Порівняти отримані залежності та зробити висновки. Текст програми /* Copyright (c) 2005 alb. All Rights Reserved. * Multiagent systems Lab * Computer Engineering Department * Lviv Polytechnic National University * =============================================== * Multiagent Systems. Lab work 01. Simulating the environment (world models) * With given * set of available actions D={1,2} and * set of possible responses R={0,1} 1 -> reward(win) * 0 -> punishment(loss) * you must maximize sum of rewards over T interaction with unknown environment. */ #include "stdafx.h" int t; // current time step int T = 20; // maximum number of time steps (interactions with environment) int env_model; // environmetn code: // 1 - envoronment with static response // 2 - envoronment with predetermined dynamic response // 3 - envoronment with stationary random response: // binary bandit task (n-armed bandit, n=2) // 4 - envoronment with stationary random response and state switching: // switched random environment // variables for environment's parameters int env1; // winning action code (env_model = 1) int env2_action1; // first winning action code (env_model = 2) int env2_action2; // second winning action code (env_model = 2) int max_period=6; // max period of action repetitions (env_model = 2) int cd1 = 0; // counter for first action (env_model = 2) int cd2 = 0; // counter for second action (env_model = 2) int env2[2]; // periods of action repetitions (env_model = 2) float env3[2]; // probabilities of rewards for each action (env_model = 3) float env4s[2]; // probabilities of switching between 2 states(env_model=4) int env4_istate; // initial state of environment (env_model = 4) int env4_state; // current state of environment: one or two (env_model = 4) float env4r[2][2]; // probabilities of rewards for each action (env_model = 4) // in first and second state (env_model = 4) // file for saving results char * res_file_name = "d:\\temp\\test.dat"; FILE * res_file; int action=0; // current action of the user (can be 1 or 2) int response; // current response of environment (can be 0 or 1) // results int R = 0; // current reward over time R(t) int sumR = 0; // total reward over time sumR(t) float prcR = 0; // success percent(rate) over time prcR(t) // equiprobable choice (one from four) int randomChoice4 (void) { int _tmp; float rand_num; rand_num = (float)rand() / (float)RAND_MAX; rand_num = (float)rand() / (float)RAND_MAX; if ((rand_num >= 0) && (rand_num <= 0.25)) {_tmp = 1; return _tmp;} if ((rand_num > 0.25) && (rand_num <= 0.50)) {_tmp = 2; return _tmp;} if ((rand_num > 0.50) && (rand_num <= 0.75)) {_tmp = 3; return _tmp;} if ((rand_num > 0.75) && (rand_num <= 1)) {_tmp = 4; return _tmp;} return -1; } // equiprobable choice (one from two) int randomChoice2 (void) { int _tmp; float rand_num; rand_num = (float)rand() / (float)RAND_MAX; rand_num = (float)rand() / (float)RAND_MAX; if ((rand_num >= 0) && (rand_num <= 0.5)) {_tmp = 1; return _tmp;} if ((rand_num > 0.5) && (rand_num <= 1)) {_tmp = 2; return _tmp;} return -1; } // automatic initialization of environment void env_init (int env_id) { int tmp; switch (env_id) { case 1: // envoronment with static response env1 = randomChoice2(); break; case 2: // envoronment with predetermined dynamic response // random choice of first winning action (1 or 2) env2_action1 = randomChoice2(); if (env2_action1 == 1) env2_action2 = 2; else env2_action2 = 1; // random choice of repitition number for first action tmp=(int)((float)(max_period-1)*(float)rand()/(float)RAND_MAX); env2[0] = tmp + 1; // random choice of repitition number for second action tmp=(int)((float)(max_period-1)*(float)rand()/(float)RAND_MAX); env2[1] = tmp + 1; break; case 3: // envoronment with stationary random response env3[0] = (float)rand() / (float)RAND_MAX; env3[1] = (float)rand() / (float)RAND_MAX; break; case 4: // envoronment with non-stationary random response env4s[0] = (float)rand() / (float)RAND_MAX; env4s[1] = (float)rand() / (float)RAND_MAX; env4r[0][0] = (float)rand() / (float)RAND_MAX; env4r[1][0] = (float)rand() / (float)RAND_MAX; env4r[0][1] = (float)rand() / (float)RAND_MAX; env4r[1][1] = (float)rand() / (float)RAND_MAX; env4_state = randomChoice2() - 1; env4_istate = env4_state; break; default: printf("lab1 error: wrong env model code specified\n"); } } // response generation int env_response (int env_id) { int win_action, _response; float ftmp; switch (env_id) { case 1: // envoronment with static response if (action == env1) _response = 1; else _response = 0; break; case 2: // envoronment with predetermined dynamic response if (cd1 < env2[0]) { cd1 ++; win_action = env2_action1; } else { if (cd2 < (env2[1] - 1)) { cd2 ++; win_action = env2_action2; } else { cd1 = 0; cd2 = 0; win_action = env2_action2; } } if (action == win_action) _response = 1; else _response = 0; break; case 3: // envoronment with stationary random response ftmp = (float)rand() / (float)RAND_MAX; if (ftmp < env3[action-1]) _response = 1; else _response = 0; break; case 4: // envoronment with non-stationary random response ftmp = (float)rand() / (float)RAND_MAX; if (ftmp < env4r[env4_state][action-1]) _response = 1; else _response = 0; ftmp = (float)rand() / (float)RAND_MAX; if (ftmp > env4s[env4_state]) {if (env4_state == 0) env4_state = 1; else env4_state = 0;} break; default: printf("lab1 error: wrong env model code specified\n"); } return _response; } // print environment parameters void env_info (void) { printf("\nenvironment = %d", env_model); switch (env_model) { case 1: // envoronment with static response printf("\n (%d)\n\n",env1); break; case 2: // envoronment with predetermined dynamic response printf("\n(%d) -> %d, (%d) -> %d\n\n",env2_action1,env2[0],env2_action2,env2[1]); break; case 3: // envoronment with stationary random response printf("\n(1) -> %f (2) -> %f\n\n", env3[0], env3[1]); break; case 4: // envoronment with non-stationary random response printf("\nstate 1: (1) -> %f, (2) -> %f", env4r[0][0], env4r[0][1]); printf("\nstate 2: (1) -> %f, (2) -> %f", env4r[1][0], env4r[1][1]); printf("\n"); printf("\nstate switching: (s1) -> %f, (s2) -> %f", env4s[0], env4s[1]); printf("\ninitial state -> %d\n", env4_istate + 1); break; default: printf("lab1 error: wrong env model code specified\n"); } } void res_open_file (void) { if ((res_file = fopen(res_file_name,"w")) == NULL) { fprintf(stderr,"Can’t open file <%s> for experimental results.\n",res_file_name); } } void res_close_file (void) { fclose(res_file); } void res_store_next_string (void) { fprintf(res_file,"%d,%d,%f\n",R,sumR,prcR); } int main (int argc, char* argv[]) { srand((unsigned)time(NULL)); // init random-number generator env_model = randomChoice4(); // random choice of environment model env_init(env_model); // set parameters of chosen environment res_open_file(); // open file for results // main cycle of program (over interactions with environment) for (t=0; t < T; t++) { printf("your action: "); // get user action from console scanf("%d",&action); response = env_response(env_model);// get response of environment // print response of environment printf("env response: %d --> ",response); R = response; // calculate results sumR = sumR + R; prcR = (float)sumR / ((float)t + 1); res_store_next_string(); // save current results in file // print current results printf("sum win: %d, rate win: %f\n", sumR, prcR); } // print information about environment env_info(); // close file with results res_close_file(); return 0; } Результати Залежності біжучого проценту виграшних дій від часу (середнє значення виграшу, що припадає на одну дію): Ps(t) = Rt / t для кожного типу середовища у вигляді графіку та із зазначенням чисельних характеристик середовищ, для яких отримано результати: 1. Статичне детерміноване середовище.  environment = 1 (2) 2. Динамічне детерміноване середовище.  environment = 2 (1) -> 3, (2) -> 1 3. Стаціонарне випадкове середовище.  environment = 3 (1) -> 0.386853 (2) -> 0.970885 4. Випадкове середовище з перемиканням станів.  environment = 4 state 1: (1) -> 0.477279, (2) -> 0.709586 state 2: (1) -> 0.256600, (2) -> 0.098453 state switching: (s1) -> 0.772362, (s2) -> 0.477554 initial state -> 1 Висновки: виконуючи дану лабораторну роботу, я досліджував власну поведінку в різних за складністю моделях середовищ. Статичне детерміноване середовище є найбільш простим для вивчення – оскільки може перебувати тільки в одному з двох можливих станів. На другому кроці середовище було вивчене, що можна помітити на графіку 1. Поведінку динамічного детермінованого середовища досліджувати потрібно довше, оскільки воно може змінювати свої стани за певним законом. В даному випадку: 3 рази стан 1 і 1 раз стан 2. Таким чином на п’ятому кроці поведінку середовища було повністю вивчено. У стаціонарному випадковому середовищі встановлено імовірності отримання “виграшу” від кожної з дій. Після вивчення цих ймовірностей можна обирати ту з дій, яка частіше дає “виграш”. Випадкове середовище з перемиканням станів є найскладнішим для вивчення, оскільки окрім вивчення функції середовища, ще необхідно вивчити функцію переходів між станами середовища – що і показує неоднорідність і спадний характер графіка.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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