Главная страница

ЛР1 ИИ. Работа защищена с оценкой преподаватель


Скачать 196.13 Kb.
НазваниеРабота защищена с оценкой преподаватель
Дата02.03.2022
Размер196.13 Kb.
Формат файлаdocx
Имя файлаЛР1 ИИ.docx
ТипЛабораторная работа
#380629

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение
высшего профессионального образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА №14

РАБОТА ЗАЩИЩЕНА С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

ассистент










А.А. Бойко

должность, уч. степень, звание




подпись, дата




инициалы, фамилия





Лабораторная работа

ОБУЧЕНИЕ СТРАТЕГИИ ПОВЕДЕНИЯ С ПОМОЩЬЮ АЛГОРИТМА ИТЕРАЦИИ ПО ЦЕННОСТЯМ ДЕЙСТВИЙ

ОТЧЁТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 2






по дисциплине: СИСТЕМЫ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА




по дисциплине: “Базы данных”


РАБОТУ ВЫПОЛНИЛИ

СТУДЕНТЫ ГР.

1741










Г.В. Петров
И.Ю. Козлов
А.С. Шарапов










подпись, дата




инициалы, фамилия


Санкт-Петербург 2021

  1. Цель работы

  • Реализовать алгоритм итерации по ценностям действий для среды FrozenLake;

  • Исследовать реализованный алгоритм.




  1. Задачи

  • Изучить теоретическую часть работы;

  • Реализовать алгоритм итерации по стратегиям для игры FrozenLake;

  • Исследовать влияние функцию вознаграждения на выучиваемую стратегию поведения агента.




  1. Краткие теоретические сведения

В данной лабораторной работе требуется реализовать алгоритм итерации по ценностям действий для среды FrozenLake, который относится к алгоритмам машинного обучения с подкреплением, активно развивающимся и широко применяемым в разного рода прикладных задачах.

Алгоритмы машинного обучения (МО) с подкреплением отличаются от обучения без учителя тем, что за решение задач в среде агенту назначается награда, эквивалентная тому, насколько хорошо агент решает задачу.

Агент – некоторая сущность, которая способна «существовать» в среде, а именно – выполнять какие-то действия в среде, наблюдать за изменениями этой среды и получать вознаграждение за выполнение действий в среде.

Среда FrozenLake – среда дискретна, представляет собой доску размерностью 4х4 (16 клеток). Агент в начале игры находится в левой верхней клетке и должен дойти до правой нижней клетки. На поле находятся проруби, в которые агент может провалиться и эпизод заканчивается. За достижение правой нижней клетки агент получает награду, равную 1 и эпизод заканчивается, иначе – 0 и эпизод так же заканчивается. У агента имеется 4 возможных действия – переход влево, вправо, вверх или вниз. Также, из любого положения с равной вероятностью p=0.33 агент может попасть в клетку правее, левее или выше, т.к. покрытие озера «скользкое» и агент может «поскользнуться».

В среде FrozenLake применяется Марковский процесс принятия решения – результат зависит только от текущего положения и последующих действий агента, но никак не от предыдущих состояний.

Коэффициент гамма вводится для того, чтобы уменьшить вклад сильно отсроченных вознаграждений, коэффициент дельта вводится для того, чтобы регулировать степень обученности агента – на каждой итерации алгоритма, при обновлении таблицы, если все ее значения изменились меньше, чем на дельта, мы считаем, что агент обучен достаточно.


  1. Выполнение работы

Для выполнения работы будем использовать пакет gym, реализующий среду FrozenLake, в которой агент будет существовать, выполнять действия и получать награды, также пакет tensorboardX для формирования графиков, позволяющих оценить процесс обучения при разных входных данных.


  1. Листинг

Листинг 1 – реализация алгоритма итерации

по ценностям действий
import gym

import collections

from tensorboardX import SummaryWriter
ENV_NAME = "FrozenLake-v0"

DELTA = 0.001

GAMMA = 0.99

TEST_EPISODES = 20

class Agent:

def __init__(self):

self.env = gym.make(ENV_NAME)

self.state = self.env.reset()

self.reward_table = collections.defaultdict(float)

self.transition_table = collections.defaultdict(collections.Counter)

self.Q = collections.defaultdict(float)

self.q_prev = collections.defaultdict(float)
def play_n_random_steps(self, count):

for _ in range(count):

action = self.env.action_space.sample()

new_state, reward, is_done, _ = self.env.step(action)

self.reward_table[(self.state, action, new_state)] = reward

self.transition_table[(self.state, action)][new_state] += 1

self.state = self.env.reset() if is_done else new_state
def select_action(self, state):

best_action, best_value = None, None

for action in range(self.env.action_space.n):

action_value = self.Q[(state, action)]
if best_value is None or best_value < action_value:

best_value = action_value

best_action = action
return best_action
def play_episode(self, env, do_rendering=False):

total_reward = 0.0

state = env.reset()
while True:

action = self.select_action(state)

new_state, reward, is_done, _ = env.step(action)
if do_rendering:

env.render()
self.reward_table[(state, action, new_state)] = reward

self.transition_table[(state, action)][new_state] += 1

total_reward += reward
if is_done:

break
state = new_state
return total_reward
def Q_iteration(self):

self.q_prev = self.Q.copy()
for state in range(self.env.observation_space.n):

for action in range(self.env.action_space.n):

action_value = 0.0

target_counts = self.transition_table[(state, action)]

total = sum(target_counts.values())
for tgt_state, count in target_counts.items():

reward = self.reward_table[(state, action, tgt_state)]

best_action = self.select_action(tgt_state)

action_value += (count / total) * \

(reward + GAMMA * self.Q[(tgt_state, best_action)])
self.Q[(state, action)] = action_value

if __name__ == '__main__':

test_env = gym.make(ENV_NAME)

agent = Agent()

writer = SummaryWriter(comment="-q-iteration")
iter_no = 0

best_reward = 0.0

is_done = False

while not is_done:

iter_no += 1

agent.play_n_random_steps(100)

agent.Q_iteration()
reward = 0.0

for _ in range(TEST_EPISODES):

reward += agent.play_episode(test_env)
reward /= TEST_EPISODES

writer.add_scalar("reward", reward, iter_no)
if reward > best_reward:

print("Best reward updated {} -> {}".format(best_reward, reward))

best_reward = reward
if iter_no > 15:

for state, action in agent.Q:

if abs(agent.Q[(state, action)] - agent.q_prev[(state, action)]) < DELTA:

is_done = True

else:

is_done = False

break
if is_done:

print("Solved in %d iterations!" % iter_no)

break
writer.close()

env = gym.make(ENV_NAME)

agent.play_episode(env, True)


  1. Результаты работы

    1. Эксперимент для gamma = 0.99, delta = 0.001




Рисунки 1-2 – динамика изменения наград в зависимости от количества совершенных итераций.


    1. Эксперимент для gamma = 0.7, delta = 0.001



Рисунки 3-4 - динамика изменения наград в зависимости от количества совершенных итераций.


  1. Выводы

Исходя из результатов проделанных экспериментов с разными гамма, можно сделать вывод, что чем большее значение принимает гамма, тем медленнее обучается агент, т.к. чем выше гамма, тем больший вклад отсроченных наград имеет место быть.


написать администратору сайта