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

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

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

Рік:
2015
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Інтелектуальні системи

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра ЕОМ ЗВІТ до лабораторної роботи №3 на тему: «Моделювання простих форм цілеспрямованої поведінки. Дослідження роботи стохастичного автомату зі змінною структурою у випадковому середовищі з перемиканням станів» з дисципліни: «Теорія інтелектуальних систем» Львів – 2015 Мета роботи: Змоделювати та дослідити роботу стохастичного автомату зі змінною структурою у випадковому середовищі з перемиканням станів. Хід роботи: 1. Реалізувати модель випадкового середовища з перемиканням станів E (кількість станів обрати згідно варіанту). Автомат задається двома матрицями: П+ і П–. Відповідно матриця П+ містить ймовірності переходу зі стану в стан після отримання сигналу про виграш, а матриця П– містить ймовірності переходу зі стану в стан після отримання сигналу про програш. Це квадратні матриці (n·m)x(n·m), де n - кількість дій автомату, а m — глибина пам'яті автомату (для всіх варіантів обрати m=100). Таким чином для кожної з n дій виділяється m станів (якщо автомат знаходиться в одному з цих станів, то він виконує відповідну дію). W2 => Середній виграш N Модель оптимальної поведінки Кількість станів середовища Кількість доступних агенту дій  5 W2 3 3   2. Фрагмент тексту програми обчислювального експерименту: double rk1_ti_step(double x, double t, double h, double q, double fi(double x), double gi(double x), int *seed) { double a21; double k1; double q1; double t1; double w1; double x1; double xstar; a21 = 1.0; q1 = 1.0; t1 = t; x1 = x; w1 = r8_normal_01(seed) * sqrt(q1 * q / h); k1 = h * fi(x1) + h * gi(x1) * w1; xstar = x1 + a21 * k1; return xstar; } double rk2_ti_step(double x, double t, double h, double q, double fi(double x), double gi(double x), int *seed) { a21 = 1.0; a31 = 0.5; a32 = 0.5; q1 = 2.0; q2 = 2.0; t1 = t; x1 = x; w1 = r8_normal_01(seed) * sqrt(q1 * q / h); k1 = h * fi(x1) + h * gi(x1) * w1; t2 = t1 + a21 * h; x2 = x1 + a21 * k1; w2 = r8_normal_01(seed) * sqrt(q2 * q / h); k2 = h * fi(x2) + h * gi(x2) * w2; xstar = x1 + a31 * k1 + a32 * k2; return xstar; } double rk3_ti_step(double x, double t, double h, double q, double fi(double x), double gi(double x), int *seed) a21 = 1.52880952525675; a31 = 0.0; a32 = 0.51578733443615; a41 = 0.53289582961739; a42 = 0.25574324768195; a43 = 0.21136092270067; q1 = 1.87653936176981; q2 = 3.91017166264989; q3 = 4.73124353935667; t1 = t; x1 = x; w1 = r8_normal_01(seed) * sqrt(q1 * q / h); k1 = h * fi(x1) + h * gi(x1) * w1; t2 = t1 + a21 * h; x2 = x1 + a21 * k1; w2 = r8_normal_01(seed) * sqrt(q2 * q / h); k2 = h * fi(x2) + h * gi(x2) * w2; t3 = t1 + a31 * h + a32 * h; x3 = x1 + a31 * k1 + a32 * k2; w3 = r8_normal_01(seed) * sqrt(q3 * q / h); k3 = h * fi(x3) + h * gi(x3) * w3; xstar = x1 + a41 * k1 + a42 * k2 + a43 * k3; return xstar; } double rk4_ti_step(double x, double t, double h, double q, double fi(double x), double gi(double x), int *seed) { a21 = 2.71644396264860; a31 = -6.95653259006152; a32 = 0.78313689457981; a41 = 0.0; a42 = 0.48257353309214; a43 = 0.26171080165848; a51 = 0.47012396888046; a52 = 0.36597075368373; a53 = 0.08906615686702; a54 = 0.07483912056879; q1 = 2.12709852335625; q2 = 2.73245878238737; q3 = 11.22760917474960; q4 = 13.36199560336697; t1 = t; x1 = x; w1 = r8_normal_01(seed) * sqrt(q1 * q / h); k1 = h * fi(x1) + h * gi(x1) * w1; t2 = t1 + a21 * h; x2 = x1 + a21 * k1; w2 = r8_normal_01(seed) * sqrt(q2 * q / h); k2 = h * fi(x2) + h * gi(x2) * w2; t3 = t1 + a31 * h + a32 * h; x3 = x1 + a31 * k1 + a32 * k2; w3 = r8_normal_01(seed) * sqrt(q3 * q / h); k3 = h * fi(x3) + h * gi(x3) * w3; t4 = t1 + a41 * h + a42 * h + a43 * h; x4 = x1 + a41 * k1 + a42 * k2; w4 = r8_normal_01(seed) * sqrt(q4 * q / h); k4 = h * fi(x4) + h * gi(x4) * w4; xstar = x1 + a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4; return xstar; } double rk1_tv_step(double x, double t, double h, double q, double fv(double t, double x), double gv(double t, double x), int *seed) { double a21; double k1; double q1; double t1; double w1; double x1; double xstar; a21 = 1.0; q1 = 1.0; t1 = t; x1 = x; w1 = r8_normal_01(seed) * sqrt(q1 * q / h); k1 = h * fv(t1, x1) + h * gv(t1, x1) * w1; xstar = x1 + a21 * k1; return xstar; } double rk2_tv_step(double x, double t, double h, double q, double fv(double t, double x), double gv(double t, double x), int *seed) { a21 = 1.0; a31 = 0.5; a32 = 0.5; q1 = 2.0; q2 = 2.0; t1 = t; x1 = x; w1 = r8_normal_01(seed) * sqrt(q1 * q / h); k1 = h * fv(t1, x1) + h * gv(t1, x1) * w1; t2 = t1 + a21 * h; x2 = x1 + a21 * k1; w2 = r8_normal_01(seed) * sqrt(q2 * q / h); k2 = h * fv(t2, x2) + h * gv(t2, x2) * w2; xstar = x1 + a31 * k1 + a32 * k2; return xstar; } double rk4_tv_step(double x, double t, double h, double q, double fv(double t, double x), double gv(double t, double x), int *seed) { ; a21 = 0.66667754298442; a31 = 0.63493935027993; a32 = 0.00342761715422; a41 = -2.32428921184321; a42 = 2.69723745129487; a43 = 0.29093673271592; a51 = 0.25001351164789; a52 = 0.67428574806272; a53 = -0.00831795169360; a54 = 0.08401868181222; q1 = 3.99956364361748; q2 = 1.64524970733585; q3 = 1.59330355118722; q4 = 0.26330006501868; t1 = t; x1 = x; w1 = r8_normal_01(seed) * sqrt(q1 * q / h); k1 = h * fv(t1, x1) + h * gv(t1, x1) * w1; t2 = t1 + a21 * h; x2 = x1 + a21 * k1; w2 = r8_normal_01(seed) * sqrt(q2 * q / h); k2 = h * fv(t2, x2) + h * gv(t2, x2) * w2; t3 = t1 + a31 * h + a32 * h; x3 = x1 + a31 * k1 + a32 * k2; w3 = r8_normal_01(seed) * sqrt(q3 * q / h); k3 = h * fv(t3, x3) + h * gv(t3, x3) * w3; t4 = t1 + a41 * h + a42 * h + a43 * h; x4 = x1 + a41 * k1 + a42 * k2 + a43 * k3; w4 = r8_normal_01(seed) * sqrt(q4 * q / h); k4 = h * fv(t4, x4) + h * gv(t4, x4) * w4; xstar = x1 + a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4; return xstar; } double r8_normal_01(int *seed) { # define R8_PI 3.141592653589793 double r1; double r2; static int seed1 = 0; static int seed2 = 0; static int seed3 = 0; static int used = 0; double v1; static double v2 = 0.0; if ((used % 2) == 1) { if (*seed != seed2) { used = 0; seed1 = 0; seed2 = 0; seed3 = 0; v2 = 0.0; } } if ((used % 2) == 0) { seed1 = *seed; r1 = r8_uniform_01(seed); if (r1 == 0.0) { cerr << "\n"; cerr << "R8_NORMAL_01 - Fatal error!\n"; cerr << " R8_UNIFORM_01 returned a value of 0.\n"; exit(1); } seed2 = *seed; r2 = r8_uniform_01(seed); seed3 = *seed; *seed = seed2; v1 = sqrt(-2.0 * log(r1)) * cos(2.0 * R8_PI * r2); v2 = sqrt(-2.0 * log(r1)) * sin(2.0 * R8_PI * r2); } else { v1 = v2; *seed = seed3; } used = used + 1; return v1; # undef R8_PI } double r8_uniform_01(int *seed) { int i4_huge = 2147483647; int k; double r; if (*seed == 0) { cerr << "\n"; cerr << "R8_UNIFORM_01 - Fatal error!\n"; cerr << " Input value of SEED = 0.\n"; exit(1); } k = *seed / 127773; *seed = 16807 * (*seed - k * 127773) - k * 2836; if (*seed < 0) { *seed = *seed + i4_huge; } r = (double)(*seed) * 4.656612875E-10; return r; } void imestamp() { # define TIME_SIZE 40 static char time_buffer[TIME_SIZE]; const struct std::tm *tm_ptr; size_t len; std::time_t now; now = std::time(NULL); tm_ptr = std::localtime(&now); len = std::strftime(time_buffer, TIME_SIZE, "%d %B %Y %I:%M:%S %p", tm_ptr); std::cout << time_buffer << "\n"; return; # undef TIME_SIZE } int main(void) { imestamp(); double rk1_ti_step ( double x, double t, double h, double q, double fi ( double x ), double gi ( double x ), int *seed ); double rk2_ti_step ( double x, double t, double h, double q, double fi ( double x ), double gi ( double x ), int *seed ); double rk3_ti_step ( double x, double t, double h, double q, double fi ( double x ), double gi ( double x ), int *seed ); double rk4_ti_step ( double x, double t, double h, double q, double fi ( double x ), double gi ( double x ), int *seed ); double rk1_tv_step ( double x, double t, double h, double q, double fv ( double t, double x ), double gv ( double t, double x ), int *seed ); double rk2_tv_step ( double x, double t, double h, double q, double fv ( double t, double x ), double gv ( double t, double x ), int *seed ); double rk4_tv_step ( double x, double t, double h, double q, double fv ( double t, double x ), double gv ( double t, double x ), int *seed ); double r8_normal_01 ( int *seed ); double r8_uniform_01 ( int *seed ); void timestamp ( ); getch(); }{ 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; 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; 3. Результати виконання програми:  Рис. 1. Результати обчислювального експерименту у вигляді графічної залежності Висновок: Виконавши дану лабораторну роботу, я змоделював та дослідив роботу стохастичного автомату зі змінною структурою у випадковому середовищі з перемиканням станів.
Антиботан аватар за замовчуванням

03.12.2015 14:12-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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