当前位置: 首页 > 知识库问答 >
问题:

有没有办法保存所有找到的可行分数?

张鸿宝
2023-03-14

我正在建立一个学生时间表生成器,我需要一种方法来产生一个以上的解决方案。有什么方法可以节省可行的分数或xhard/ysoft的分数吗?

我需要能够输出多个潜在的时间表,这样学生将有一个时间表的选择,而不是另一个,如果出于任何原因,他们不想要“最好的”时间表(也许他们不喜欢其中一个教授,也许他们不想要上午8点的课,无论什么)

我最初的想法是使用bestSolutionChanged事件侦听器省去所有可行的解决方案。这样做的问题是,一旦它找到一个0hard/0soft分数,它就会忽略之后的所有分数,包括相等的分数。

理想情况下,我想保存所有的分数0hard/-3soft或更好,但只是能够保存任何可行的分数或迫使optaplanner寻找一个新的最佳分数将是有用的。

共有1个答案

吕俊美
2023-03-14

这不是解决方案,而是对问题的分析:

攻击bestsolutionrecaller显然不仅仅是一个大麻烦,我们也不希望鼓励这种行为,因为它会使升级到新版本成为一个更大的麻烦。因此,不要指望我们在求解器配置中添加一种简单的方法来解决这个问题。话虽如此,显然需要解决这一共同问题。

当找到一个新的最佳解决方案时,它是从工作解决方案(OptaPlanner中的内部解决方案)中克隆出来的(定义见文档)。这允许我们记住当工作解决方案改变时新最佳解决方案。这也意味着BestSolutionChangedEvents获得了一个规划克隆,并可以安全地将其发送到另一个线程,例如将其封送到客户端(假定您创建的任何problemFactChange都是复制而不是修改),而不会被修改工作解决方案的求解器线程损坏。

新的最佳解决方案意味着workingscore>bestscore。当它执行workingscore>=bestscore时,我们需要更多的规划克隆(这对CPU来说有点昂贵),但我们也可以发出BestSolutionChangedEvents,当且仅当启用了一个标志时,当然,因为大多数用户(不像您自己)不想要这种行为。

一个建议是在BestSolutionChangedOrSameEvent旁边创建一个单独的BestSolutionChangedEvent。这可能并不理想,因为我们需要能够检测是否有人需要那些额外的计划克隆。

另一个建议是在 配置中仅使用一个标志,该标志将>切换为BestSolutionChangedEvent>=行为。

请创建一个jira(参见网页上的“获取帮助”)并将其链接到这里,或者创建一个支持票(也参见网页上的“获取帮助”)。

 类似资料:
  • 我有一个CSV文件,我正在尝试导入MongoDB数据库中的CSV文件。不幸的是,这种体验并没有像我希望的那样工作。CSV文件的内容不相关,因为当我使用MongoDB Compass手动导入它时,没有问题,它按我想要的方式出现。因此,如果可能的话,我试图使用Java和Spring Boot将其从本地文件夹保存到MongoDB,但我找不到任何关于如何这样做的好建议或解释。 我用的是Spring Boo

  • 例如: 在上面的json中,我想检查这个json路径我不担心价值。 我可以用来完成吗?我以前使用过Stefan Goessner的库,但现在已经很旧了。 我想要Python中类似于此但不存在的东西()

  • 问题内容: 我想知道是否有可能以编程方式发现特定API的所有端点。 因此,例如,如果我使用浏览器或curl获取此URL:https : //api.twitter.com/1.1/ 我可能会收到类似以下内容的JSON响应: 当然,Twitter可以选择发布还是不发布这种格式。因此,作为一个附带问题,是否有任何Java或Java库可以自动映射和发布您在控制器中创建的API路由? 问题答案: 由于没有

  • 有没有办法列出AWS中的所有资源?对于所有区域,所有资源...例如列出所有EC2实例、所有VPC、API Gateway中的所有API等...我想列出我帐户的所有资源,因为我很难找到我现在可以放弃的资源。

  • 问题内容: 它或多或少地显示:Python中是否有一种(简单的)方法可以列出Windows系统中所有当前正在使用的驱动器号? (我的google-fu似乎让我失望了。) 有关: 枚举Windows(C ++ / Win32)中所有可用的驱动器号 问题答案: 改编自:http : //www.faqts.com/knowledge_base/view.phtml/aid/4670

  • 问题内容: PHP数组可以为其元素包含数组。这些数组可以具有数组,依此类推。有没有办法找出PHP数组中存在的最大嵌套?一个示例是一个函数,如果初始数组不具有数组作为元素,则返回1;如果至少一个元素是数组,则返回2,依此类推。 问题答案: 应该这样做: 编辑:非常快速地测试了它,它似乎可以工作。