У меня есть ввод значений стоимости и я хочу рассчитать вероятности для каждого значения, которое изменяется в зависимости от прошедшего времени. Сначала более низкие затраты должны иметь более высокую вероятность, но должны сужаться и позволять более высоким затратам иметь большую долю вероятности с течением времени.
Например, со временем = 0
costs = [0, 2, 3, 5]
time = 0
expected_result = [0.99, 0.005, 0.003, 0.002] #should sum to 1.0
На следующей итерации время = 1
costs = [0, 2, 3, 5]
time = 1
expected_result = [0.95, 0.025, 0.015, 0.01]
Позже, после сколь угодно долгого времени ...
costs = [0, 2, 3, 5]
time = 10
expected_result = [0.5, 0.25, 0.15, 0.1]
Мне не удалось найти аналогичную проблему для изучения, но это может быть потому, что я не уверен в правильности условий поиска для того, чего я пытаюсь достичь.
EDIT:
Чтобы обеспечить некоторый контекст, я разрабатываю агента в игре, который принимает решение, выбирая действие на каждом произвольно долгом временном шаге. Действия связаны с затратами в виде внутриигровых ресурсов или ожидаемых результатов, и я хочу, чтобы агент начал игру, выбирая более безопасные и менее дорогие действия, но ведя себя более рискованно по мере развития игры. Общая идея заключается в том, что я хочу кодифицировать ощущение срочности и моделировать это поведение в процессе принятия решений Маркова, который учитывает затраты и время при вычислении вероятностей переходов. Затраты сопоставлены с действиями и были рассчитаны априори. Ниже приведен код, который приближает к желаемым результатам.
def calculate_probability(costs, time):
probabilities = []
adjustment = 0.001 # To avoid division by zero
rate = 15
for c in costs:
probabilities.append(1 / ((c + adjustment) + ((time + adjustment) / rate)))
return [p / sum(probabilities) for p in probabilities] # scale values
costs = [0, 2, 3, 5]
time = 0
probabilities = calculate_probability(costs, time)
print("costs: {} time: {}".format(costs, time))
print("probabilities: {}".format(probabilities))
time = 1
probabilities = calculate_probability(costs, time)
print("costs: {} time: {}".format(costs, time))
print("probabilities: {}".format(probabilities))
time = 10
probabilities = calculate_probability(costs, time)
print("costs: {} time: {}".format(costs, time))
print("probabilities: {}".format(probabilities))
Результаты:
costs: [0, 2, 3, 5] time: 0
probabilities: [0.9988994464993101, 0.0005324623915241525, 0.0003550380119066324, 0.00021305309725910417]
costs: [0, 2, 3, 5] time: 1
probabilities: [0.9361523759693375, 0.03066581164511371, 0.020669567411005885, 0.012512244974542817]
costs: [0, 2, 3, 5] time: 10
probabilities: [0.6450909018718866, 0.16146617535857696, 0.11744275252924269, 0.07600017024029376]