Учитывая ограничение обмена, вы действительно спрашиваете: среди всех переупорядочений набора значений, какая перестановка этих значений минимизирует целевую функцию?
Эта проблема может быть структурирована так, чтобы Солвер мог найти решение. Ключ заключается в том, чтобы использовать порядок значений, а не сами значения, так как количество Солвера меняется, чтобы найти минимальное значение целевой функции. Солвер имеет встроенный механизм для перестановки этих значений.
На рисунке ниже показана настройка рабочего листа для иллюстративного примера.
Ячейки A4:A7
содержат значения, которые необходимо переупорядочить, чтобы найти минимум.
Ячейки C4:C7
содержат начальный порядок строк для этих значений - значения в C4:C7
- это те, которые будут меняться Солвером.
Формулы в E4:E7
ищут значения в A4:A7
которые соответствуют порядку строк в C4:C7
.
Ячейка C9 содержит формулу, которая будет минимизирована в моем примере - обратите внимание, что формула зависит от значений в E4:E7
, а не от значений в A4:A7
.
Далее идут настройки Солвера для задачи. Здесь необходимо установить ограничение для ячеек C4:C7
в значение AllDifferent
а в качестве метода решения - значение Evolutionary
.
Чтобы установить ограничение для C4:C7
на AllDifferent
, выберите опцию dif
из раскрывающегося списка в диалоговом окне Add Constraint. (См. Эту ссылку для полезного обсуждения специальных параметров ограничений, доступных в Solver.)
Я не счел необходимым возиться с необязательными настройками для метода решения, например, установив ограничение по времени или итерации при поиске решения. С помощью всего лишь четырех переменных ячеек и очень простой целевой функции Solver нашел решение всего за несколько секунд. Порядок строк, который дал минимальное решение, был показан в C4:C7
, а порядок значений в E4:E7
.