Нахождение лучшего / близкого к лучшему результата из почти случайных данных

После моей неудачной попытки задать вопрос несколько месяцев назад (недостаточно подробно) - я собираюсь попробовать еще раз.

По сути, я пытаюсь разработать калькулятор для игры (RuneScape), который определит лучший порядок использования способностей, каждая способность может иметь свои уникальные переменные, некоторые примеры (это реальные способности):

Порядок: название способности, средний (способность) урон, время перезарядки способности (время до повторного использования), адреналин, на котором он может использоваться (полоса от 0 до 100, некоторые способности можно использовать на любой и добавить 8 к Бар, другие требуют, 50 или даже 100 для использования и удалит 15/ сбросит бар на ноль), время, необходимое для использования способности, и, наконец, я включу любые другие специальные детали.

Sever: средний урон 112,8, перезарядка: 15 секунд, используется при любом "адреналине", дает +8, выполнение 1,8 секунды.

Нападение: средний урон 525,6, время восстановления: 30 секунд, используется при 50 (или более) отборе адреналина -15, выполнение занимает 4,2 секунды.

Баржа: средний урон 75, время перезарядки 20,4 секунды, используется при любом "адреналине", дающем +8, выполнение занимает 1,8 секунды, связывает цель на 6,6 секунды.

срез: 70 урона в среднем, перезарядка 3 секунды, используется при любом увеличении адреналина +8, выполнение занимает 1,8 секунды, нанесет (предположим, 1,5 - для простоты) дополнительный урон, если цель связана.

Теперь, допустим, я хотел только 6-секундную ротацию (для простоты) и начал "адреналин" на 50, было бы несколько способов выполнить способности (например):

  1. Штурм с последующим разрывом
  2. Баржа, сопровождаемая ломтиком, сопровождаемым разрывом, сопровождаемым небольшим нападением.

так далее...

В этом случае алгоритм может легко вычислить, какой метод лучше всего использовать, используя алгоритм перебора и сохраняя лучшее решение. Однако, учитывая, что это простой пример, если я хотел, скажем, 10 способностей в течение 18 секунд, грубая сила просто занимает слишком много времени (если у кого-нибудь не осталось запасного компьютера Quantum). Кто-нибудь, кроме проверки случайного сценария, знает "эвристическое" решение, которое не всегда дает лучшие результаты, но дает результаты, близкие к лучшим?

Кроме того, вот график, показывающий одну симуляцию, которую я сделал (не очень красиво)

  • Спасибо всем, кто действительно смог прочитать и понять мое эссе.

1 ответ

Не забывайте, что для разных врагов лучшая последовательность будет отличаться. Например, если у противника средняя защита, много HP и средних атак, вам нужно наносить максимальный урон / время в течение длительного времени. Если у другого врага маленький HP и отличная атака, вам следует нанести максимальный урон, чтобы убить его, прежде чем он ударит вас. Отличная защита со средними атаками требует очень сильных атак с вашей стороны и сбора адреналина для них и защитной тактики между ними.

Итак, по мнению противника, вы должны определить лучшие одну или две атаки или заранее подготовленные комбинации действий. (давайте назовем их атаки тоже). Эта часть должна быть решена с помощью некоторой сложной комбинации if-then-else/case. В соответствии с ними вы должны планировать промежуточные действия (методом грубой силы. Предел только один - вы не должны умирать раньше. (Конечно, это может быть изменено в более сложной ситуации). Что будет оптимизировано - ваш адреналин или HP? в конце или во время битвы - решать вам.

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

Другие вопросы по тегам