- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在四处寻找,看看以前是否做过类似的事情,但没有看到任何与镜像条件类似的事情。为了让这个问题更容易理解,我将把它应用到一个棒球队的名单中。
给定的花名册结构按如下方式组织: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/
我正在努力处理查询的 WHERE 部分。查询本身包含一个基于两个表中都存在的 ID 的 LEFT JOIN。但是,我要求 where 语句仅返回其中一列中存在的最大单个结果。目前我返回连接中的所有值,
我有这个代码来改变文件系统的大小。问题是,即使满足 if 条件,它也不会进入 if 条件,而我根本没有检查 if 条件。它直接进入 else 条件。 运行代码后的结果 post-install-ray
假设我有一个包含 2 列的 Excel 表格:单元格 A1 到 A10 中的日期和 B1 到 B10 中的值。 我想对五月日期的所有值求和。我有3种可能性: {=SUM((MONTH(A1:A10)=
伪代码: SELECT * FROM 'table' WHERE ('date' row.date 或 ,我们在Stack Overflow上找到一个类似的问题: https://stackove
我有下面这行代码做一个简单的查询 if ($this->fulfilled) $criteria->addCondition('fulfilled ' . (($this->fulfilled
如果在数据库中找到用户输入的键,我将尝试显示“表”中的数据。目前我已将其设置为让数据库检查 key 是否存在,如下所示: //Select all from table if a key entry
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 5 年前。 Improve th
在MYSQL中可以吗 一共有三个表 任务(task_id、task_status、...) tasks_assigned_to(ta_id、task_id、user_id) task_suggeste
我想先根据用户的状态然后根据用户名来排序我的 sql 请求。该状态由 user_type 列设置: 1=活跃,2=不活跃,3=创始人。 我会使用此请求来执行此操作,但它不起作用,因为我想在“活跃”成员
下面两个函数中最专业的代码风格是什么? 如果函数变得更复杂和更大,例如有 20 个检查怎么办? 注意:每次检查后我都需要做一些事情,所以我不能将所有内容连接到一个 if 语句中,例如: if (veh
我在 C# 项目中使用 EntityFramework 6.1.3 和 SQL Server。我有两个查询,基本上应该执行相同的操作。 1. Exams.GroupBy(x=>x.SubjectID)
我试图在 case when 语句中放入两个条件,但我在 postgresql 中遇到语法错误 case when condition 1 and condition 2 then X else Y
我正在构建一个连接多个表的查询,一个表 prodRecipe 将包含某些行的数据,但不是全部,但是 tmp_inv1 将包含所有行的计数信息。问题是,tmp_inv1.count 取决于某个项目是否在
我有一个涉及 couples of rows which have a less-than-2-hours time-difference 的查询(~0.08333 天): SELECT mt1.*,
我有一个包含许多这样的 OR 条件的代码(工作正常)来检查其中一个值是否为空,然后我们抛出一条错误消息(所有这些都必须填写) } elsif ( !$params{'account'}
我有一个名为 spGetOrders 的存储过程,它接受一些参数:@startdate 和 @enddate。这将查询“订单”表。表中的一列称为“ClosedDate”。如果订单尚未关闭,则此列将保留
在代码中,注释部分是我需要解决的问题...有没有办法在 LINQ 中编写这样的查询?我需要这个,因为我需要根据状态进行排序。 var result = ( from contact in d
我正在尝试创建一个允许省略参数的存储过程,但如果提供了参数,则进行 AND 操作: CREATE PROCEDURE MyProcedure @LastName Varchar(30)
我正在寻找一种方法来过滤我的主机文件中的新 IP 地址。我创建了一个脚本,每次我用来自矩阵企业管理器的数据调用它时都会更新我的主机文件。它工作正常。但是我必须找到一个解决方案,只允许更新 10.XX.
所以我正在做一种 slider ,当它完全向下时隐藏向下按钮,反之亦然,当向上按钮隐藏时,我遇到了问题。 var amount = $('slide').attr('number'); $('span
我是一名优秀的程序员,十分优秀!