排名组件的可能组合

时间:2016-01-06 10:20:44

标签: r logic

我想找到这个问题的可能组合数量。这个问题正是一个实时场景的简化版本,人们选择他们想要工作的电台,并提供他们的优先(排名)列表。请帮我解决这个问题。我想用R来解决这个问题。

enter image description here

j<-c("Y", "X", "Z", "W")
l<-c("X", "Z", "W", "Y")
p<-c("Y", "Z", "X", "W")
t<-c("X", "Y", "Z", "W")

我想找到符合上述限制的所有可能的矢量。

想要添加图片以显示实际问题:

enter image description here

enter image description here

2 个答案:

答案 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

基本思想是定义线性方程。对于每个人/站组合,您引入一个变量,例如jxjx站。

然后你可以定义约束,例如

#each person one station
jx+jy+jz+jw=1
#each station one person
jx+ly+... =1

根据您的目标,您可以定义目标函数。 然后可以将这种方程式输入lpsolve

我最近在另一个例子中描述了用法 R - Combinations of a dataframe with constraints