Главное, чтобы в реальной игре результаты теоретической битвы улучшились. Нужно протестировать на нейтралах и героях с разным соотношением сил (с каждым нейтральным отрядом/героем боёв 10 хотя бы провести), составить табличку: старый QuickCombat/новый QuickCombat/автобой/человек. Тогда и будет видно, стал ли AI хоть чуточку эффективнее или нет.
Правдоподобнее, вы хотите сказать ? И потом, разве не важно соответствие результатов битвы (по потерям) и прогнозу ИИ перед битвой ? И, кстати, если уж этим заниматься, то также нужно протестировать как для атакующего героя, так и для защищающегося героя, отдельно.
Я вчера сделал просто - рассчитал мат. ожидания потерь для случая probWinnerA = 0.9 и для случая probWinnerA = 0.7, то есть для каждого случая рассмотрел результаты для разных возможных значений dice с шагом 0.1 и усреднил - так и получил мат. ожидание.
А вообще у меня всегда была склонность слишком доверять прикидочным и не очень системным расчетам. Не говоря уже о том, что никогда не умел хорошо оформлять результаты, в отличие от вас, например.
***
По поводу предложенной мною поправки:
- Код: Выделить всё
if(probWinnerA > 0.85)
*probablePreciseCasualtiesA = (*probablePreciseCasualtiesA + *probableApproxCasualtiesA) / 2;
if(probWinnerA < 0.15)
*probablePreciseCasualtiesD = (*probablePreciseCasualtiesD + *probableApproxCasualtiesD) / 2;
Имеет ли она какую-то "математическую связь" с алгоритмом для расчета потерь (после броска dice и тд) ? Нет, не имеет. Почему была выбрана именно такая поправка ? Исключительно за простоту - нет никаких дополнительных сложных манипуляций с probWinnerA с использованием, например, функции SQRT или чего-либо еще. Ну и естественно потому что поправка улучшает результаты для больших значений probWinnerA (0.9 и более) - то есть улучшает соответствие между прогнозом перед битвой и мат. ожиданиями потерь в случае использования
float dice = (float)Random(20, 80) / 100.0 !!!
***
Ну и повторю, в чем мои исходные претензии к ванильному алгоритму - в том, что даже при многократном преимуществе в силах одной из сторон она может проиграть только из-за броска кости - что совершенно неправдоподобно, на мой взгляд. Не говоря уже о кривой асимметрии для атакующего и защищающегося героя - настолько большой, что никакой первый ход этого не покроет (тем более что лишь в каком-то проценте возможных случаев он вообще будет иметь какое-то значение - и то, только когда скорость самых быстрых существ у противников будет одинакова).
***
Да, и еще раз про функцию мю(N) - она загубит на корню любые благие начинания с теоретическими битвами. Если нужны хорошие теор. битвы - выпиливание мю(N) и небольшая корректировка fight value существ - неизбежно.