Como posso criar uma simples equação de retorno decrescente?


25

Existem fórmulas disponíveis para uma equação de retorno decrescente; no entanto, esses geralmente envolvem exponencial. Que outras maneiras existem para chegar a essa equação? Tomemos, por exemplo, o seguinte caso de teste - Uma fazenda produz 10 alimentos, para cada 10 fazendas produzidas, a taxa de produção cai 5%.


11
Pode ajudar se você nos disser por que deseja evitar exponenciais. Em particular, as expressões da forma x ^ y ( x elevado à y- ésima potência) também saem (já que os computadores geralmente calculam aqueles que usam exponenciais, pelo menos para y não inteiro )?
Ilmari Karonen

7
"Para cada dez fazendas produzidas, a taxa de produção cai 5%." Isso é essencialmente exponencial: y = 0,9 ^ (piso (x / 10)). Como o @IlmariKaronen pergunta, o que há de errado com o exponencial?
wchargin

1. Difícil de explicar para os não-desenvolvedores (e alguns desenvolvedores têm problemas com exponencial) 2. Estou com a impressão de que é caro
Extrakun

2
não há absolutamente nada de ineficiente em usar equações exponenciais. Eu acho que o que você está pensando é em algoritmos nos quais o número de etapas aumenta exponencialmente em comparação com o tamanho da entrada (por exemplo, o tamanho de uma matriz que você deseja classificar). Isso é chamado de "O", por exemplo, você pode dizer que um algoritmo (ou função) específico executa O (n) etapas para executar. Um algoritmo no qual as etapas aumentam exponencialmente pode ser descrito como executar etapas O (n ao quadrado), por exemplo. Isso é totalmente diferente de ter uma única equação que possui um termo exponencial.
Max Williams

11
Eu acho que a Extrakun pode estar pensando nesse tipo de "caro": stackoverflow.com/questions/2940367/… . Reiterar o que todo mundo está dizendo: não é caro. Se você não se sentir à vontade com os exponenciais, procure explicações acessíveis sobre eles (talvez melhor explicado.com/artigos/… ), não os evite.
precisa

Respostas:


30

Para formular uma equação de retornos decrescentes, eu pensaria imediatamente em frações.

Gráfico de 1 / F Este é um gráfico de y=1/F

yficará menor à medida que Ffor maior. Isso lhe dará uma queda constante que nunca chega a 0. A partir disso, você pode transformá-la para obter o tipo de curva que deseja. Usar números> 0 sempre dará resultados positivos que nunca são 0.

Honestamente, eu recomendo ir ao WolframAlpha e colocar algumas equações e olhar para os gráficos que desenha para ver se dá a curva que você deseja. Fora isso, leia as equações lineares e quadráticas para descobrir rapidamente o que você deseja alterar em uma fórmula. Isso ocorre porque modelar gráficos através de equações é um tópico um pouco grande, e se eu pudesse explicar isso perfeitamente, venderia essa explicação para alguns professores de matemática primeiro.

Basicamente, para gráficos lineares, lembre-se y=mx+c. mé o gradiente e pode ser positivo ou negativo, dependendo do que você precisa, e cé o ponto em que ele intercepta o y axis. xé sua variável de entrada e yé sua saída.

y = mx + c Este é um gráfico de y=mx+conde m=1ec=0

Para gráficos quadráticos, fica um pouco mais complicado, por isso vou ser um pouco vago e você terá que ler os detalhes você mesmo. A Khan Academy é realmente um bom recurso para ensinar isso. É da forma geral y=ax²+bx+c. cainda é o intercepto em y, e você pode ajustá-lo para "levantar" o gráfico. ae bambos afetam a curva da mesma forma, mas em graus diferentes.

y = -x² + 2x + 10 Isto é y=-x²+2x+10. Observe o -x², o que torna a curva invertida.

Basicamente, brinque com os gráficos até conseguir o que deseja, embora eu recomendo ler mais se quiser projetar a experiência de maneira rápida e limpa. Equações básicas são importantes para os jogos e realmente interessantes.

Outras coisas a serem observadas são gráficos exponenciais e logarítmicos , ou seja, gráficos de y=e^xe y=ln(x)para obter gráficos que aumentam e diminuem rapidamente, dependendo da transformação. Além disso, vetores e transformações são úteis, pois descrevem o que você está fazendo no gráfico "base".


6
Você usa a "teoria dos grafos" algumas vezes no post; isso é algo completamente diferente . Eu acho que o que o OP está procurando se aproxima da modelagem.
Chaosed0

11
@ Chaosed0 Você está absolutamente certo, eu derped. Editado embora, ta :)
Yann

+1, joguei vários jogos em que o efeito de alguma estatística é basicamente 1/x. Obviamente, para tal curva um que você nunca quer xpara igualar zero, embora!
Brian S

11
Na verdade, eu recomendaria Desmos sobre WA para projetar funções. As duas principais razões são que é em tempo real e é manipulável. Ou seja, defina y = a^xe você pode adicionar um controle deslizante para abrincar com a função. Você pode ter quantos quiser. Você pode até animar os controles deslizantes. É bem legal, na verdade. (Equivalente ao Mathematica Manipulate.)
wchargin

11
O Graph Toy (que existe há vários anos) é uma boa ferramenta para tentar algumas equações. Eu uso isso o tempo todo.
usar o seguinte

20

Retornos decrescentes = derivada decrescente

  • Como você ainda deseja alguns retornos, mesmo em níveis mais altos, significa que o derivado deve ser positivo; caso contrário, a construção de mais fazendas diminuiria a produção de alimentos (o que pode até fazer sentido se você considerar os custos de logística e manutenção)
  • Ele deve se aproximar de zero assintoticamente, se for para um valor diferente de zero, você terminará com um aumento constante por fazenda em algum nível
  • dependendo de quão rápido ele chega a zero, você pode ter um limite superior ou uma função ilimitada

Então o que você precisa fazer? Escolha uma função que atenda aos critérios acima e integre-a.
A escolha mais simples para esta tarefa é g(t,n) = 1/(t+1)^nonde n=1marca o limite entre funções sempre crescentes e limitadas.
A integral de g de 0 a x é o que você precisa: f(x,n) = ((x+1)**(1-n) - 1)/(1-n)
Aqui está como ela procura diferentesn

insira a descrição da imagem aqui
E aqui está normalizado com o mesmo valor final

insira a descrição da imagem aqui
Alterando o expoente, nvocê pode ajustar facilmente o balanceamento.
Nota: O derivado aqui é a produção por fazenda, enquanto a integral é a produção total de várias fazendas


5

Em geral, uma equação linear começará com y = mx + b, onde bestá o seu valor inicial e mxé como você ajusta o valor inicial à medida que xaumenta.

Portanto, a primeira parte da sua equação, a b, será 10porque você deseja que as fazendas comecem com 10 alimentos.

y = mx + 10

Em seguida, no seu caso, você deseja ajustar os alimentos produzidos a cada dez fazendas. Portanto, você precisará dividir por dez para obter uma equação que funcione para cada dez farms (assumindo que o x / 10retorno seja um número inteiro, ou seja 13 / 10 = 1:

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

Então, finalmente, precisamos descobrir como queremos que os alimentos mudem para todas as x / 10fazendas. No seu caso, você deseja diminuir em 0,5 (5% de 10), o que é linear. Então temos:

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

Então, para a fazenda x = 5, chegamos 5 / 10 = 0, 0 * -0.5 = 0, 0 + 10 = 10. Para a fazenda x = 11que obtemos 11 / 10 = 1, 1 * -0.5 = -0.5, -0.5 + 10 = 9.5, para a fazenda 23, obteríamos 9,0.

Então você só precisa calcular o total de alimentos para todas as fazendas.

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

Mas talvez você em 5%, você queira diminuir em 5% do valor anterior. Ou seja, 10, 10 * 0.95 = 9.5, 9.5 * 0.95 = 9.025(nesse caso, a quantidade que diminuímos fica cada vez menor). Então, vamos modificar a equação. 5%é um aumento do tipo exponencial e a fórmula exponencial é y = b*m^x.

Ainda temos b = 10, e precisamos dividir por 10 truques. Então nós temos y = 10*m^(x/10). mé 0.95, pois queremos receber 95% do valor de cada vez. Então a equação para fazenda xé y = 10*0.95^(x/10).


4

Um retorno linear decrescente faria? produção por fazenda = (1 - (0,05 * (f / 10))) * * taxa de produção. Isso fornece um pico de produção total (taxa * # de fazendas) em f = 100.


Ei, obrigado, embora eu estou procurando princípios gerais a chegar à equação (Como você pode ver, a matemática não é o meu forte)
Extrakun

2

Você pode considerar uma solução algorítmica que corresponda à situação.

Ou seja, considere por que há retornos decrescentes em sua situação de jogo e modele-os.

Múltiplas instalações do mesmo tipo podem ter retornos decrescentes: pode haver outros recursos ou instalações das quais elas dependem ou que resultem em gargalos ou outras situações limitantes, como uma rede viária, trabalhadores disponíveis ou transporte ou água doce ou água. eletricidade ou qualquer outra coisa.

Uma fazenda pode produzir 10 alimentos por dia em circunstâncias ideais, mas requer duas horas de agricultor por dia também. Também requer uma água fresca por alimento por dia, e seu próprio poço fornece apenas até 5 água por dia. O restante deve ser retirado de um córrego ou rio adjacente ou trazido de transporte. E levar a comida para onde ela precisa ser útil também pode ser um problema. Etc. Remova alguns ou adicione mais, dependendo do que você deseja representar, mas esses podem ser motivos muito mais interessantes e significativos, que agregam interesse e valor aos outros sistemas de jogo, em oposição a uma fórmula matemática artificial não baseada em outros elementos do jogo .


1

Se você quiser que uma equação generalizada seja usada, você pode usar um gráfico de cosseno: A * cos (Bx + C) + D

Mas modifique-o para meio período, para incluir o aumento pseudo-exponencial no início, depois um curto período de aumentos lineares, até um ponto de retorno finalmente decrescente. O único problema disso é que seria necessário criar um teto intransitável. Então, depois de uma certa quantidade de fazendas, você não veria aumento.

A imagem abaixo é um gráfico de aumentos no ritmo para execuções de 30 min, fazendo exatamente o mesmo exercício na preparação. Obviamente, não é perfeito, mas você pode resolver isso para encontrar o que está procurando.

Exemplo de curva cosseno usada para determinar retornos decrescentes

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.