Как я могу придумать простое убывающее уравнение возврата?


25

Существуют формулы для убывающего уравнения возврата; однако, они обычно включают экспоненциальный. Какие есть еще способы придумать такое уравнение? Возьмем, к примеру, следующий контрольный пример: одна ферма производит 10 продуктов питания, на каждые 10 произведенных ферм производительность снижается на 5%.


1
Это могло бы помочь, если бы вы сказали нам, почему вы хотите избежать экспонент. В частности, выражения вида x ^ y ( x возведены в y-ю степень) тоже отсутствуют (поскольку компьютеры обычно вычисляют те, которые используют экспоненты, по крайней мере, для нецелого y )?
Илмари Каронен

7
«На каждые десять произведенных ферм норма производства падает на 5%». Это по существу экспоненциально: у = 0,9 ^ (этаж (х / 10)). Как @IlmariKaronen спрашивает, что не так с экспонентой?
wchargin

1. Трудно объяснить не-разработчикам (и некоторые разработчики имеют проблемы с экспоненциальной) 2. У меня сложилось впечатление, что это дорого
Extrakun

2
нет ничего неэффективного в использовании экспоненциальных уравнений. Я думаю, что вы думаете о алгоритмах, в которых количество шагов увеличивается в геометрической прогрессии по сравнению с размером входных данных (например, размер массива, который вы хотите отсортировать). Это называется «O», например, вы можете сказать, что конкретный алгоритм (или функция) выполняет O (n) шагов для запуска. Алгоритм, в котором шаги увеличиваются в геометрической прогрессии, может быть описан как, например, выполнение O (n в квадрате) шагов. Это полностью отличается от наличия одного уравнения, в котором есть экспоненциальный член.
Макс Уильямс

1
Я думаю, что Extrakun может подумать о таком «дорогом» виде: stackoverflow.com/questions/2940367/… . Чтобы повторить то, что говорят все остальные: это не дорого. Если вас не устраивают экспоненты, поищите доступные объяснения их (возможно, betterexplained.com/articles/… ), не избегайте их.
Кристина

Ответы:


30

Для формулировки уравнения убывающей доходности я бы сразу подумал дроби.

График 1 / F Это график y=1/F

yбудет становиться все меньше и меньше F. Это даст вам устойчивый спад, который никогда не достигнет 0. Из этого вы можете преобразовать его, чтобы получить вид кривой, который вы хотите. Использование чисел> 0 всегда даст положительный результат, который никогда не будет 0.

Честно говоря, я бы порекомендовал пойти в WolframAlpha и вставить некоторые уравнения и посмотреть на графики, которые он рисует, чтобы увидеть, дает ли он желаемую кривую. Помимо этого, прочитайте линейные и квадратные уравнения, чтобы можно было быстро выяснить, что именно вы хотите изменить в формуле. Это потому, что моделирование графиков с помощью уравнений является большой темой, и если бы я мог объяснить это здесь идеально, я бы сначала продал это объяснение некоторым учителям математики.

В основном, для линейных графиков, помните y=mx+c. mэто градиент, и может быть положительным или отрицательным в зависимости от того, что вам нужно, и cэто точка, в которой он перехватывает y axis. xваша входная переменная и yваш выход.

у = х + с Это график, y=mx+cгде m=1иc=0

Для квадратичных графиков это немного усложняется, поэтому я буду немного расплывчатым, и вам придется самостоятельно разбираться со спецификой. Ханская академия - действительно хороший ресурс для обучения этому. Это общего вида y=ax²+bx+c. cэто все еще перехват у, и вы можете настроить его, чтобы «поднять» график. aи bоба влияют на кривую одинаково, но в разной степени.

у = -x² + 2х + 10 Это y=-x²+2x+10. Обратите внимание на то -x², что делает кривую перевернутой.

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

Следует также отметить экспоненциальные и логарифмические графы, то есть графы y=e^xи y=ln(x)получить быстро растущие и быстро убывающие графы в зависимости от преобразования. Кроме того, векторы и преобразования полезны, так как они описывают, что вы делаете с «базовым» графом.


6
Вы используете «теорию графов» пару раз в посте; это нечто совсем другое . Я думаю, что OP ищет ближе к моделированию.
Chaposed0

1
@ Chaposed0 Ты абсолютно прав, я сумасшедший. Отредактировано, хотя, та :)
Янн

+1, я играл в несколько игр, где эффект какой-то статистики в основном 1/x. Очевидно , что для такой кривой , вы никогда не хотите , xчтобы равняться нулю, хотя!
Брайан С.

1
Я бы порекомендовал Desmos over WA для разработки функций. Две основные причины в том, что это в режиме реального времени и что он манипулирует. То есть, установите y = a^x, и вы можете добавить ползунок для aвоспроизведения с функцией. Вы можете иметь столько, сколько хотите. Вы даже можете анимировать слайдеры. Это довольно мило, на самом деле. (Эквивалент Mathematica Manipulate.)
wchargin

1
График Игрушка (которая существует уже несколько лет) является хорошим инструментом, чтобы попробовать некоторые уравнения. Я использую это все время.
Tigrou

20

Снижение доходности = уменьшение производной

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

Так что тебе нужно делать? Выберите функцию, которая соответствует вышеуказанным критериям, и интегрируйте ее.
Самый простой выбор для этой задачи - g(t,n) = 1/(t+1)^nгде n=1отмечается граница между постоянно растущими и ограниченными функциями.
Вам нужен интеграл от 0 до x: f(x,n) = ((x+1)**(1-n) - 1)/(1-n)
вот как он выглядит для разныхn

введите описание изображения здесь
И здесь его нормализовано до того же конечного значения

введите описание изображения здесь
Изменяя показатель степени, nвы можете легко отрегулировать балансировку.
Примечание: здесь производной является производство на ферму, а интегралом является общее производство для ряда ферм.


5

Как правило, линейное уравнение начинается с того y = mx + b, где bваше начальное значение и mxкак вы корректируете начальное значение по мере xувеличения.

Таким образом , в первой части вашего уравнения, то b, будет , 10потому что вы хотите фермы , чтобы начать на 10 продуктов питания.

y = mx + 10

Затем, в вашем случае, вы хотите откорректировать еду, производимую каждые десять ферм. Таким образом, вам нужно разделить на десять, чтобы получить уравнение, которое работает для каждых десяти ферм (при условии, что x / 10возвращает целое число, то есть 13 / 10 = 1:

y = m * (x / 10) + 10.

Итак, наконец, нам нужно выяснить, как мы хотим, чтобы еда менялась для каждой x / 10фермы. В вашем случае вы хотите уменьшить его на 0,5 (5% от 10), что является линейным. Итак, мы получаем:

y = -0.5 * ( x / 10 ) + 10.

Так что для фермы x = 5мы получаем 5 / 10 = 0, 0 * -0.5 = 0, 0 + 10 = 10. Для фермы x = 11мы получаем 11 / 10 = 1, 1 * -0.5 = -0.5, -0.5 + 10 = 9.5, для фермы 23 мы получим 9.0.

Тогда вам просто нужно рассчитать общую еду для всех ферм.

y = 0
for( x = 0; x < totalFarms; x++ )
{
    y += -5 * ( x / 10 ) + 10;
}

Но, возможно, вы на 5%, вы хотели, чтобы оно уменьшилось на 5% от предыдущего значения. То есть 10, 10 * 0.95 = 9.5, 9.5 * 0.95 = 9.025(в этом случае сумма, которую мы уменьшаем, становится все меньше и меньше). Итак, давайте изменим уравнение. 5%является экспоненциальным увеличением типа, а экспоненциальная формула y = b*m^x.

У нас все еще есть b = 10, и мы должны сделать наше деление на 10 трюков. Так и есть y = 10*m^(x/10). mесть 0.95, так как мы хотим каждый раз брать 95% стоимости. Так что уравнение для фермы xесть y = 10*0.95^(x/10).


4

Подойдет ли линейный убывающий доход? производство на ферму = (1 - (0,05 * (f / 10))) * производительность. Это дает общий пик производства (норма * количество ферм) при f = 100.


Эй, спасибо, хотя я ищу общие принципы для достижения уравнения (Как вы можете видеть, Math не моя сильная
сторона

2

Возможно, вы захотите рассмотреть алгоритмическое решение, которое соответствует ситуации.

То есть, подумайте, почему в вашей игровой ситуации есть убытки, и смоделируйте их.

Несколько объектов одного типа могут иметь убывающую отдачу в том случае, если могут существовать другие ресурсы или объекты, от которых они зависят, или которые приводят к узким местам или другим ограничивающим ситуациям, таким как дорожная сеть, или доступные рабочие, или транспорт, или пресная вода или электричество или что-то еще.

В идеальных условиях одна ферма может производить 10 продуктов питания в день, но для этого требуется также два фермерских часа в день. Также требуется одна свежая вода на еду в день, а из собственного колодца можно получить только до 5 воды в день. Остальные должны быть взяты из соседнего ручья или реки или привезены на транспорте. И доставка еды туда, где она должна быть полезной, также может быть проблемой. И т.д. Удалите некоторые или добавьте больше в зависимости от того, что вы хотите изобразить, но это может быть гораздо более интересным и значимым фактором, который добавляет интерес и ценность вашим другим игровым системам, в отличие от искусственной математической формулы, не основанной на других игровых элементах. ,


1

Если вы хотите, чтобы с обобщенным уравнением можно было возиться, вы можете использовать косинус-график: A * cos (Bx + C) + D

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.