- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在制作一个配对客户端,将 10 个人配对到两个团队中:
每个人选择四个他们想一起玩的人,从高到低排名。
然后根据该组中最强的关系组成两个团队。
您将如何创建解决此问题的算法?
例子:
Given players [a, b, c, d, e, f, g, h, i, j], '->' meaning a preference pick.
a -> b (weight: 4)
a -> c (weight: 3)
a -> d (weight: 2)
a -> e (weight: 1)
b -> d (weight: 4)
b -> h (weight: 3)
b -> a (weight: 2)
...and so on
这个问题表面上看起来很简单(毕竟只是一个撮合客户端),但想了想,似乎需要考虑的关系还是蛮多的。
编辑(从评论粘贴):理想情况下,我会避免采用蛮力方法扩展到需要 100 名玩家和 25 个团队的大型游戏,在这些游戏中,可以通过搜索功能来选择你喜欢的队友。我知道这个系统可能不是最适合它的目的 - 然而,这是一个有趣的问题,我想找到一个有效的解决方案,同时在此过程中学习一些东西。
最佳答案
首先是免责声明。
如果您的用户建议这样做,则有两种可能性。或者他们可以提供算法的确切细节,所以问他们。或者他们很可能不知道自己在说什么,只是当场产生了一个部分想法,在这种情况下,遗憾的是,它的平均值(value)并不高。
因此,一种选择是搜索配对在其他项目中的运作方式,完全无视这个想法。另一个是探索用户的想法。它可能不会变成一个好的系统,但它有可能会变成一个好的系统。无论如何,您都必须自己做一些实验。
现在,让我们谈谈您将乐于探索这个想法的情况。首先,为了将十个项目分成两组,每组五个,there are只需选择 (10,5)=252 种可能性,因此,除非系统必须每秒执行数百万次,否则您可以为所有这些计算一些分数,然后选择最好的一个。最直接的方法可能是考虑所有 2^{10} = 1024 种方法来形成 10 个元素的子集,然后探索子集大小为 5 的方法。但可能会有更好的,more to-the-point ,工具随时可用,具体取决于语言或框架。10选5为一组,没取的为另一组。
那么,组合的得分是多少?现在我们看看我们的偏好。
对于满足的每个偏好,我们可以将其权重、权重平方或其他方式添加到分数中。哪种效果最好肯定需要一些实验。
同样,对于每个不满足的偏好,我们可以根据其权重添加惩罚。
接下来,我们可以考虑所有玩家,并可能对每个偏好都不满足的玩家增加更多惩罚。
另一件需要考虑的事情是团队平衡。由于到目前为止唯一的数据是偏好(结果很可能是不够的),不平衡意味着一个团队满足了他们的许多偏好,而另一个团队只有很少的偏好,如果有的话。因此,我们根据(第一队的满意度总和)和(第二队的满意度总和)的绝对差值添加另一个惩罚。
当然还有其他因素需要考虑...
基于所有这些,构建一个至少表面上看起来合理的系统,然后再试验再试验,调整它,使其更符合匹配目标。
关于algorithm - 基于玩家偏好的团队创建算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50774618/
这个问题在这里已经有了答案: What does the question mark character ('?') mean in C++? (8 个答案) 关闭 7 年前。 这一行我看不懂为什么
在构建模式下甚至可以有两个玩家吗?查看 Roblox 开发者杂志文章“What did you sleigh?”,它在玩家列表中显示了两个“玩家”。 最佳答案 打开 Roblox Studio 转到任
在构建模式下甚至可以有两个玩家吗?查看 Roblox 开发者杂志文章“What did you sleigh?”,它在玩家列表中显示了两个“玩家”。 最佳答案 打开 Roblox Studio 转到任
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
“Clash of Clans”使用 Game Center 对玩家进行身份验证并将其与现有的远程存储游戏状态相关联。 据我所知,游戏仅在客户端提供玩家标识符。是否有支持的技术来安全地验证用户而不是仅
我正在开发多人游戏,但我无法找出如何将其他客户端连接到创建的游戏。我的意思是客户端 A 创建到服务器的套接字连接,其他客户端(A,B ...)如何连接到客户端 A?有人可以帮我吗? 附注我是网络编程新
我正在尝试使用浏览器控制台一步一步地制作井字游戏,并最终改进我的功能。然而,我被困在玩家2回合(ttt_player2_turn()),我必须检查箱子是否为空。看来我在这个例子中的论证有问题。感谢您的
如果我向上移动玩家 1 和玩家 2,假设我按下玩家 1 的向下键,我的玩家将停止向上移动。我找不到问题所在。有人可以帮助我并解释我做错了什么吗? package game; import java.a
我正在创建一个自上而下的 2D 游戏,并且使用 Box2D 来模拟物理,我的问题是: 如何使玩家保持与我的宇宙飞船的相对速度,并且仍然能够在飞船也在移动的情况下围绕我的玩家移动? 我在下面放了一个插图
我是 Java 新手,我正在尝试制作一个简单的游戏来娱乐。我首先尝试将 repaint 放入 PaintComponent() 中,它一直有效,直到我尝试添加一些背景。有谁知道如何让我的玩家在有或没有
//我正在尝试对玩家 2 的代码进行一些编辑,因此我删除了涉及玩家 1 的所有内容。但出于某种原因,如果没有玩家 1 的代码,玩家 2 根本不会执行任何操作。(假设使用 i、j、k 和 l 键 mov
我接到了一项任务,要编写一个由人类玩家和 AI 玩家组成的 NIM 游戏。游戏是“Misere”(最后一个必须拿起一根棍子的人输了)。 AI 应该使用 Minimax 算法,但它正在采取使其输得更快的
我是一名优秀的程序员,十分优秀!