Java PDPTW在OptaPlanner中最便宜的插入?
我已配置时间窗口(PDPTW)的收货和交货问题。我的配置使用了一个链式规划变量,与VRPTW示例非常类似。Java PDPTW在OptaPlanner中最便宜的插入?,java,optaplanner,Java,Optaplanner,我已配置时间窗口(PDPTW)的收货和交货问题。我的配置使用了一个链式规划变量,与VRPTW示例非常类似。FIRST\u FIT\u discreating构造启发式算法和大多数局部搜索算法一样有效。但是,当我尝试最便宜的\u插入构造启发式时,我得到以下例外: 线程“main”java.lang.IllegalArgumentException中的异常:具有resolvedCacheType(阶段)和resolvedSelectionOrder(排序)的valueSelectorConfig(v
FIRST\u FIT\u discreating
构造启发式算法和大多数局部搜索算法一样有效。但是,当我尝试最便宜的\u插入
构造启发式时,我得到以下例外:
线程“main”java.lang.IllegalArgumentException中的异常:具有resolvedCacheType(阶段)和resolvedSelectionOrder(排序)的valueSelectorConfig(valueSelectorConfig(previousVisit))需要基于EntityIndependentValueSelector(已初始化(从SolutionPropertyValueSelector(previousVisit)))。检查@ValueRangeProvider注释
问题是我并不真正理解错误消息。我已经检查了我的@ValueRangeProvider
注释,似乎一切都是正确的。似乎提出了一个类似的问题,这里建议使用一种变通方法来手动排序每个实体的值范围列表。对我来说,不清楚这个变通方法是否也适用于我的案例,或者如何应用它
我正在使用OptaPlanner 6.3.0.Final
要实例化planner,我将使用以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<environmentMode>REPRODUCIBLE</environmentMode>
<randomType>MERSENNE_TWISTER</randomType>
<solutionClass>com.github.rinde.logistics.pdptw.solver.optaplanner.PDPSolution</solutionClass>
<entityClass>com.github.rinde.logistics.pdptw.solver.optaplanner.ParcelVisit</entityClass>
<entityClass>com.github.rinde.logistics.pdptw.solver.optaplanner.Visit</entityClass>
<scoreDirectorFactory>
<scoreDefinitionType>HARD_SOFT_LONG</scoreDefinitionType>
<incrementalScoreCalculatorClass>com.github.rinde.logistics.pdptw.solver.optaplanner.ScoreCalculator</incrementalScoreCalculatorClass>
<initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
</scoreDirectorFactory>
<termination>
<unimprovedMillisecondsSpentLimit>180000</unimprovedMillisecondsSpentLimit>
</termination>
<constructionHeuristic>
<constructionHeuristicType>CHEAPEST_INSERTION</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
<unionMoveSelector>
<moveIteratorFactory>
<moveIteratorFactoryClass>com.github.rinde.logistics.pdptw.solver.optaplanner.MoveItFactory</moveIteratorFactoryClass>
</moveIteratorFactory>
<changeMoveSelector>
<filterClass>com.github.rinde.logistics.pdptw.solver.optaplanner.ChangeFilter</filterClass>
</changeMoveSelector>
<changeMoveSelector>
<entitySelector>
<filterClass>com.github.rinde.logistics.pdptw.solver.optaplanner.EntityFilter</filterClass>
</entitySelector>
</changeMoveSelector>
</unionMoveSelector>
</localSearch>
</solver>
可复制
MERSENNE_捻线机
com.github.rinde.logistics.pdptw.solver.optaplanner.pdp解决方案
com.github.rinde.logistics.pdptw.solver.optaplanner.ParcelVisit
com.github.rinde.logistics.pdptw.solver.optaplanner.Visit
硬的、软的、长的
com.github.rinde.logistics.pdptw.solver.optaplanner.ScoreCalculator
只剩下你了
180000
最便宜的插入
com.github.rinde.logistics.pdptw.solver.optaplanner.MoveItFactory
com.github.rinde.logistics.pdptw.solver.optaplanner.ChangeFilter
com.github.rinde.logistics.pdptw.solver.optaplanner.EntityFilter
此处定义了这些类:
我之所以有兴趣尝试最便宜的插入
,是因为我发现我自己实现的最便宜的插入优于第一次拟合
以及我觉得非常可疑的模拟退火
。我想将我自己最便宜的插入与OptaPlanner的插入进行比较,以验证我对OptaPlanner的使用是否正确
更新:我刚刚用OptaPlanner 7.0.0-SNAPSHOT进行了尝试,问题似乎已经解决了(由于API更改,我不得不更改部分代码,并且不得不将我的项目更改为使用Java 8).它固定在OptaPlanner 7.0.0.Beta1中。它固定在OptaPlanner 7.0.Beta1中。它固定在OptaPlanner 6.4.0.Final中(因此也固定在OptaPlanner 7.X中)
事实证明,我的配置中有一个bug,我使用的是6.3.0.Final,而不是6.4.0.Final。它在OptaPlanner 6.4.0.Final中得到了修复(因此也在OptaPlanner 7.X中得到了修复)
原来我的配置中有一个bug,我使用的是6.3.0.Final,而不是6.4.0.Final。看起来像个bug。请注意,最便宜的插入并没有被大量使用,因为它的伸缩性比First Fit变体差得多。我无法用最便宜的插入复制optaplanner示例VRPTW。检查您是否可以使用6.4.0.Final复制它,并将您的解算器配置添加到问题中。如果是有效配置,请重新打开PLANNER-597。谢谢!我会很快检查(可能是周一)我添加了配置文件。看起来像个bug。请注意,最便宜的插入并没有被大量使用,因为它的伸缩性比First Fit变体差得多。我无法用最便宜的插入复制optaplanner示例VRPTW。检查您是否可以使用6.4.0.Final复制它,并将您的解算器配置添加到问题中。如果是有效配置,请重新打开PLANNER-597。谢谢!我将很快(可能是星期一)检查它。我添加了配置文件。