Ваша проблема - правило 10%, потому что если у вас есть 50000, измененная сумма может быть 5000, что больше, чем другие числа. Поэтому я бы сказал, что один из способов сделать это - упорядочить числа от меньшего к большему и рассчитать изменение до 1-го числа, затем применить противоположное ко 2-му числу, затем вычислить до 3-го и так далее. Вы не можете иметь полностью независимые случайные числа, потому что сумма должна совпадать! Обратите внимание, что вы генерируете только половину чисел, а вторая половина зависит от 1-й половины
, что выше может работать только для четного количества чисел. К нечетной сумме вы могли бы разделить вычисленную разницу на следующие 2 числа, например.
Таким образом, ваши примерные данные будут иметь порядок
[1000, [ 900,
1200, 1000,
900, 1200,
5700, 5700,
8000] 8000]
Тогда вы можете сгенерировать случайные числа:
RAND1 = random from -90 to +90
RAND2 = -RAND1
RAND3 = random from -120 to 120
RAND4 = -RAND3 / 2
RAND5 = -RAND3 / 2
Затем вы складываете список случайных чисел с оригинальным списком. Если исходный заказ важен, вам необходимо отследить его перед выполнением расчета.
lets say RAND1 = -30 and RAND3 = 100
[ 870,
1030,
1300,
5650,
8050]