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

25

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

Extrakun
источник
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)получить быстро растущие и быстро убывающие графы в зависимости от преобразования. Кроме того, векторы и преобразования полезны, так как они описывают, что вы делаете с «базовым» графом.

Yann
источник
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вы можете легко отрегулировать балансировку.
Примечание: здесь производной является производство на ферму, а интегралом является общее производство для ряда ферм.

DenDenDo
источник
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.

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

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

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

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

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

Dronz
источник
1

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

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

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

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

Granpappy Shlongdong
источник