Да. У нас текущий алгоритм, придуманный сходу, пока где-то так и работает:
1. Сортируем по кол-ву в убывающем порядке.
2. Рассчитываем (общее отклонение - кол-во). если оно по модулю меньше чем общее отклонение, то уменьшаем/увеличиваем в зависимости от знака результата цену на 0.01.
2.1. Повторяем пока разница цены не будет больше 10% или (общее отклонение - кол-во) по модулю не будет больше чем общее отклонение.
3. Переходим к след. кол-ву.
Ну, если отклонение стало равно 0.00, то понятное дело, выходим из любого цикла.
Тут уже и оптимизацию придумали, чтобы раскидать пропорционально по всем ценам отклонения, а не тупо с одной строки все срубать:
делать приведенный выше алгоритм итетационно, то есть за раз уменьшать/увеличивать цену не больше чем "Заданный параметр в %".
При этом нужен еще один параметр - "Максимальное кол-во циклов"
Прям параметры, как у пересчета себестоимотси получаются