Я ищу алгоритм распределения значений среди заполнителей с разным весом - PullRequest
0 голосов
/ 22 марта 2012

Хорошо, это вопрос.

Допустим, у меня есть заданное значение: 2000;

и у меня есть следующие заполнители

ph1 -> 15% of the total
ph2 -> 10% of the total
ph3 -> 25% of the total
ph4 -> 10% of the total
ph5 -> 30% of the total
ph6 -> 10% of the total

однако каждое значение может плавать 0,1% в любом направлении. И я должен распределить дельту среди оставшихся заполнителей. «Потраченный» итог должен быть максимально близок к отметке 2000 года (максимум отклонения 0,1%) Есть ли какой-нибудь алгоритм, который я могу использовать?

Спасибо, ребята

1 Ответ

0 голосов
/ 23 марта 2012

Если вы отслеживаете процент от общего оставшегося количества, тогда должно быть легко распределить вашу ошибку («дельта») пропорционально, рассчитав процент от остатка, представленного каждой более поздней записью.

PH = [.15,.10,.25,.10,.30,.10]
Sum = 2000
remainder= 1.0

#recalculation after event `i` consumes `amount`
pctConsumed = amount/Sum
delta = PH[i]- pctConsumed
remainder-= PH[i]
for (i+=1;i<PH.size;i+=1)
   PH[i]+= delta * PH[i]/remainder
remainder += delta
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...