Answers:
给定交换约束,您真正要问的是:在一组值的所有重新排序中,这些值的哪个排列可使目标函数最小化?
可以构造此问题,以便Solver可以找到解决方案。关键是使用值的顺序,而不是值本身,因为Solver的数量会发生变化,以便找到目标函数的最小值。Solver具有内置的机制来置换这些值。
下图显示了说明示例的工作表设置。
单元格A4:A7
包含需要重新排序以找到最小值的值。
单元格C4:C7
保留这些值的初始行顺序-中的值C4:C7
是那些将由Solver更改的值。
中的公式E4:E7
查找A4:A7
与中的行顺序相对应的值C4:C7
。
单元格C9拥有在我的示例中将最小化的公式-请注意,该公式取决于中的值E4:E7
,而不取决于中的值A4:A7
。
接下来是问题的求解器设置。在这里,您需要将单元格的约束设置为C4:C7
, AllDifferent
并将求解方法设置为Evolutionary
。
要设置约束C4:C7
到AllDifferent
,选择的选项dif
从上添加约束对话框的下拉列表。(请参阅此链接,以获得对Solver中可用的特殊约束选项的有益讨论。)
我发现没有必要通过例如在解决方案搜索中设置时间限制或迭代限制来摆弄求解方法的可选设置。由于只有四个变量单元格和非常简单的目标函数,Solver只需几秒钟即可找到解决方案。产生最小解的行顺序显示在中C4:C7
,值的顺序显示在中E4:E7
。