我有四个变量,我想以特定的方式分配权重。如果我确定了每个重量的间隔,我应该用哪个程序列出所有可能的解决方案?基本上我会有两个约束 - 权重之和应该是100,权重应该来自预定义的间隔。
我想解决的确切示例是:
25<= weight1<=31
21<= weight2<=26
17<= weight3<=24
25<= weight4<=31
weight1+weight2+weight3+weight4=100
提前致谢!任何评论或建议都非常受欢迎
答案 0 :(得分:2)
您可以使用expand.grid
,即
d1 <- expand.grid(25:31, 21:26, 17:24, 25:31)
d2 <- d1[rowSums(d1)==100,]
head(d2, 5)
# Var1 Var2 Var3 Var4
#84 31 26 18 25
#119 31 25 19 25
#125 30 26 19 25
#154 31 24 20 25
#160 30 25 20 25
答案 1 :(得分:2)
您可以相对轻松地执行此操作(针对此特定问题),使用R中的expand.grid()
来强制执行所有组合。请注意,如果权重的间隔变得更大,这个解决方案将不适合,因为组合太多了。
# Make all the combinations of weights
all <- expand.grid( 25:31, 21:26, 17:24 , 25:31 )
# Which add up to 100?
idx <- rowSums( all ) == 100
# Subset the original matrix to only return those rows which add to 100
head( all[ idx , ] )
# Var1 Var2 Var3 Var4
#84 31 26 18 25
#119 31 25 19 25
#125 30 26 19 25
#154 31 24 20 25
#160 30 25 20 25
#166 29 26 20 25