我使用OptaPlanner 8.19.0。这个问题有两个实体类。
但它出现了以下例外:
未能实例化[org.optaplanner.core.api.solver.SolverManager]:工厂方法“SolverManager”引发异常;嵌套的异常是java。lang.IllegalArgumentException:config(QueuedValuePlacerConfig(ValueSelectorConfig(taskCombos),ChangeMoveSelectorConfig(null,ValueSelectorConfig(null)))没有配置实体类,并且由于实体类集中有多个实体类([class com.aiseeding.aps.hf.domain.MachineStageFirst,class com.aiseeding.aps.hf.domain.MachineStageSecond]),因此无法自动推断。
PlanningEntity1和PlanningEntity2相同,但取值范围不同。我试图在@PlanngingEntity上使用value eRangeProvider,但optaplanner说它不支持列表变量。所以我使用了两个实体类,每个实体类都有一个value eProviderRange
解决方案类别:
@PlanningSolution
@XStreamAlias("TaTaskAssigningSolution")
public class APSSolution extends AbstractPersistable {
@ProblemFactCollectionProperty
private List<Tank> taskTypeList;
@ValueRangeProvider(id = "taskRangeStageFirst")
@ProblemFactCollectionProperty
private List<TaskCombo> taskComboListStageFirst;
@ValueRangeProvider(id = "taskRangeStageSecond")
@ProblemFactCollectionProperty
private List<TaskCombo> taskComboListStageSecond;
@ProblemFactCollectionProperty
private List<Tank> tankList;
@PlanningEntityCollectionProperty
private List<Machine> machineList;
@PlanningEntityCollectionProperty
private List<Machine> machineListSecond;
@XStreamConverter(BendableScoreXStreamConverter.class)
@PlanningScore(bendableHardLevelsSize = 1, bendableSoftLevelsSize = 4)
private BendableLongScore score;
/** Relates to {@link Task#()}. */
private int frozenCutoff; // In minutes
private Param param;
private List<Stage> stageList;
private Map<String,Task> taskMap;
private Map<String,Machine> machineMap;
public APSSolution(long id){}
}
PlanningEntity1和PlanningEntity2:
@PlanningEntity
@XStreamAlias("TaEmployee")
public class MachineStageFirst extends Machine {
@PlanningListVariable(valueRangeProviderRefs = "taskRangeStageFirst")
private List<TaskCombo> taskCombos;
public MachineStageFirst()
{ }
public MachineStageFirst(long id, String fullName) {
super.setId(id);
super.setFullName(fullName);
setTaskCombos(new ArrayList<>());
}
public List<TaskCombo> getTaskCombos() {
return taskCombos;
}
public void setTaskCombos(List<TaskCombo> taskCombos) {
this.taskCombos = taskCombos;
}
}
conifg XML:
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<!--<environmentMode>FULL_ASSERT</environmentMode>--><!-- To slowly prove there are no bugs in this code -->
<moveThreadCount>1</moveThreadCount> To solve faster by saturating multiple CPU cores
<solutionClass>com.aps.hf.domain.APSSolution</solutionClass>
<entityClass>com.aps.hf.domain.MachineStageFirst</entityClass>
<entityClass>com.aps.hf.domain.MachineStageSecond</entityClass>
<scoreDirectorFactory>
<easyScoreCalculatorClass>com.aiseeding.aps.hf.score.APSConstraintScoreCalculator</easyScoreCalculatorClass>
</scoreDirectorFactory>
<termination>
<secondsSpentLimit>10</secondsSpentLimit>
</termination>
<constructionHeuristic>
<queuedValuePlacer>
<entitySelector>
<entityClass>com.aiseeding.aps.hf.domain.MachineStageFirst</entityClass>
</entitySelector>
<valueSelector id="placerValueSelector">
<cacheType>PHASE</cacheType>
<selectionOrder>SORTED</selectionOrder>
<sorterManner>INCREASING_STRENGTH</sorterManner>
</valueSelector>
<changeMoveSelector>
<entitySelector>
<cacheType>PHASE</cacheType>
<selectionOrder>SORTED</selectionOrder>
<sorterManner>DECREASING_DIFFICULTY</sorterManner>
</entitySelector>
<valueSelector mimicSelectorRef="placerValueSelector"/>
</changeMoveSelector>
</queuedValuePlacer>
</constructionHeuristic>
<constructionHeuristic>
<queuedValuePlacer>
<entitySelector>
<entityClass>com.aiseeding.aps.hf.domain.MachineStageSecond</entityClass>
</entitySelector>
<valueSelector id="placerValueSelector">
<cacheType>PHASE</cacheType>
<selectionOrder>SORTED</selectionOrder>
<sorterManner>INCREASING_STRENGTH</sorterManner>
</valueSelector>
<changeMoveSelector>
<entitySelector>
<cacheType>PHASE</cacheType>
<selectionOrder>SORTED</selectionOrder>
<sorterManner>DECREASING_DIFFICULTY</sorterManner>
</entitySelector>
<valueSelector mimicSelectorRef="placerValueSelector"/>
</changeMoveSelector>
</queuedValuePlacer>
</constructionHeuristic>
<localSearch>
<changeMoveSelector>
<entitySelector>
... <!-- Normal selector properties -->
<entityClass>com.aps.hf.domain.MachineStageFirst</entityClass>
</entitySelector>
<selectionOrder>ORIGINAL</selectionOrder>
</changeMoveSelector>
<acceptor>
<entityTabuSize>5</entityTabuSize>
</acceptor>
<forager>
</forager>
</localSearch>
<localSearch>
<changeMoveSelector>
<entitySelector>
... <!-- Normal selector properties -->
<entityClass>com.aps.hf.domain.MachineStageSecond</entityClass>
</entitySelector>
<selectionOrder>ORIGINAL</selectionOrder>
</changeMoveSelector>
<acceptor>
<entityTabuSize>5</entityTabuSize>
</acceptor>
<forager>
</forager>
</localSearch>
</solver>
问题是由两个实体CALSS还是排队变量引起的?
多谢啦~
具有多个实体类(每个实体类至少有一个真正的(=非影子)规划变量)的情况既困难又罕见。
@PlanningListVariable
尚未与多个实体类兼容。
我正在研究来自OptaPlanner的示例用例。我也找不到任何类似的例子,可以在一个规划实体中求解多个规划变量。例如,在护士名册中,一个轮班的每个可能需要多个分配的。在这种情况下,如何利用planner和编写规则呢?
我从optaplanner示例的CourclemCourse示例中扩展了我的问题库。 由于需要解决现有的问题,我开始使用两个变量,都来自“实体的Value range provider”。 现在我正在努力改进我的解决方案,当我检查解决方案时,我意识到有一些课程可以更好(基于分数),如果他们只是交换,或左移或右移,等等。 我不确定这种方法是否能解决这个问题,但我发现,使用nearbySelectio
本文向大家介绍JavaScript交换两个变量值的七种解决方案,包括了JavaScript交换两个变量值的七种解决方案的使用技巧和注意事项,需要的朋友参考一下 前言 这篇文章总结了七种办法来交换a和b的变量值 交换变量值方案一 最最最简单的办法就是使用一个临时变量了,不过使用临时变量的方法实在是太low了 首先把a的值存储到临时变量中,然后b赋值给a,最后拿出临时变量中的a值赋给b,这个办法是最基
本文向大家介绍Python实现全局变量的两个解决方法,包括了Python实现全局变量的两个解决方法的使用技巧和注意事项,需要的朋友参考一下 本文针对Python的全局变量实现方法简述如下: 先来看下面一段测试程序: 运行结果是: 很显然,这并不是我们想要的结果。 针对这一问题的解决方法就是采用全局变量: 运行结果为: 需要注意:哪里需要全局变量,哪里声明一下;但是函数千万不要传参数,比如用Fuc(
问题 你想创建类变量和实例变量(属性)。 解决方案 类变量 class Zoo @MAX_ANIMALS: 50 MAX_ZOOKEEPERS: 3 helpfulInfo: => "Zoos may contain a maximum of #{@constructor.MAX_ANIMALS} animals and #{@MAX_ZOOKEEPERS} zoo keep
我有以下CVRPTW问题,我正在尝试使用OptaPlanner找到一个好的解决方案。时间为hh: mm: ss格式。 我的DRL文件是这样的。此外,我还定义了一个与准备时间之前到达相关的硬约束。我的解算器配置如下,但终止标记不同: 这是问题陈述: 我有2辆车,容量为10件物品和1个仓库。 这是解决方案(客户按车辆分组,按到达时间排序): (D=需求,Ar.T=到达时间,上一个D=与上一个位置的距离