Расчет вознаграждения за модель SARSA для уменьшения заторов на дорогах ⇐ Python
Расчет вознаграждения за модель SARSA для уменьшения заторов на дорогах
Я пытаюсь реализовать систему вознаграждений, которую можно использовать в модели SARSA для принятия более эффективных решений по разгрузке трафика на всех полосах движения на перекрестке. Вот как выглядит моя функция вознаграждения:
def Calculate_reward(self, old_dti, new_dti): альфа = 0,5 бета = 0,3 гамма = 0,2 сокращение_in_total_congestion = sum(old_dti.values()) - sum(new_dti.values()) extra_vehicles = [max(0, count - self.vehicle_threshold) для количества в self.vehicle_parameters["vehicle_count"].values()] avg_congestion_above_threshold = сумма (лишние_транспортные средства) / 4 action_cost = 1, если self.action_changed, иначе 0 вознаграждение = альфа * сокращение_в_общей_перегрузке - бета * avg_congestion_above_threshold - гамма * стоимость действия вернуть награду dti (Индикатор времени задержки): это сумма времени ожидания всех транспортных средств на полосе движения. Пример: old_dti = {"север": 4334, "юг": 83, "восток": 2332, "запад": 432
vehicle_threshold: максимальное количество транспортных средств, которое может иметь полоса движения. Я установил 12
self.vehicle_parameters["vehicle_count"]: количество транспортных средств на каждой полосе, ожидающих на красный свет. Пример: {"север": 12, "юг": 0, "восток": 2, "запад": 2
action_cost: если модель SARSA приняла решение и это не то же самое решение, что и раньше, стоимость равна 1. Если принято то же решение, стоимость равна 0
Я добавил веса к вышеуказанным параметрам, чтобы обозначить их важность. DTI имеет наибольшую важность, поскольку на полосе движения с низким DTI может находиться 10 транспортных средств, а на другой полосе может находиться 5 транспортных средств с высоким DTI. В этом случае DTI имеет приоритет над Vehicle_count.
Моя предыдущая функция расчета вознаграждения:
@staticmethod def Calculate_reward(old_dti, new_dti, Vehicle_count): макс_награда = 10 макс_пенальти = -10 задержка_перед = сумма (old_dti.values()) задержка_после = сумма (new_dti.values()) если задержка_перед == 0: если задержка_после > 0: # Введение задержки там, где ее не было, должно наказываться вернуть max_penalty еще: # Поддержание отсутствия заторов может быть нейтральным или слегка положительным результатом. вернуть 1 # или небольшое положительное значение еще: улучшение = задержка_до - задержка_после если улучшение > 0: # Масштабируйте вознаграждение в зависимости от процентного улучшения вознаграждение = (улучшение/задержка_до) * максимальное_вознаграждение улучшение elif < 0: # Масштабируйте штраф в зависимости от процентного ухудшения штраф_коэффициент = абс (улучшение) / задержка_перед награда = коэффициент_штрафа * максимальный_пенальти еще: # Никаких изменений в задержке награда = 0 вернуть награду В этой реализации я рассчитываю вознаграждение только на основе DTI. Но через 20 поколений награда существенно не изменилась, и модель не обучилась должным образом.
Является ли мой новый способ расчета вознаграждения более эффективным для уменьшения заторов на каждой полосе движения? Кроме того, на каком основании мое SARSA должно принять следующее решение? На данный момент SARSA принимает решение каждые 0,5 секунды. Я подумываю о внедрении транспортного средства_threshold, и если пороговое значение транспортного средства на полосе превысило заданный предел, решение должно принять SARSA
Я пытаюсь реализовать систему вознаграждений, которую можно использовать в модели SARSA для принятия более эффективных решений по разгрузке трафика на всех полосах движения на перекрестке. Вот как выглядит моя функция вознаграждения:
def Calculate_reward(self, old_dti, new_dti): альфа = 0,5 бета = 0,3 гамма = 0,2 сокращение_in_total_congestion = sum(old_dti.values()) - sum(new_dti.values()) extra_vehicles = [max(0, count - self.vehicle_threshold) для количества в self.vehicle_parameters["vehicle_count"].values()] avg_congestion_above_threshold = сумма (лишние_транспортные средства) / 4 action_cost = 1, если self.action_changed, иначе 0 вознаграждение = альфа * сокращение_в_общей_перегрузке - бета * avg_congestion_above_threshold - гамма * стоимость действия вернуть награду dti (Индикатор времени задержки): это сумма времени ожидания всех транспортных средств на полосе движения. Пример: old_dti = {"север": 4334, "юг": 83, "восток": 2332, "запад": 432
vehicle_threshold: максимальное количество транспортных средств, которое может иметь полоса движения. Я установил 12
self.vehicle_parameters["vehicle_count"]: количество транспортных средств на каждой полосе, ожидающих на красный свет. Пример: {"север": 12, "юг": 0, "восток": 2, "запад": 2
action_cost: если модель SARSA приняла решение и это не то же самое решение, что и раньше, стоимость равна 1. Если принято то же решение, стоимость равна 0
Я добавил веса к вышеуказанным параметрам, чтобы обозначить их важность. DTI имеет наибольшую важность, поскольку на полосе движения с низким DTI может находиться 10 транспортных средств, а на другой полосе может находиться 5 транспортных средств с высоким DTI. В этом случае DTI имеет приоритет над Vehicle_count.
Моя предыдущая функция расчета вознаграждения:
@staticmethod def Calculate_reward(old_dti, new_dti, Vehicle_count): макс_награда = 10 макс_пенальти = -10 задержка_перед = сумма (old_dti.values()) задержка_после = сумма (new_dti.values()) если задержка_перед == 0: если задержка_после > 0: # Введение задержки там, где ее не было, должно наказываться вернуть max_penalty еще: # Поддержание отсутствия заторов может быть нейтральным или слегка положительным результатом. вернуть 1 # или небольшое положительное значение еще: улучшение = задержка_до - задержка_после если улучшение > 0: # Масштабируйте вознаграждение в зависимости от процентного улучшения вознаграждение = (улучшение/задержка_до) * максимальное_вознаграждение улучшение elif < 0: # Масштабируйте штраф в зависимости от процентного ухудшения штраф_коэффициент = абс (улучшение) / задержка_перед награда = коэффициент_штрафа * максимальный_пенальти еще: # Никаких изменений в задержке награда = 0 вернуть награду В этой реализации я рассчитываю вознаграждение только на основе DTI. Но через 20 поколений награда существенно не изменилась, и модель не обучилась должным образом.
Является ли мой новый способ расчета вознаграждения более эффективным для уменьшения заторов на каждой полосе движения? Кроме того, на каком основании мое SARSA должно принять следующее решение? На данный момент SARSA принимает решение каждые 0,5 секунды. Я подумываю о внедрении транспортного средства_threshold, и если пороговое значение транспортного средства на полосе превысило заданный предел, решение должно принять SARSA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение