Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 18.08.2022
Сообщений: 1

Простое задание MountainCar

30.09.2022, 14:51. Показов 1206. Ответов 0

Студворк — интернет-сервис помощи студентам
Уважаемы форумчане, помогите решить упражнение:
"Модернизируйте код функции обучения таким образом, чтобы в отдельных переменных собиралась информация о следующих показателях:
1.вознаграждении за каждый эпизод;
2.продолжительности каждого эпизода;
3.успех/неудача эпизода.
Постройте на отдельных графиках перечисленные показатели после того, как пройдет обучение. По оси Х на графике должны быть эпизоды, по оси У - показатель. Последний из показателей пусть будет принимать значения ноль или единица."

Алгоритм обучения:
Эта функция конвертирует вещественное число в целое
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Мы условно разделили диапазон значений состояния на несколько областей
# все непрерывные значения из этой области превращаются в дискретное значение
def calc_discrete_state(state):
discrete_state = (state - env.observation_space.low)/buckets
return tuple(discrete_state.astype(np.int))
 
# Запустим игру. Передадим в нее q_table. Также в функции указывается
# флаг, указывающий, что результат нужно отрисовать.
# Другая переменная-флаг
# определяет, нужно ли обновлять q_table.
def run_game(q_table, render, should_update):
done = False
discrete_state = calc_discrete_state(env.reset())
success = False
 
while not done:
# Exploit or explore (эксплуатировать или исследовать)
if np.random.random() > epsilon:
# Эксплуатировать, т.е. использовать q-table чтобы выбрать лучшее действие
action = np.argmax(q_table[discrete_state])
else:
# Исследовать
action = np.random.randint(0, env.action_space.n)
 
# Запустить симуляцию на один шаг
new_state, reward, done, _ = env.step(action)
 
# Преобразовать непрерывное значение состояния в одно из дискретных
new_state_disc = calc_discrete_state(new_state)
 
# Достигли ли мы целевой позиции (выиграли ли мы?)?
if new_state[0] >= env.unwrapped.goal_position:
success = True
 
# Обновление q-table
if should_update:
max_future_q = np.max(q_table[new_state_disc])
current_q = q_table[discrete_state + (action,)]
new_q = (1 - LEARNING_RATE) * current_q + LEARNING_RATE * \
(reward + DISCOUNT * max_future_q)
q_table[discrete_state + (action,)] = new_q
 
discrete_state = new_state_disc
 
if render:
env.render()
 
return success
Задание начальных условий:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
EARNING_RATE = 0.1 # скорость обучения (шаг оптимизации)
DISCOUNT = 0.95 # коэффициент дисконтирования
EPISODES = 5000 # циклов обучения
SHOW_EVERY = 1000 # частота, с которой выводятся результаты обучения
 
DISCRETE_GRID_SIZE = [10, 10] # размер дискретного пространства вместо непрерывного
START_EPSILON_DECAYING = 0.5 # эпсилон определяет долю случайных значений, чтобы шло обучение
END_EPSILON_DECAYING = EPISODES//10 # через сколько циклов обучения эпсилон станет нулевым
 
env = wrap_env(gym.make("MountainCar-v0"))
 
epsilon = 1
epsilon_change = epsilon/(END_EPSILON_DECAYING - START_EPSILON_DECAYING)
buckets = (env.observation_space.high - env.observation_space.low) \
/DISCRETE_GRID_SIZE
q_table = np.random.uniform(low=-3, high=0, size=(DISCRETE_GRID_SIZE \
+ [env.action_space.n]))
success = False
 
Запуск обучения:
 
episode = 0
success_count = 0
 
while episode<EPISODES:
episode+=1
done = False
 
# Запускаем игру
if episode % SHOW_EVERY == 0:
print(f"Текущий эпизод: {episode}, Успешных попыток: {success_count}" +\
" ({float(success_count)/SHOW_EVERY})")
success = run_game(q_table, True, False)
success_count = 0
else:
success = run_game(q_table, False, True)
 
# Считаем количество успешных прохождений
if success:
success_count += 1
 
# Изменяем значение эпсилон
if END_EPSILON_DECAYING >= episode >= START_EPSILON_DECAYING:
epsilon = max(0, epsilon - epsilon_change)
 
print(success)

Прошу помочь с данным вопросов
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.09.2022, 14:51
Ответы с готовыми решениями:

Простое задание
Какая область точек относительно круга радиуса R соответствует выражении (X * x + y * y) &lt;R: 1). расположенных Внутри круга 2)...

Простое задание
Умные люди помогите пожалуйта, недавно начал С++ изучать и вот столкнулся с такой проблемой. Не могу решить следующие задание: В...

Самое простое задание
изменить код так чтобы вместо &quot;1&quot; было слово&quot;игорь&quot;

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.09.2022, 14:51
Помогаю со студенческими работами здесь

Производная. Простое задание
Чему равна производная,

Вроде и простое задание
Условие: В вольере находятся несколько аистов. Некоторые из них стоят на двух ногах, некоторые - на одной. Когда аист стоит на одной ноге,...

Простое задание с AppWizard
Помогите решить простое задание. Сам я недавно начал изучать С++ и вот что не делаю всё получается с ошибкой.У меня такое чувство, что я не...

Простое задание по sql
Помогите, пожалуйста, с заданием. Создать в экзаменационной базе данных таблицу Student (Студент) со следующими полями: STUDENT_ID —...

Простое задание с массивами
Сформировать массив из N элементов случайным образом и вывести его на экран: 1)Как есть; 2)В обратном порядке


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru