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