gpt4 book ai didi

c# - 解决条件填充难题的排列/算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:52 26 4
gpt4 key购买 nike

我一直在四处寻找,看看以前是否做过类似的事情,但没有看到任何与镜像条件类似的事情。为了让这个问题更容易理解,我将把它应用到一个棒球队的名单中。
给定的花名册结构按如下方式组织:C、1B、2B、3B、SS、2B/SS(或)、1B/3B、OF、OF、OF、UT(可以是任何职位)
每个玩家至少有一个他们有资格的非后备位置(允许多个位置的位置),并且在许多情况下不止一个(即,可以玩1B和of的玩家等)假设你是一个团队的经理,这个团队已经有了一些球员,你想看看你是否在你的任何一个位置上有空间容纳某个球员,或者你是否可以移动一个或多个球员来打开一个他有资格的位置。
我最初的尝试是使用一个条件排列,并在一个列表中收集每个球员所有可能的唯一“阵容”,在移动到下一个球员之前更新开放的位置。这也需要(因为移动玩家的顺序会影响下一个玩家的位置)重新排列正在循环的列表,然后再次循环我仍然认为这是一条路要走,但有许多陷阱,已阻碍了功能。
假设给定的开始循环的数据是:
一被评估球员的位置列表(如果他合适的话被检查)
2.名单上目前的球员名单和每个位置都是符合条件的(我目前正在存储一个名单列表,并使用列表索引作为球员的唯一标识符)
三。名单上目前空缺的职位
事实证明比我原先预料的更头痛。一位同事甚至向我建议,我所处的情况(在更大的范围内,涉及到每个对象的条件赋值)是NP完全的我确信这不是,因为一旦一名球员在一个正在测试的特定阵容中被重新定位,那么一旦另一名球员移动,整个名单就不需要重复。这是它的长和短,我终于决定开放它的论坛。
感谢任何人能提供的帮助由于限制,我不能发布部分代码(其中一些是遗留代码)。然而,它正在被翻译成.NET(目前是C#)如果需要其他信息,我将尝试重写post函数的一些短片段。
约瑟夫G。
2010年7月24日编辑
非常感谢您的回复。我确实研究过使用遗传算法,但最终放弃了它,因为用于确定有序结果的工作量是多余的。测试的最终目的是确定是否存在返回正数的场景。不需要确定每个工作解决方案的相对效益。
我很感激你对我提出问题的背景可能不熟悉的反馈。实际的模型是在多个特定于平台的构建服务器上分发构建命令它是可访问的,但我不想深入了解为什么某些生成任务只能在某些系统上执行,以及为什么某些系统只能执行某些类型的生成命令。
看来你已经领会了我所说的要点,但这里有一个不同的模型,不太具体。在这样一个有序的列表数组中有一组离散位置(我将这些称为“位置”):
(二、二、三、四、五、六、四、六、三、五、七、七、七、七、二、三、四、五、六、七)
另外,还有一个无序的列表数组(我称之为“employees”),如果它的数组有一个与它将被分配到的有序列表相同的成员,那么它只能占用其中一个插槽在最初的分配完成后,如果有一个额外的雇员来,我需要确定他是否可以填补其中一个空缺职位,如果不能,是否可以重新安排当前的雇员,以允许该雇员填补其中一个职位。
暴力是我想避免的,因为这是在40-50个对象的顺序(很快将增加),个人的决定将是非常昂贵的计算在运行时。

最佳答案

我一点也不懂棒球,如果我走错了路,我很抱歉。我确实喜欢打圆球,但是只有两个位置可以打圆球,一个击球手或者其他人。
你考虑过用Genetic Algorithms来解决这个问题吗?他们非常擅长解决np难问题,并且在rota和时间安排类型的问题上也非常出色。
你有一个解决方案模型,可以很容易地评分和操作,这是一个伟大的遗传算法的开始。
对于总置换量太大而无法计算的更复杂问题,遗传算法应该在相当短的时间内找到一个接近最优或最优的解(以及许多和许多其他有效解)尽管你希望每次都能找到最佳的解决方案,但你还是要使出浑身解数(我只是略过了这个问题,所以可能不是这样,但听起来可能是这样)。
在您的示例中,您将有一个解决方案类,它代表一个解决方案(棒球队的队列)。你随机产生20个方案,不管它们是否有效,然后你有一个评分算法,评分的解决方案。在你的情况下,一个更好的球员会比一个更差的球员得分更多,而任何无效的阵容(无论出于什么原因)都会迫使得分为0。
任何得分为0的解决方案都会被删除,并替换为新的随机解决方案,其余的解决方案会一起生成新的解决方案。从理论上讲,在足够长的时间之后,解决方案库应该得到改善。
这样做的好处是,不仅可以找到许多有效的独特产品线,还可以对它们进行评级。你没有在你的问题中明确指出需要对解决方案进行评级,但它提供了很多好处(例如,如果一名球员受伤,他可以暂时被评为-10或其他)所有其他玩家的得分都是基于他们的可量化数据。
它的可扩展性和性能良好。

关于c# - 解决条件填充难题的排列/算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3327434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com