我想找到这个问题的可能组合数量。这个问题正是一个实时场景的简化版本,人们选择他们想要工作的电台,并提供他们的优先(排名)列表。请帮我解决这个问题。我想用R来解决这个问题。
j<-c("Y", "X", "Z", "W")
l<-c("X", "Z", "W", "Y")
p<-c("Y", "Z", "X", "W")
t<-c("X", "Y", "Z", "W")
我想找到符合上述限制的所有可能的矢量。
想要添加图片以显示实际问题:
答案 0 :(得分:1)
(警告:蛮力回答)
考虑到探索的空间相当小(如果n!/(n-k)!
员工从k
城市中选择n
,那么这里只有require(combinat)
condition1 <- function(combination,...) {} # returns TRUE if condition1 is met
# ...
condition3 <- function(combination,...) {} # returns TRUE if condition3 is met
space <- combinat::permn(c("W","X","Y","Z")) # a list of all permutations
lapply(space,
function(x) if (condition1(x) && condition2(x) && condition3(x)) {return(x)})
元素,所以这里有4个!= 24个元素),你可以这样写:
lapply
当然它不是超级优雅,但它允许你手动编码潜在的&#34;异国情调&#34;条件让R在conditions
中完成平凡的工作。
如果条件很多,我会将它们分组到一系列函数function(x) if all(lapply(conditions, function(c) do.call(c,x))) ...
中,并将最后一行替换为string.Compare
。
答案 1 :(得分:0)
(这看起来像我的作业,这就是为什么我不想泄露很多细节) 你可以使用lpSolve来解决这类问题。 https://cran.r-project.org/web/packages/lpSolve/lpSolve.pdf
基本思想是定义线性方程。对于每个人/站组合,您引入一个变量,例如jx
人j
在x
站。
然后你可以定义约束,例如
#each person one station
jx+jy+jz+jw=1
#each station one person
jx+ly+... =1
根据您的目标,您可以定义目标函数。 然后可以将这种方程式输入lpsolve
我最近在另一个例子中描述了用法 R - Combinations of a dataframe with constraints