Фондовая биржа партийных расчетов - PullRequest
2 голосов
/ 06 октября 2011

Я пишу программу (http://dancingrobots.org/beurs/) для моего молодежного клуба, которая рассчитывает цены на напитки по количеству раз, когда они были куплены в последнем туре (довольно забавная концепция вечеринки). Теперь способ, которым я Рассчитать цены можно так:

cola = cola * (vercola / pastVerCola);

Где кола цена Vercola - это время, когда оно было куплено в этом раунде. pastVerCola - это время, когда оно было куплено в последнем раунде.

Напиток не может стоить менее 0,5 евро и более 10 евро.

Мои две проблемы:

  • Колебание цен слишком велико (в основном это шансы от максимума до минимума и наоборот)
  • Если напиток куплен дважды, это ошибка (0/0)

Для тех, кто заинтересован, вот полный код: http://pastebin.com/PsT2v2Tr

1 Ответ

4 голосов
/ 06 октября 2011

Если вы хотите уменьшить колебание, вы можете использовать квадратный корень:

cola = cola * Math.sqrt(vercola / pastVerCola);

Используйте sqrt несколько раз, чтобы уменьшить его еще больше.

Другой способ (который я использовал вв прошлом), чтобы ослабить колебания, используя фиксированную нагрузку, например

cola = cola * (vercola + 50) / (pastVerCola + 50);

. Это полезно, поскольку оно также позволяет автоматически увеличивать / уменьшать цену с каждым раундом (используя 40, 50, 60 и т. д..)

Вы можете объединить эти два эффекта, чтобы получить требуемое колебание.например,

var VER = 40;     // Constant
var PASTVER = 60; // Constant
cola = cola * Math.sqrt((vercola + VER) / (pastVerCola + PASTVER));

Кстати, я думаю, что ошибка вызвана тем, что никто не покупает определенный напиток в раунде.pastVerCola будет установлен на ноль, что даст вам ошибку деления на ноль.Использование констант полностью исключает эту ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...