晚上好,
作为数据分析课程的一部分,我们已经进入元启发法领域.....并且我真的很难理解如何在R中实施禁忌搜索,因为我的编程背景非常有限。
我在Google或youtube上都没有找到任何int main(void)
{
uint8_t data[8] = { 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
unsigned long long num = 0;
for (int i=0; i<8; i++) {
num <<=8; // shift by a complete byte, equal to num *= 256
num |= data[i]; // write the respective byte
}
printf("num is %016llx\n",num);
return 0;
}
或num is 0201020304050607
示例,所以我真的在祈祷能在这里找到一些东西。
我遇到的问题与优化中的“位置问题” 类似。我需要找到集线器的最佳组合,以最小化集线器和节点之间的总距离。
我需要找到R
Python
,每个人的总容量为5
hubs
我的策略是创建一个120
,然后我将创建另一个50 x 50矩阵来表示一个节点是否成为中心,最后我将两者相乘并相加所有距离以获得总和距离。
我创建了数据框:
nodes <- structure(list(node_number = 1:50,
x = c(2L, 80L, 36L, 57L, 33L, 76L, 77L, 94L,
89L, 59L, 39L, 87L, 44L, 2L, 19L, 5L,
58L, 14L, 43L, 87L, 11L, 31L, 51L, 55L,
84L, 12L, 53L, 53L, 33L, 69L, 43L, 10L,
8L, 3L, 96L, 6L, 59L, 66L, 22L, 75L, 4L,
41L, 92L, 12L, 60L, 35L, 38L, 9L, 54L, 1L),
y = c(62L, 25L, 88L, 23L, 17L, 43L, 85L, 6L, 11L,
72L, 82L, 24L, 76L, 83L, 43L, 27L, 72L, 50L,
18L, 7L, 56L, 16L, 94L, 13L, 57L, 2L, 33L, 10L,
32L, 67L, 5L, 75L, 26L, 1L, 22L, 48L, 22L, 69L,
50L, 21L, 81L, 97L, 34L, 64L, 84L, 100L, 2L, 9L, 59L, 58L),
node_demand = c(3L, 14L, 1L, 14L, 19L, 2L, 14L, 6L,
7L, 6L, 10L, 18L, 3L, 6L, 20L, 4L,
14L, 11L, 19L, 15L, 15L, 4L, 13L,
13L, 5L, 16L, 3L, 7L, 14L, 17L,
3L, 3L, 12L, 14L, 20L, 13L, 10L,
9L, 6L, 18L, 7L, 20L, 9L, 1L, 8L,
5L, 1L, 7L, 9L, 2L)),
.Names = c("node_number", "x", "y", "node_demand"),
class = "data.frame", row.names = c(NA, -50L))
hubs_required = 5
total_capacity = 120
我创建了距离矩阵
distance matrix
我创建了节点需求矩阵:
nodes_df <- as.data.frame(nodes)
colnames(nodes_df) <- c("x", "y", "node_demand")
rownames(nodes_df) <- paste('Node',1:50)
我创建了一个空矩阵来显示distance_df <-as.data.frame(as.matrix(round(dist(nodes_df,method = "euclidean",diag = TRUE,upper = TRUE))))
colnames(distance_df) <- paste("Node",1:50)
是否变成demand <- as.vector(rep(c(nodes_df[,'node_demand']),50))
demand_matrix <- matrix(demand,nrow=50,ncol=50,byrow = TRUE)
diag(demand_matrix) <- 0
demand_matrix <- as.data.frame(demand_matrix)
node
然后创建初始解,我随机分配hub "1"
并计算距离和需求。
"0"
这个想法是尝试使用“ 1”和“ 0”的不同组合来最大程度地减小总距离,但是我遇到了以下问题:
我不知道如何执行本地搜索以及从初始解决方案中进行排列。
我不知道如何防止R在一段时间内使用最佳解决方案,即禁忌列表
我不知道如何处理每个节点的供应限制(每个节点的总需求<120),我可以循环执行,但是由于在这种情况下我要乘以矩阵丢了。
任何人都可以帮我吗?
非常感谢!