加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 朋友选择算法

发布时间:2020-12-16 09:45:51 所属栏目:asp.Net 来源:网络整理
导读:在一个.net项目中,我们有一组200人,有两种类型,比方说x和y,需要分成7或8组. 我们有一个网页,人们可以在其中写下他们想要加入群组的其他成员.每个人都会建立一个通缉成员列表. 在此之后,应该有一个算法来构建考虑到人们评级的7-8个成员组,以及以下条件:每个
在一个.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,意味着它会得到更好的结果,因为你给它更多的时间来运行,并最终[在无限时间]它将找到最佳结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读