我有一个数据集,它由许多元素组成 - 分为两个不同的类别(每个类别有相同数量的元素) - 并且有两个连续变量描述它们,如下所示:
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
... | ... | ... | ...
现在,我要做的是创建一对一配对列表,以便类别Triangle
的每个元素与类别Circle
的元素配对,以便由Variable_1
和Variable_2
定义的2D空间中每个配对内的点之间的组合距离尽可能小。换句话说,如果我必须从每个Triangle
元素移动到Circle
元素(但从不到两次相同的Circle
元素),我想知道如何最小化总数行驶距离(见下图)。
由于我并没有真正试图暴力破解这个问题,我一直认为Simulated annealing可能是一个合适的优化方法。我也想在R工作。
好消息是我在R中发现了一些用于模拟退火的软件包,例如GenSA和optim。坏消息是我真的不知道如何利用这些软件包来满足我的特定输入需求。也就是说,作为输入,我想指定一个数字列表,表示我的列表中某个类别的元素,以及它们应该以什么顺序与另一个属于另一个类别的另一组元素配对。然而,这意味着我,在我的模拟退火算法中,只想使用整数,并且我从不希望相同的整数出现两次,这似乎与上面的包的实现方式相反。
是否有某种方法可以有效地使用一些预先编写的模拟退火包用于R,或者我是否需要为此问题编写自己的方法?