1

我有一个数据集,它由许多元素组成——分为两个不同的类别(每个类别的元素数量相等)——以及描述它们的两个连续变量,如下所示:

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 中进行模拟退火的包,例如GenSAoptim。坏消息是我真的不知道如何利用这些包来满足我的特定输入需求。也就是说,作为输入,我想指定一个数字列表,表示我的列表中某个类别的元素,以及它们应该以什么顺序与属于另一个类别的另一组元素配对。但是,这意味着我在我的模拟退火算法中只想使用整数,并且我永远不希望同一个整数出现两次,这似乎与上述包的实现方式背道而驰。

有什么方法可以有效地使用一些预先编写的 R 模拟退火包,还是我需要为这个问题编写自己的方法?

4

0 回答 0