главная турниры статьи wiki карта сайта логин

Автор Тема: Формула раскачки для SX и других Survival-мультиплееров с апгрейдом лидера  (Прочитано 4924 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Max Brown

  • level 0
  • Сообщений: 18
  • http://Wgent.com
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.26 Opera 9.26
    • ICQ клиент - 6654627
    • Просмотр профиля
    • Web-agent
    • E-mail
  • Раса: Человек
Применимость:
Все сценарии мультиплейера без вербовки, но с возможностью раскачки лидера за счёт апгрейда наносимого им повреждения в обмен на золото. Например, Colosseum, Survival Extreme, Unwelcomed Guest и т.п.

Постановка задачи:
Сколько нужно на каждый купленный удар (Str) покупать пунктов повреждения при ударе (Att), чтобы максимизировать урон (Dmg), определяемый, как произведение Str на Att, если цена (P) 1 пункта Str в K раз выше цены 1 пункта Att?
(Например, для Survival eXtreme будет PStr=75, PAtt=25, K=75/25=3, а для Colloseum K=35/10=3.5 либо, в случае одновременной раскачки дальней и ближней атаки, K=65/16~=4)
Дополнительная задача:
Зависит ли нужная нам пропорция от количества выделенного на апгрейд золота (G) ?

Ограничения:
Рассматривается только апгрейд наносимого повреждения, без учёта покупки HP(aka life points), MovP, Weapons, Abilities, Resistances, Defences, TerrainTraining и т.п.
Невозможность покупки дробного числа ударов (например, нельзя купить "полтора удара") или атаки также не рассматривается. В связи с чем,
Рекомендация:
Округляйте число покупаемых ударов в бОльшую сторону - хотя бы уже потому, что при бОльшем количестве ударов результат сражения более предсказуем и меньше зависит от случайности.

Решение:
Сначала решим задачу для начальных условий Str0=0, Att0=0 при заданном количестве G. Запишем уравнения:
Dmg = Str*Att
G = G(Str)+G(Att)
G(Str) = Str*PStr
G(Att) = Att*PAtt
PAtt = P = const
PStr = K*PAtt = K*P, K=const

G = K*P*Str + P*Att,
Att = (G - K*P*Str)/P = G/P - K*Str
Обозначим G/P=N, тогда:

Dmg = Str*(N - K*Str) = N*Str - K*Str^2

Запишем Dmg как функцию от двух аргументов N и Str и попробуем её максимизировать
Dmg(N, Str) = N*Str-K*Str^2 = max
Str > 0
N*Str > K*Str^2

Путём несложных МАТАНовских выкладок (которые я затрудняюсь опубликовать на форуме из-за отсутствия необходимых мне символов, но могу, если кому-то сомневающемуся надо, выложить на своём сайте) получаем нетривиальное решение максимизации Dmg:

Dmg = max при N = 2*K*Str, откуда столь же просто выводим искомую пропорцию:

Att=K*Str, причём независимо от G. Просто, как и всё гениальное.

Понятно, что и в ненулевом случае Str0 > 0, Att0 > 0 в пределе нужно стремиться наращивать Str и Att в итоговой пропорции K.
Более точное решение для ненулевых Str0 и Att0, опять же в силу отсутствия на форуме нужных мат.символов, выложу у себя по запросу. Впрочем, сомневаюсь, что кому-либо придёт в голову проделывать столь сложные вычисления во время игры. Гораздо полезнее просто помнить, что атаку к страйкам надо иметь в пропорции 3 к 1 для SX, в пропорции 4 к 1 для Колизея.

С уважением -
Max Brown, он же mx
« Последнее редактирование: Ноябрь 19, 2009, 08:30:51 от Max Brown »

Demon

  • level 2
  • **
  • Сообщений: 200
  • black knight
  • OS:
  • Windows Vista Windows Vista
  • Browser:
  • Microsoft Internet Explorer 7.0 Microsoft Internet Explorer 7.0
    • Просмотр профиля
  • Раса: Человек
дааа, без бутылки не разберешься.. :)
все, что не убивает меня, делает меня сильнее..

Сахалин - вторые Сочи, солнце греет, но не очень.. )

Egron

  • level 1
  • *
  • Сообщений: 69
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Microsoft Internet Explorer 7.0 Microsoft Internet Explorer 7.0
    • ICQ клиент - 347268862
    • Просмотр профиля
    • E-mail
Всегда в SX играл с канкулятором))) только считалось оно раз в 100 легче и без подобных цепочек рассуждений.
Буквально - страйк стоит 35, урон 10. значит надо брать урон*3.5=страйки (собственно, финальный вывод автора.)

Не новое, не оригинальное, всем знакомым об этом рассказывал) но раз на форуме никто не выкладывал - +1
Не выспавшийся флудер - безумный гений!

Max Brown

  • level 0
  • Сообщений: 18
  • http://Wgent.com
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.26 Opera 9.26
    • ICQ клиент - 6654627
    • Просмотр профиля
    • Web-agent
    • E-mail
  • Раса: Человек
Всегда в SX играл с канкулятором))) только считалось оно раз в 100 легче и без подобных цепочек рассуждений.
Буквально - страйк стоит 35, урон 10. значит надо брать урон*3.5=страйки (собственно, финальный вывод автора.)
Цепочки рассуждений понадобились мне для доказательства того, что K=атака/страйки не зависит от количества золота G.
На самом деле, отсутствие этой зависимости вовсе не очевидно. На первый взгляд кажется, что когда голды мало, надо покупать атаку (она же "урон") и только её (и советы для Колизея в соседнем под-форуме тому яркий пример), а когда голды дофигищщо, у некоторых возникает соблазн закупить атаку и страйки в равном количестве. Типа того, что "площадь квадрата больше, чем площадь любого другого прямоугольника с той же суммой длин сторон".
А однажды лично я столкнулся в SX с кадром, у которого по жизни философия такая: "всегда покупай то, что дороже". Накупил он кучу страйков и HP, да так и ходил бесполезным балластом, пока не был съеден какими-то галимыми орками.
Так что доказательство не лишнее, да и вообще моск надо выносить почаще, а то он плесвинеет  :-)

Лучше подскажи, как корректнее учесть тот факт, что на самом деле атаки надо закупать ещё больше, чтобы увеличить шанс выноса врага с первого удара, т.е., до того, как он успеет ответить и снять с тебя сколько-то HP.
« Последнее редактирование: Ноябрь 20, 2009, 18:56:29 от Max Brown »

Egron

  • level 1
  • *
  • Сообщений: 69
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Microsoft Internet Explorer 7.0 Microsoft Internet Explorer 7.0
    • ICQ клиент - 347268862
    • Просмотр профиля
    • E-mail
Конкретно СХ - мобы проблемы собой не представляют и весь процесс закупки улучшений нужен только для уничтожения боссов, где, собственно, важен максимальный урон, а не мгновенный.

А если хочется усложнить формулы - в расчеты еще можно включить защиту врагов от повреждений и шанс попадания)
Не выспавшийся флудер - безумный гений!

Max Brown

  • level 0
  • Сообщений: 18
  • http://Wgent.com
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.26 Opera 9.26
    • ICQ клиент - 6654627
    • Просмотр профиля
    • Web-agent
    • E-mail
  • Раса: Человек
А если хочется усложнить формулы - в расчеты еще можно включить защиту врагов от повреждений и шанс попадания)
Фигтам: она сокращается.

Egron

  • level 1
  • *
  • Сообщений: 69
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Microsoft Internet Explorer 7.0 Microsoft Internet Explorer 7.0
    • ICQ клиент - 347268862
    • Просмотр профиля
    • E-mail
Куда сокращается? 0.о

Самая большая проблема, что это переменные велечины, а не константы, но сократиться оно точно не может))

Вообще, если немного порассуждать на эту тему.
Фактически резисты - это некий множитель от -1 до 1, на который умножается урон. Дефенс, он же уворот - от 0 и до 1, но только для страйков. Т.е. фактически теоретический стандартный урон по противнику равен не att*str, а ((1-res)*att)*(str*(1-def)). (20% резистов обеспечат 80% урона, так что 1-res, а не просто res, аналогично деф)
Подставляем, получаем:
(1-res)*att=K*(str*(1-def)),
att=K * (str*(1-def))/(1-res),
att=K*str * (1-def)/(1-res),
т.е. колличество урона по отношению к страйкам надо домножить на отношение шанса увернутьс к дефенсу)
В случае с фиксированным шансом попадания (маги), все становится несколько проще - def=0.3=const. Т.е. рассматриваем теоретический бой белого мага против лича - Att=k*str * 0.7/1.5. При этом k=4(колизей). Отсюда отпимальный эффект будет достигнут при соотношении примерно 2 к 1, а не 4 к 1 во время боя с личем.
Но, с учетом того, что резисты основных волн в колизее для мистики колеблются от -20% до 20%, то оптимальные отношения будут колебаться от 3.5 до  2.3. Собственно, можно сделать и более четкую статистику, но лень)) (эльфы -20% защита, люди +20% защита, орки и иже с ними (водяные, гномы), по 0%). Хотя, при 0% оптимально для магии будет отношение 2.8 к 1. Но никак не 4.
Второй пример из того, что реально расчитать заранее - 60% попадания для тех, кто обладает навыком снайпер. Тут, соответственно, при 0% защиты у противника оптимальным будет отношение 2.4 урона к 1 страйку. Однако резисты от магии встречаются гораздо реже, чем от колющего, из-за чего идет слишком сильная поправка на юнитов в приходящей волне.
« Последнее редактирование: Ноябрь 24, 2009, 09:43:48 от Egron »
Не выспавшийся флудер - безумный гений!

Max Brown

  • level 0
  • Сообщений: 18
  • http://Wgent.com
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.26 Opera 9.26
    • ICQ клиент - 6654627
    • Просмотр профиля
    • Web-agent
    • E-mail
  • Раса: Человек
Куда сокращается? 0.о
В /dev/null, вестимо!

Доказательство:
Перепишем значение Dmg с учётом Res и Def:
Dmg = ((1-Res)*Att)*(Str*(1-Def)) = Str*Att*(1-Res)*(1-Def)

Обратим внимание на то, что блок, в котором Res и Def никак не задействованы, от их учёта никак не изменится:
G = G(Str)+G(Att)
G(Str) = Str*PStr
G(Att) = Att*PAtt
PAtt = P = const
PStr = K*PAtt = K*P, K=const
G = K*P*Str + P*Att,
Att = (G - K*P*Str)/P = G/P - K*Str
Обозначим G/P=N, тогда:
Att = N - K*Str.
Ещё раз напомню, что в этом блоке, нацеленном на выражение Att исключительно через переменные Str и G (т.е., теперь уже через Str и N) величины Res и Def никак не участвуют, а значит - и не учитываются.

Они, правда, по-прежнему учитываются в формуле для Dmg:
Dmg = Str*Att*(1-Res)*(1-Def) = Str*(N - K*Str) * (1-Res)*(1-Def) = ( N*Str - K*Str^2 ) * (1-Res)*(1-Def) = (1-Res)*(1-Def)*N*Str - (1-Res)*(1-Def)*K*Str^2

Теперь найдём точки экстремума Dmg как функции от двух аргументов N и Str
dDmg(N, Str)/dN=(1-Res)*(1-Def)*Str != 0
dDmg(N, Str)/dStr = (1-Res)*(1-Def)*N - 2*(1-Res)*(1-Def)*K*Str
В точке экстремума, как известно, первая производная либо не определена (не интересует), либо равна нулю:
(1-Res)*(1-Def)*N - 2*(1-Res)*(1-Def)*K*Str = 0
(1-Res)*(1-Def)*N = 2*(1-Res)*(1-Def)*K*Str
N = 2*(1-Res)*(1-Def)*K*Str/( (1-Res)*(1-Def) ), где и происходит предсказанное мной сокращение множителей с Res и Def.

Итого, в точке максимума (максимальность, а не минимальность которого, при желании, докажете самостоятельно),
N = 2*K*Str
Подставляем значение Att = N - K*Str => N = Att+K*Str, получаем:
Att+K*Str = 2*K*Str,
Att = 2*K*Str - K*Str, т.е.,

Att = K*Str != K*(Str*(1-Def))/(1-Res), q.e.d.

Остальную часть месага оппонента оставляю без комментариев, поскольку основанное на доказанной ошибке - заведомо ошибочно.
« Последнее редактирование: Декабрь 02, 2009, 05:14:03 от Max Brown »

Egron

  • level 1
  • *
  • Сообщений: 69
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Microsoft Internet Explorer 7.0 Microsoft Internet Explorer 7.0
    • ICQ клиент - 347268862
    • Просмотр профиля
    • E-mail
Ну да, отвечу.

Ты доказываешь другое от того, что говорю я)
Ну да, идеальное отношение урона именно такое. Я этого и не оспаривал. Вот его и надо поддерживать с учетом изменения кол-ва страйков и урона)) В противном же случае, на лицо противоречие самому себе, ибо фактическое отношение урона к страйком будет совершенно другим. В этом даже на практике можно убедиться))

+Еще осталось включить временные модификаторы, т.е. -25...+25 за счите ночи/дня
Не выспавшийся флудер - безумный гений!

Max Brown

  • level 0
  • Сообщений: 18
  • http://Wgent.com
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.26 Opera 9.26
    • ICQ клиент - 6654627
    • Просмотр профиля
    • Web-agent
    • E-mail
  • Раса: Человек
Ты доказываешь другое от того, что говорю я)
Ну да, идеальное отношение урона именно такое. Я этого и не оспаривал. Вот его и надо поддерживать с учетом изменения кол-ва страйков и урона)) В противном же случае, на лицо противоречие самому себе, ибо фактическое отношение урона к страйком будет совершенно другим. В этом даже на практике можно убедиться))
Хватит голословных утверждений. Я тебе доказываю формулами и уравнениями - напряги моск и сделай то же самое. Возьми любое ненулевое значение Res и Def, посчитай и лично убедись (на практике, да-да), что идеальное соотношение Att/Str = PStr/PAtt всё равно остаётся идеальным.
А затем удали свой пост от 24 Ноября 2009, 01:20:38, чтобы не сбивать читателей с толку фразами типа "отпимальный эффект будет достигнут при соотношении примерно 2 к 1, а не 4 к 1 во время боя с личем".

+Еще осталось включить временные модификаторы, т.е. -25...+25 за счите ночи/дня
Ты не поверишь  :-)
« Последнее редактирование: Декабрь 04, 2009, 18:32:50 от Max Brown »