asp.net – 朋友选择算法

在一个.net项目中,我们有一组200人,有两种类型,比方说x和y,需要分成7或8组.

我们有一个网页,人们可以在其中写下他们想要加入群组的其他成员.每个人都会建立一个通缉成员列表.

在此之后,应该有一个算法来构建考虑到人们评级的7-8个成员组,以及以下条件:每个组至少有2个人(每个类型)(x / y).

我很确定必须有一个类似于此的众所周知的算法,但没有找到.谁知道怎么做?

最佳答案 这个问题闻起来有
NP-Hard,所以我建议使用人工智能工具.

可能的方法是steepest ascent hill climbing [SAHC]
首先,我们将定义我们的效用函数(让它成为你),如问题的评论中所述. [每个用户的群组中的朋友总数].让我们为非法解决方案定义你(非法)= -1.
接下来,我们定义我们的’世界’:S是所有可能解决方案的组合].
对于S中的每个解决方案我们定义:
next(s)= {所有可能将一个人移动到另一个组}

我们现在要做的就是随机重启运行SAHC:

1. best<- -INFINITY 
2. while there is more time
3. choose a random legal solution
4. NEXT <- next(s)
5. if max{ U(NEXT) } < u(s): //s is the top of the hill
   5.1. if u(s) > best: best <- u(s) //if s is better then the previous result - store it.
   5.2. go to 2. //restart the hill climbing from a different random point.
6. else:
   6.1. s <- max{ NEXT } //climb on the steepest hill.
   6.2. goto 4.
7. return best //when out of time, return the best solution found so far.

它是anytime algorithm,意味着它会得到更好的结果,因为你给它更多的时间来运行,并最终[在无限时间]它将找到最佳结果.

点赞