我得到了以下数据框
data <- structure(list(node_number = 1:8,
x = c(2L, 80L, 36L, 57L, 33L, 76L, 77L, 94L
),
y = c(62L, 25L, 88L, 23L, 17L, 43L, 85L, 6L
),
node_demand = c(3L, 14L, 1L, 14L, 19L, 2L, 14L, 6L)),
.Names = c("node_number", "x", "y", "node_demand"),
class = "data.frame", row.names = c(NA, -8L))
node_number x y node_demand
1 1 2 62 3
2 2 80 25 14
3 3 36 88 1
4 4 57 23 14
5 5 33 17 19
6 6 76 43 2
7 7 77 85 14
8 8 94 6 6
要拆分集线器和可用节点列表,请执行以下操作:
hubs <- data[keep <- sample(1:8, 1, replace = FALSE),]
client_nodes <- data[-keep, ]
我现在需要随机选择两个客户端节点
random_client_a <- client_nodes[seleccion <-sample(nrow(client_nodes), size = 1, replace = FALSE),]
random_client_b <-client_nodes[sample(nrow(client_nodes[-seleccion]), size = 1, replace = FALSE),]
使用以下公式(我需要最小化)计算集线器和客户端之间的距离:
euc.dist <- function(A, B){round(sqrt(sum((A - B) ^ 2)))}
a<-euc.dist(hubs,random_client_a)
b<-euc.dist(hubs,random_client_b)
min <- which.min(c(a,b))
由于which.min()返回索引位置...有什么办法可以检索对应于最小值的dataframe
行?原因是我需要继续计算并向名为total_distance的变量添加距离,直到累计node_demand
超过30。
过程如下:
total_distance
,然后添加node_demand对应
到该节点到名为total_demand
的变量。有人可以帮我一把吗?
非常感谢!