我有一个数据集,它由许多元素组成——分为两个不同的类别(每个类别的元素数量相等)——以及描述它们的两个连续变量,如下所示:
ID | Category | Variable_1 | Variable_2
--------------------------------------------
1 | Triangle | 4.3522 | 5.2321
2 | Triangle | 3.6423 | 6.3223
3 | Circle | 5.2331 | 3.2452
4 | Circle | 2.6334 | 7.3443
... | ... | ... | ...
现在,我要做的是创建一个一对一配对列表,以便 category 的每个元素都与 categoryTriangle
的一个元素配对Circle
,并且定义 2D 空间中每个配对中的点之间的组合距离byVariable_1
并且Variable_2
尽可能小。换句话说,如果我必须从每个Triangle
元素到一个Circle
元素(但从不Circle
两次到同一个元素),我想找出如何最小化总行进距离(见下图)。
由于我真的不想尝试蛮力解决这个问题,所以我一直认为模拟退火可能是一种合适的优化方法。我也想在R工作。
好消息是我找到了几个在 R 中进行模拟退火的包,例如GenSA和optim。坏消息是我真的不知道如何利用这些包来满足我的特定输入需求。也就是说,作为输入,我想指定一个数字列表,表示我的列表中某个类别的元素,以及它们应该以什么顺序与属于另一个类别的另一组元素配对。但是,这意味着我在我的模拟退火算法中只想使用整数,并且我永远不希望同一个整数出现两次,这似乎与上述包的实现方式背道而驰。
有什么方法可以有效地使用一些预先编写的 R 模拟退火包,还是我需要为这个问题编写自己的方法?