Tag: optaplanner

我如何使用Drools Planner?

我有一个日程安排问题,每个学生表达他对讲座的偏好,同时为所有学生生成课程时间表(如果可能的话,以批处理模式)。 根据我的阅读和理解,Drools Planner非常适合解决此类问题。 我在我的Eclipse IDE中安装了Drools和GEF。 一切都很好。 不幸的是,我无法弄清楚如何构建一个简单的项目。 我在网上寻找参考资料,并找到了Drools Planner的例子,这些例子看起来很棒。 但是,除了一些代码片段之外,我没有找到任何可以引导人们完成简单案例的好教程。 如何为匹配/日程安排问题建模,其中3名具有独特时间和课程偏好的学生希望注册4门课程? 我如何启动代码,在哪里放置约束,我调用哪些类,等等? 任何帮助将不胜感激!! 谢谢!!

OptaPlanner中的穷举搜索不适用于非常简单的示例

我们正在尝试创建一个简单的示例来测试OptaPlanner的function。 在下文中,我们展示了我们想出的东西。 我们的例子的问题在于,当我们选择详尽的搜索算法来解决问题时,OptaPlanner会以错误的答案快速终止,即使零不是ValueRangeProvider提供的可能解决方案,也是零。 此外,在使用本地搜索时,不会在求解期间设置PlanningVariable。 我们尝试更改OptaPlanner(例如TSP)附带的示例中的算法,该算法有效。 因此我们的问题是:为什么我们的代码不起作用? MyPlanningEntity.java: import org.optaplanner.core.api.domain.entity.PlanningEntity; import org.optaplanner.core.api.domain.variable.PlanningVariable; @PlanningEntity public class MyPlanningEntity { @PlanningVariable(valueRangeProviderRefs = {“myListValueRangeProvider”}) private int myPlanningVariable; public int getMyPlanningVariable() { return myPlanningVariable; } public void setMyPlanningVariable(int myPlanningVariable) { this.myPlanningVariable = myPlanningVariable; } } MySolution.java: import org.optaplanner.core.api.domain.solution.PlanningEntityProperty; import org.optaplanner.core.api.domain.solution.PlanningSolution; import org.optaplanner.core.api.domain.solution.Solution; import org.optaplanner.core.api.domain.valuerange.CountableValueRange; import org.optaplanner.core.api.domain.valuerange.ValueRangeFactory; import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider; import org.optaplanner.core.api.score.buildin.simple.SimpleScore; import […]

使用Optaplanner解决VRPTWPD

我是optaplanner的新手,我希望用它来解决拾取和交付的VRPTW问题(VRPTWPD)。 我首先从示例repo中获取VRPTW代码 。 我想添加它来解决我的问题。 但是,我无法返回一个符合优先级/车辆限制的解决方案(必须在交付之前完成拾取,并且两者都必须由同一车辆完成)。 我一直在返回一个解决方案,其中硬分数是我期望的这样一个解决方案(即我可以在一个小样本问题中加上所有违规,并看到硬分数与我为这些违规分配的处罚相匹配)。 我尝试的第一种方法是遵循Geoffrey De Smet在此处概述的步骤 – https://stackoverflow.com/a/19087210/351400 每个Customer都有一个变量customerType ,描述它是皮卡(PU)还是交付(DO)。 它还有一个名为parcelId的变量,用于指示正​​在拾取或交付的包裹。 我向名为parcelIdsOnboard的Customer添加了一个shadow变量。 这是一个HashSet,它包含驱动程序在访问给定Customer时所拥有的所有parcelId。 保持parcelIdsOnboard更新的我的VariableListener如下所示: public void afterEntityAdded(ScoreDirector scoreDirector, Customer customer) { if (customer instanceof TimeWindowedCustomer) { updateParcelsOnboard(scoreDirector, (TimeWindowedCustomer) customer); } } public void afterVariableChanged(ScoreDirector scoreDirector, Customer customer) { if (customer instanceof TimeWindowedCustomer) { updateParcelsOnboard(scoreDirector, (TimeWindowedCustomer) customer); } } protected void updateParcelsOnboard(ScoreDirector scoreDirector, […]

OptaPlanner:ValueSelector无法使用ValueRangeType.FROM_PLANNING_ENTITY_PROPERTY

我在ConstructionHeuristic阶段使用MoveSelector配置。 它在EntitySelector中配置filterClass和comparatorClass时工作正常。 但是,在ValueSelector会话中,我无法使用“ValueRangeType.FROM_PLANNING_ENTITY_PROPERTY”计划变量。 它抛出此exception: java.lang.IllegalArgumentException :具有resolvedCacheType(PHASE)和resolvedSelectionOrder(SORTED)的valueSelectorConfig(ValueSelectorConfig(row))需要基于EntityIndependentValueSelector(FromEntityPropertyValueSelector(row))。 检查@ValueRangeProvider注释。 示例NQueen配置:… row PHASE SORTED ..RowWeightStrength …. **我需要使用valueRange取决于我的计划实体,以便为每个女王使用PossibleRowList(为了性能)任何建议请? 提前致谢。

自行车信使/ TSPPD与OptaPlanner

亲爱的OptaPlanner专家! 我想使用OptaPlanner(或类似的开源Java框架)来优化自行车信使服务的路线。 让我们假设5个信使必须从某个来源获取30个信封并将它们传送到某个目的地: X(FROM) Y(FROM) X(TO) Y(TO) envelope 1 13745 55419 13883 55756 envelope 2 8406 53246 13937 55854 envelope 3 15738 57396 35996 79499 envelope 4 12045 60418 19349 57118 envelope 5 13750 56416 35733 78403 envelope 6 13190 57068 11860 59749 envelope 7 15021 55768 14098 57379 envelope 8 11513 58543 11501 59683 […]