Ключевые слова: DPS (DamagePerSecond); Wolfram Mathematica; дискретность и непрерывность; матанализ; заработок игровой валюты в компьютерных играх; паки ArcheAge.

Введение


Всем знакомы однотипные вопросы в школьных задачах по математике про мотоциклиста выехавшего из пункта А в пункт Б, которые вызывают скуку, отвращение, или просто безразличие. Вопросы, которые вызывают, все что угодно кроме интереса к изучению математики. Очевидно что, гораздо больший интерес и больше эмоций вызывают вопросы типа:
1) «как он смог меня одолеть в игре, если у моего персонажа и здоровья больше и DPS (Damage Per Second) выше?!»
2) «как быстрее всего заработать голду (игровую валюту), чтобы сделать своего персонажа сильнее?!»
На самом деле эти игровые вопросы очень похожи на классические школьные задачи. Разница лишь в том, что есть заинтересованность в получении ответа на игровые вопросы, есть цель, ради которой хочется решить эти задачи. К сожалению, очень многие преподаватели в школах и вузах совершенно не умеют заинтересовать обучаемых в получении конкретной информации, новом методе решений математических задач, доведении их до ответа. Но раз уж игры вызывают этот самый интерес, то грех не воспользоваться заинтересованностью в игре, для пробуждения интереса к математическому анализу.
Вот две задачи, которые являются лишь переформулированными вышеупомянутыми вопросами.
1) Петя и Коля решили помочь дедушке наполнить две одинаковые пустые бочки водой из колодца. Петя таскал воду в 5-и литровом ведре и на один заход к колодцу и обратно к бочке тратил 3 минуты, а Коля в 8-и литровом и на один заход тратил 5 минут. Каждый заполнял свою бочку. Кто из мальчиков быстрее заполнит свою бочку, если а) объём бочки 60 литров? б) если объем бочки 56 литров? (начали мальчики одновременно)
2) Два купца Семён и Добрыня покупают у крестьян по 10 пудов мёда за 5 золотых и везут его на продажу в соседние города. Добрыня везёт в ближайший город и продаёт там за 8 золотых, весь путь до города и обратно у него занимает 2 дня. Семён же, желающий продавать своё мёд как можно дороже, не ленится и везёт его ещё дальше, тратя на весь путь 3 дня, и продавая мёд в другом городе за 10 золотых. Кто же из купцов заработает больше за 360 дней непрерывной работы? Как изменится ситуация, если оба купца вынудят крестьян снизить цену на мёд до 3 золотых?
Разбор этих задач, описанный ниже, поможет ответить на животрепещущие вопросы игры ArcheAge (и других) про «паки» и DPS. А также позволит задуматься над такими понятиями как «дискретность» и «непрерывность», а так же над таким, казалось бы, очевидным вопросом как «прибыль».


Парадокс ДПС


Для того чтобы было легче разобраться с задачей про бочку, очень удобно нарисовать всё что происходит на графике. Красным цветом обозначим Петю, а зелёным Колю. Получим две лесенки. Бочка Коли и бочка Пети заполняются дискретно, длина ступенек равна времени похода до колодца и обратно к бочке, а высота равна количеству принесенной воды в литрах. На большей части полученного графика красная лесенка выше зелёной, но вот на некоторых участках выше зелёная.

Чтобы наполнить бочку объёмом 60 литров, используя 5 литровое ведро, нужно 12 раз сбегать с этим ведром до колодца. В итоге Петя потратит 3минуты*12раз=36минут. Коле же, с его 8 литровым ведром, нужно 60/8=7.5раз. Получаем нецелое число. За 7 походов Коля принесёт только 7*8=56 литров, что меньше чем нужно. А если ещё раз Коля пойдет за водой, то принесет уже 64 литра, что даже больше чем надо. В итоге Коле потребуется 8раз*5минут=40минут, то есть Петя раньше наполнит свою бочку.
Ситуация меняется если надо было принести 56 литров. Для этого Коле нужно сбегать 56/8=7 раз, и займёт это 35 минут. Пете же потребуется 56/5=11.2раза, но так как важно именно целое число, то на самом деле Пете потребуется сходить 12 раз и займёт это 12*3=36минут. В данном случае Петя наполнит свою бочку позже Коли.
Получается вот такая странная ситуация, что ответ на вопрос кто же быстрее заполнит бочку, зависит не только от мальчиков, но и от размеров бочки. Причём если посмотреть на график, то мест где графики пересекаются довольно много. Более того, можно даже сделать бочку Пети 55.9 литра, то есть меньше чем у Коли, а он всё равно заполнит её позже. Ещё удивительнее этот факт становится, если рассчитать среднюю скорость заполнения бочки Петей и Колей. У Пети средняя скорость равна 5/3=1.666 литра/минуту, а у Коли 8/5=1.600 литра/минуту. Коля может даже начать позже на полминуты, и всё равно Петя будет вторым.
То есть у Пети и скорость заполнения больше, и бочка меньше, и начал он раньше, а он всё равно заполнит свою бочку позже, чем Коля заполнит свою.
Вот такой парадоксальный результат получается именно из-за того, что процесс заполнения бочки носит дискретный характер.
Если же рассматривать случай когда два противника в игре наносят друг другу удары с разной силой и разной скоростью, то эта ситуация будет аналогична бочкам и ведрам, которую мы уже рассмотрели. И как было показано выше, не всегда стоит полагаться в оценке силы вас и вашего противника на так называемую DPS, то есть на среднюю скорость нанесения повреждений.
Совсем ли DPS неприменима? Не совсем. В некоторых случаях она вполне адекватно описывает ситуацию.
Для каждой лесенки, можно построить две параллельные прямые, которые будут проходить через верхние угловые точки и через нижние.

Та лестница, у которой DPS выше, после какого-то момента всегда будет выше второй. А этот момент можно найти как пересечение нижней прямой лестницы большего DPS, с верхней прямой лестницы меньшего DPS. Вот формулы для этих двух прямых.
fDPSL1(t)=(DPH1/Period1)*(t-Period1);
fDPSH2(t)=(DPH2/Period2)*t;

DPH1 и DPH2 это сила удара (объём ведра) за период Period1 и Period2 соответственно. DPH1/Period1=DPS1. А пересечение этих прямых происходит в момент
T = Period1/(1-DPS2/DPS1)
Из этой формулы видно, что влияние дискретности ситуации, и возможность возникновения связанных с дискретностью парадоксов, зависит от двух факторов. Первый фактор, это примерное равенство DPS обоих противников. В таком случае, знаменатель обращается в нуль, и время прекращения влияния дискретности ситуации стремится к бесконечности. Второй фактор, это период ударов того, у кого DPS выше. Чем выше частота ударов, тем меньше период, а значит и время прекращения влияния дискретности будет меньше.
Ещё из формулы для верхней прямой
fDPSH2(t)=(DPH2/Period2)*t
видно, что это просто формула графика урона от времени при фиксированном DPS.
fDPSH2(t)=DPS2*t

Если у противников DPS одинаков, то в лучшем положении окажется тот, у кого МЕНЬШЕ и сила и период ударов. В предельном случае, если период ударов стремится к нулю, то лесенка превратится в «непрерывную» прямую вида fDPSH(t)=DPS*t. И данная прямая является наиболее выгодным вариантом при фиксированной PDS.
Таким образом, если есть выбор увеличить на N% силу удара или увеличить на те же N% частоту удара, то выгоднее увеличивать частоту, хотя в обоих этих случаях DPS увеличится одинаково. Однако, как показывает практика, многие в силу каких-то интуитивных заблуждений предпочитают увеличивать силу удара.

Ловушка жадности


Задача про купцов решается аналогичным образом. Семён за одну поездку тратит 5 золотых, получает 10, итого прибыль 5 золотых за 3 дня. Добрыня за 2 дня получает 3 золотых. За 360 дней Семён сделает 120 поездок и заработает 600золотых. Добрыня же заработает 360/2*3=540 золотых. В итоге Семён правильно делает, что возит дальше, он заработает больше Добрыни. Если же Семён и Добрыня договорятся, и найдут способ заставить крестьян продавать им мёд по 3 золотых. То тогда Семён за одну поездку получит уже 7 золотых, а Добрыня 5. За 360 дней Семён получит 360/3*7=840, а Добрыня 360/2*5=900. То есть Добрыня за 360 дней заработает больше Семёна, несмотря на то, что продавать будет свой товар дешевле.
В экономике есть такое понятие как рентабельность — отношение прибыли от реализации к себестоимости реализованной продукции.
Так вот, если рассматривать отношение прибыли к затратам, то у Семёна рентабельность может показаться выше. За одну поездку потратив 5 золотых, он получает 5золотых прибыли. Добрыня же за 5 золотых получает лишь 3 золотых прибыли. Но с таким подходом, как можно заметить, совершенно не учитывается время, а его по хорошему нужно вставлять в себестоимость как зарплату Семену и Добрыни за перевозку. То есть помимо тех денег, что они вкладывают, нужно учитывать и то время, что они тратят. И когда идёт речь о получении прибыли, о способе заработка, то нужно обязательно принимать во внимание не только саму прибыль, полученную в результате каких-то действий, но и затраченное на них время.
Что бы стало яснее, как же так получается, что продавать по более низкой цене бывает выгодно, снова нарисуем график. На графике показана зависимость получаемой прибыли в единицу времени от себестоимости товара для 3 разных случаев. В каждом из случаев товар и его себестоимость будут считаться одинаковыми, а вот цена продажи и время на перевозку будут различны. Графики строятся по простой формуле
F[Себестоимость]=(ЦенаПродажи — Себестоимость)/Время перевозки
Примеры времени и цен продажи взяты из игры ArcheAge. Время измеряется в минутах, а цены в «голде».
В первом случае ЦенаПродажи =8г, Время =6минут, во втором ЦенаПродажи =11г, Время = 10минут, и в третьем случае ЦенаПродажи =13г, Время =16минут
В сети можно найти таблицу цен продажи всех возможных грузов в игре ArcheAge, например тут
Но, тем не менее, в этих таблицах не указаны расстояния до мест продажи, что конечно является большим недостатком.
Реальные же затраты на сырье, которое необходимо для изготовления товаров, в игре достаточно сильно варьируются, в силу колебаний игрового рынка. Цены, вообще говоря, выставляются игроками, в том числе и так называемые «очки работы», которые необходимы для производства товара, и которые тоже можно покупать на «рынке». Себестоимость в данном примере приблизительно 7г, но может быть и значительно дороже.

Пониманию некоторой задачи, процесса, очень часто помогает рассмотрение крайних случаев. Если себестоимость товара равно нулю, то вся прибыль на единицу времени определяется временем, которое будет затрачено на перевозку. В общем случае все 3 прямые могут и не пересекаться, но в данном конкретном случае, при низкой себестоимости выгоднее возить в ближайшее место продажи. Если же себестоимость высокая, то она может быть выше чем цена продажи в ближайших точках, а это значит, что вы будете работать с отрицательной рентабельностью, то есть тратить больше, чем получаете. И тогда единственной возможностью заработать хоть сколько-то будет продажа в самом удалённом месте, где цена продажи выше себестоимости. Но при слишком высокой себестоимости, даже там продавать становится не выгодно. Так же существует и промежуточный вариант, когда выгоднее всего возить на среднее расстояние.
Стоит отметить, что эффекты, связанные с «дискретностью» получения прибыли, тут тоже естественно присутствуют. Принцип разбора этих эффектов, аналогичен тому, что был рассмотрен выше.
Когда такое пытаешься рассказать игрокам, очень часто получаешь в ответ «Лол?! Я знаю, что нужно делать! Чё ты меня учишь?!». Люди упорно стремятся продать свой товар как можно дороже, и совершенно не обращают внимания на то, сколько времени они на это тратят. Время же можно выражать в валюте и использовать уже эту «цену времени» в себестоимости, и тогда всё становится гораздо понятнее. Но очень часто встречаются те, кто ради 1 голды готовы везти ещё дальше, тратя время с гораздо меньшей эффективностью. В итоге пожадничав, они больше теряют.
И что самое интересное, даже те, кто знают об этих тонкостях, очень часто поддаются внутреннему сиюминутному соблазну, слепой ошибочной интуиции, и коварному и опасному чувству алчности, и всё равно прут туда, где объективно не выгодно продавать, но зато где они увидят, что цена продажи их товара выше. Психофизиология — против неё даже матан порой не работает. Зато эту особенности человеческого восприятия любят использовать в своих целях все кому не лень, паразитируя на жадинах.

Wolfram Mathematica


Wolfram Mathematica это черезвычайно мощный инструмент для решения разнообразных задач любой сложности. Однако не стоит думать, что раз Mathematica столько всего может, то она чрезвычайно сложна в использовании. На самом деле, я её очень часто использую просто как очень удобный, но и очень продвинутый калькулятор. При этом нет необходимости писать код алгоритмов. Чтобы нарисовать графики, или быстро сделать интерактивное окно, с полями ввода, ползунками и рисовалкой функций в реальном времени, то хватит несколько простых команд, которые очень подробно, на куче примерах описаны во встроенном хелпе.
Вот пример кода для отрисовки графиков прибыль/себестоимость.
Код в Mathematica
a = {{6, 8}, {10, 11}, {16, 13}};
f[i_, x_] := (a[[i]][[2]] - x)/a[[i]][[1]];
Plot[{f[1, x], f[2, x], f[3, x]}, {x, 0, 13}, 
 PlotStyle -> {Red, Orange, Green}, PlotRange -> All]


И пример кода для вот такого удобного окошка для отрисовки дискретных процессов. Можно менять параметры и сразу сравнивать полученные результаты на графике.

Код в Mathematica
TotalD[DPH_, CD_, tDelay_, tDuration_] := 
  Table[{n, DPH*(Quotient[n - tDelay, CD])}, {n, 0, tDuration, 
    tDuration/1000}];
(*Дискретный график наносимых повереждений участником боя через единицу времени*)(*Quotient даёт нам целое число количества ударов нанесеннного за некратное перезарядке время*)
DiffD[DPH1_, CD1_, tDelay1_, DPH2_, CD2_, tDelay2_, tDuration_] := 
  Table[{n, 
    DPH2*(Quotient[n - tDelay2, CD2]) - 
     DPH1*(Quotient[n - tDelay1, CD1])}, {n, 0, tDuration, 
    tDuration/
     1000}];(*Разница количества повреждений нанесенных двумя участинками*)
fDPSH[t_, DPH_, CD_, 
  tDelay_] := (DPH/CD)*(t - 
    tDelay);(*fDPSH и fDPSH это прямые которые "ограничевают" граффик наносимых повреждений. Можно сказать что это оценки сверху и снизу*)
fDPSL[t_, DPH_, CD_, tDelay_] := (DPH/CD)*(t - CD - tDelay);

Manipulate[
 Column[{
   Row[{
     Row[{"DPS1=", Dynamic[N[DPH1/CD1]]}, Frame -> True, 
      FrameStyle -> {Red, Red}],
     Row[{Dynamic[
        If[DPH1/CD1 == DPH2/CD2, " EQUAL ", 
         If[DPH1/CD1 > DPH2/CD2, " MORE THAN ", "LESS THAN "]]]}],
     Row[{"DPS2=", Dynamic[N[DPH2/CD2]]}, Frame -> True, 
      FrameStyle -> {Green, Green}]
     }],
   Show[{
     Plot[
      {fDPSL[t, DPH1, CD1, Delay1],
       fDPSH[t, DPH1, CD1, Delay1],
       fDPSL[t, DPH2, CD2, Delay2],
       fDPSH[t, DPH2, CD2, Delay2]},
      {t, 0, Duration}, 
      PlotStyle -> {Darker[Orange], Darker[Orange], Darker[Blue], 
        Darker[Blue], PlotRange -> All}
      ],
     ListLinePlot[
      {TotalD[DPH1, CD1, Delay1, Duration],
       TotalD[DPH2, CD2, Delay2, Duration],
       DiffD[DPH1, CD1, Delay1, DPH2, CD2, Delay2, Duration]},
      PlotStyle -> {Red, Green, Gray}, PlotRange -> All]
     }, PlotRange -> All]
   }],
 {{DPH1, 10, "Value1"}, 0, 100, Appearance -> "Open"},
 {{CD1, 0.8, "Period1"}, 0, 20, Appearance -> "Open"},
 {{Delay1, 0}, -2, 2, Appearance -> "Open"},
 {{DPH2, 8, "Value2"}, 0, 100, Appearance -> "Open"},
 {{CD2, 0.7, "Period1"}, 0, 20, Appearance -> "Open"},
 {{Delay2, 0}, -2, 2, Appearance -> "Open"},
 {{Duration, 10}, 2, 1000, Appearance -> "Open"},
 ControlPlacement -> {Right, Right, Right, Right, Right, Right, Right,
    Right}
 ]


Нужно просто скопировать код в пустое окно Wolfram Mathematica и нажать Shift+Enter. Результат вы получите в том же окне.

Выводы


Интернет не всезнающ. Гайды, рецепты, методички на все случаи жизни в нём не найти. В каждом конкретном случае всё равно доработка, модернизация общеизвестных методов позволит достичь лучших результатов. Но для этого требуются анализировать ситуацию, и на основе известных данных синтезировать новые методы. Но такие навыки сами собой не возникнут, им нужно обучаться, тренировать. А это порой бывает делать скучно и лениво. Выхода два: либо пытаться процесс обучения в школе или в вузе, который зачастую кажется бессмысленным и скучным, делать осознанным, осмысленным и интересным, либо, занимаясь чем-то интересным и увлекательным, находить в этом интересные моменты, анализировать их и пытаться решить поставленные в игре задачи, как полноценные задачи по математике.
Если препод вам попался скучный и безынициативный, то это не повод не заниматься МатАнализом. В конце концов, оправдываясь плохим преподом, вы свою жизнь интереснее, а себя успешнее не сделаете.
Поделиться с друзьями
-->

Комментарии (24)


  1. Nakilon
    10.05.2016 12:15
    +3

    Про лесенку DPS — опытные игроки Quake знают, что эффективней всего наносить дамаг чем-то скорострельным, чтобы когда у противника останется определенное количество HP (предсказываешь его на догадках о том, сколько его у противника было заранее, и сколько раз ты по нему успешно попал) в соответствии с позицией, твоим aim-ом и его dodge-скиллом ловишь момент переключения на оружие, которое стреляет реже, но сильней, например, Rocket Launcher.


  1. brainick
    10.05.2016 13:15
    +1

    >>Таким образом, если есть выбор увеличить на N% силу удара или увеличить на те же N% частоту удара, то выгоднее увеличивать частоту, хотя в обоих этих случаях DPS увеличится одинаково.<<
    О да, разогнанный разбойник с двумя кинжалами в первой DA и разогнанный лучник во второй были чрезвычайно эффективны. Собственно только имея в команде такого лучника мне удалось пройти Каменного Духа на найтмаре. Кто играл, тот поймёт.


    1. Oxoron
      13.05.2016 10:47

      Тут тоже вопрос. Положим, у вас есть перс: 100 базового урона, 10 ударов в секунду. Вы его разогнали до 100 урона, 100 ударов в секунду (+0% к урону, +900% к скорости).
      Есть выбор: добавить 100% к урону (1 вариант), или 100% к скорости (2 вариант).
      1 вариант: 200*100 = 20,000 DPS.
      2 вариант: 100*110 = 11,000 DPS.

      Выгоднее оказалось апнуть урон. Вывод: совсем уж оголтело вкладываться в одну только скорость не стоит. Относительная полезность со временем падает.

      Кроме того, практически всегда есть «но». Например, блок. В примере выше, при блоке 150 нет смысла качать скорость до урона в 151 (пример в вакууме, я помню про проникающий урон в DA). Другой пример — фиксированные шипы\контратака (Axe в Dota). Ударишь 10 раз — получишь 750 ответки, ударишь 5 раз — в ответ получишь лишь 375. Иногда же есть «шанс оглушить на секунду при атаке». Если этот шанс 10%, при наличии 10 ударов в секунду мы можем держать оппонента в пермастане, и скорость решает. В PoE таскал с собой огнеспеллы — чтоб поджигать боссов и сбивать им регенерацию. Плюс, ниже неоднократно упоминали, что игрок с низким показателем атаки будет стараться разрывать дистанцию\инвизить\укрываться во время «перезарядки».

      В итоге прав не тот, у кого больше\правильнее DPS, а тот, кто грамотнее воспользовался моментом: напал сзади\неожиданно, дизейблы\хилы\элики заготовил, в укрытие метнулся, переждал скилл-шторм противника.


  1. Ogra
    10.05.2016 13:56

    многие в силу каких-то интуитивных заблуждений предпочитают увеличивать силу удара.


    Смотрите, у вас цикл идет (задержка — удар)(задержка — удар), а полный цикл на самом деле идет (инициализация — удар — завершение). При малом времени инициализации (каста), прокачивать силу удара выгодно — соперник умрет после одной плюхи. Как писал Толкиен: «Если первый удар смертельный, то второго не надо».


    1. Ingran85
      10.05.2016 14:24

      То о чём вы говорите, это эффекты квантования, дискретизации. Цикл же который вы описываете, не отличается принципиально от удар-задержака=задержка-удар, время инициализации можно отнести к задержке. Что же касается убийства с одного удара, то такие вещи избегаются разработчиками, либо… либо игра начинает акцентировать внимание на совершенно иной тактике боя — как первым ударить.
      Эфекты дискретизации расчитать довольно сложно, и я показал на примерах что в разных ситуациях может в выйграше быть и тот кто с большим уроном но меньшей скоростью, и тот кто с меньшей скоростью но большим уроном. Смысл же, в том, что вероятность возникновения удачной ситуации для того у кого скорость меньше а урон больше, в целом НИЖЕ. А сама эта вероятность зависит от массы неподконтрольных вам факторов.
      Говоря проще, одна из основных идей статьи в том, что существуют ситуации в которых может быть выгоднее как сила так и скорость, но вероятность возникнования ситуации где скорость будет выгоднее ВЫШЕ.


      1. Ogra
        10.05.2016 14:31

        время инициализации можно отнести к задержке

        Нельзя, в том то и дело. Возьмем Quake 3 — рейлган наносит 100 единиц урона мгновенно, а потом восстанавливается 1.5 секунды (жалких 66dps), в то время как lightning gun наносит 8 единиц урона, восстанавливаясь 1/20 секунды (160dps); мало того, что у шафта дпс больше, так у него еще и высокая скорость стрельбы.
        Но не дай бог вам имея 100 хп попасться на прицел к сопернику с рэйлом — он убьет вас мгновенно, и будет восстанавливаться, пока вы воскресаете.


        1. Ogra
          10.05.2016 15:11
          +2

          Я тут даже очень наглядное видео нашел, которое хорошо отвечает на вопрос «как он смог меня одолеть в игре, если у моего персонажа и здоровья больше и DPS (Damage Per Second) выше?!»

          AWP

          Напомню, что у AWP один из самых низких DPS в игре — 79.


      1. mayorovp
        10.05.2016 14:49
        +1

        Не все так просто. Если взять второй крайний случай, и положить время перед первым ударом равным нолю — то на вашей картинке каждая из линий уедет вверх на величину 1 удара. И тогда уже зеленая линия окажется целиком над красной.

        Таким образом, если задержка после удара больше чем задержка до — то силу удара качать выгоднее. Если же задержка до удара больше задержки после — то выгоднее качать скорость.


        1. Ingran85
          10.05.2016 15:26

          Согласен, не всё так просто.
          Если сдвинуть зелёную влево на величину задержки, то тогда формально его DPS станет уже выше. И тогда это уже не будет случай равенства DPSов. А вот если и у второго поднять DPS то получим ту же самую каритнку что была у меня вначале.


          1. Ogra
            10.05.2016 15:38
            +1

            формально его DPS станет уже выше


            Формально — нет. Тот же RPM, тот же урон. И если брать бесконечный отрезок времени, то DPS на этом отрезке будет одинаковым.
            Но вот фактически, мы имеем дело не с бесконечным, а весьма коротким отрезком времени, на котором DPS различается сильно. Если брать рельсу из Quake 3, то ее формальный DPS — 66.
            Фактический же сложнее: на 1 выстрел он равен бесконечности (100 dmg / 0 sec), на 2 выстрела — 133 (200 dmg / 1.5 sec), на 3 выстрела — 100 (300 dmg / 2 sec), и так далее, асимптотически приближаясь к формальному значению в 66 единиц.


            1. Ingran85
              10.05.2016 17:19

              В дискретном случае впринципе становится не совсем корректно использовать какое бы то ни было отношение. Если подходить формально (не вдаваясь в подробности), и пытаться получить DPS как отношение сумарного урона за время t к этому самому времени, то DPS уже не будет являться константой, и вобще говоря даже непрерывной функцией не будет.
              Количество полученных повреждений =(n+1)/n*dmg Собственно n это количество временных промежутков, а n+1 кол-во ударов. При большом n всё это стремится к 1. Но вот рассматривать внутри врменных промежутков уже нет смысла.А в точках на краях промежутков у функции разрыв. И сравнивать такие точки (что внутри, что на разрывах «слева») на мой взгляд бессмысленно.
              Кроме того, как-то более физично чтобы функция зависимости урона от времени в нуле была ноль. В противном случае надо менять саму постановку задачи и общую модель.
              Однако несмотря на то что сравнение DPS в некоторых местах бессмысленно, общее количество нанесённых повреждений сравнивать можно в любой момент. Но это сравнение довольно затруднительно. И зависит как я уже говорил от многих факторов. Тот случай который был рассмотрен в статье, один из самых простых, поэтому я его и привёл для примера.
              Но копаться в таких тонкостях причуд дискретных ситуаций безусловно интересно. Модель можно и усложнить на случай задержки, Там наверняка тоже что-то вылезет, инетересное и полезное.


              1. mayorovp
                10.05.2016 17:30

                Ну почему же? DPS как среднее значение за период — вполне себе имеющая смысл величина, независящая от времени.
                Вы же сами приводили графики — начиная с некоторого уровня здоровья тот, кто имеет больше DPS гарантированно побеждает. DPS становится важным параметром, к примеру, при походе на босса.


                1. Ingran85
                  10.05.2016 17:45

                  Именно, что на «макро» уровне дейстивтельно DPS вполне себе адекватно всё описывает, а вот на «микро» уровне нет. Об этом то я и говорил в статье. Что существует та самая точка, начиная с которой DPS вполне себе становится физичным… осмысленным и удоволетворительно описывает ситуацию.

                  Но вот что касается влияние выбора точки отсчёта, а так же что будет если лесенку сгладить, чтобы избежать очевидных разрывов, сделать её более удобоваримой. Я тут подумаю, может что добавлю в статью, если не получится слишком запутано. А то как показывает практика, такое не читают.


      1. Mii
        10.05.2016 17:24

        В целом в пвп есть факторы, не зависящие от одной из сторон, во время которых откатываются медленные плюхи, ну, и так далее…


    1. DrZlodberg
      10.05.2016 14:33
      +1

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


    1. Vindicar
      10.05.2016 23:28
      +1

      Это довольно наглядно демонстрируется в FTL: Faster Than Light. По умолчанию оба корабля начинают бой с разряженными орудиями, и тот, кто первым зарядится — имеет шанс выбить противнику что-нибудь важное до того как тот выстрелит. С этой точки зрения, орудия с долгой перезарядкой рискованны — пока заряжаешься, поймаешь одно-два-три попадания.
      Однако модуль Weapons Preigniter позволяет начать бой с заряженными орудиями (при том же времени перезарядки), и тут уже орудия с высоким разовым уроном работают хорошо — ты гарантированно выстрелишь первым и, как минимум, понизишь атакующий потенциал противника до приемлемого (чтобы щиты держали) уровня.

      Вообще в какой-то статье встречал похожий пример, но там он применялся к армиям в RTS — орда мелких юнитов vs один супер-юнит. При равном DPS, орду можно легко распределять по нескольким целям, но при этом она наверняка понесёт потери, которые ослабят её потенциал, а вот супер-юнит и на последнем издыхании обычно столь же опасен, но может легко оказаться в ситуации когда каждый выстрел — оверкилл, и ограничение скорости стрельбы становится критичным.


  1. almkhaj
    10.05.2016 14:33
    +1

    Спасибо, познавательно.
    Т.к. это продолжение цикла статей, не плохо бы указать ссылки на предыдущие


    1. Ingran85
      10.05.2016 18:22

      У меня кроме этого цикла больше ничего тут нет. Поэтому все статьи можно просто посмотреть в моих публикациях. (в самом верху страницы, ну или в моём профиле).


  1. Amareis
    10.05.2016 14:34

    В общем-то важность скорострельности становится ещё очевидней, если вспомнить что не все удары могут попадать в цель (в случае отсутствия автотаргетинга). Есть ещё подобная хитрость с разбросом урона — в общем случае выгодней взять оружие с более предсказуемым уроном, то есть между мечом и 4-6 и дубиной 3-7 меч предпочтительней потому что проще сказать сколько осталось нанести ударов.


    1. mayorovp
      10.05.2016 14:54

      Иногда предсказуемость не является достоинством. Если игра дает много попыток — то оружие с высоких разбросом урона может оказаться полезнее. Недаром же говорят, что самое мощное заклинание главного героя — это save/load.


      1. ITurchenko
        10.05.2016 18:24

        … а самое трушное прохождение — с permadeath.


    1. Oxoron
      13.05.2016 10:11

      Вообще говоря, иногда еще броня есть, или шанс заблокировать 6 единиц дамага. Тут дубина будет эффективнее.


  1. Yogdatoth
    10.05.2016 18:24

    Описанный в статье приоритет скорости над уроном справедлив не всегда. Всё зависит от игрового мира. В EVE Online, например, вы начинаете бой с заряженными пушками, и имея большой урон при низкой скорости перезарядки у вас преимущество, особенно на стартовом этапе боя.
    Пусть ваша альфа (разовый урон) — 100 едениц, а время перезарадки — 10 секунд. Думаете ваш ДПС = 10? Не-ет.
    Первый удар (100 урона) вы наносите за время, приближенно равное нулю. Ваш дпс = 100/0 = бесконечность.
    Второй удар (суммарно урона 100+100) вы наносите спустя 10 секунд. ДПС = 200/10 = 20
    Третий удар (100+100+100) будет нанесен через 20 секунд. ДПС = 300/20 = 15
    Разумеется, далее дпс падает, и на продолжительном промежутке времени стремится к 10-ти. Но если ваш персонаж «заточен» под альфу, сколько ударов переживет противник?


    1. mayorovp
      10.05.2016 19:22

      Уже обсуждалось выше: https://habrahabr.ru/post/283208/#comment_8889104