У меня есть оптимизатор, который решает транспортную проблему, используя матрицу затрат всех возможных путей.
Оптимизатор работает нормально, но если две из этих затрат равны, решение содержит еще один путь, чем минимальное количество путей. (Думайте об этом как о маршрутизаторах с балансировкой нагрузки; если два маршрута стоят одинаково, вы будете использовать их оба.)
Мне нужно минимальное количество маршрутов, и для этого Мне нужна матрица затрат, в которой нет двух затрат, равных в пределах определенного допуска.
В данный момент я передаю матрицу затрат через функцию выпечки, которая проверяет каждую запись на равенство для каждой из других записей и перемещает ее на фиксированный процент, если он совпадает. Однако этот подход требует N ^ 2 сравнений, и, если все начальные значения одинаковы, последняя стоимость будет на R ^ N больше. (r - произвольный фиксированный процент). Также существует проблема, заключающаяся в том, что, умножая на процент, вы попадаете поверх другого значения. Таким образом, проблема, кажется, имеет элемент рекурсии или, по крайней мере, повторной проверки, который раздувает код.
Текущая реализация в основном не очень хороша (я не буду вставлять сюда свой код, использующий GOTO, чтобы вы все его высмеивали), и я хотел бы улучшить его. Есть ли название для того, что я ищу, и есть ли стандартная реализация?
Пример:
{1,1,2,3,4,5} (tol = 0,05) становится {1,15,2,3,4,5}