无法从drools的工作内存加载DRL文件中的事实
我有一个计划解决方案类,其中包含一个方法getProblemFacts(),用于在工作内存中加载事实。 但我无法在DRL文件中获得事实 一些代码片段如下所示:无法从drools的工作内存加载DRL文件中的事实,drools,optaplanner,Drools,Optaplanner,我有一个计划解决方案类,其中包含一个方法getProblemFacts(),用于在工作内存中加载事实。 但我无法在DRL文件中获得事实 一些代码片段如下所示: @Override public Collection<? extends Object> getProblemFacts() { List<Object> facts = new ArrayList<Object>(); facts.add(users);
@Override
public Collection<? extends Object> getProblemFacts() {
List<Object> facts = new ArrayList<Object>();
facts.add(users);
facts.add(resources);
facts.add(availabilityList);
facts.add(fromDate);
facts.add(toDate);
return facts
}
配置文件为:
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<solutionClass>org.volcare.brms.event.EventSolution</solutionClass>
<planningEntityClass>com.volcare.brms.EventPlanning</planningEntityClass>
<scoreDirectorFactory>
<scoreDefinitionType>HARD_SOFT</scoreDefinitionType>
<scoreDrl>/eventrule.drl</scoreDrl>
</scoreDirectorFactory>
<termination>
<maximumSecondsSpend>90</maximumSecondsSpend>
</termination>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
<unionMoveSelector>
<changeMoveSelector>
<valueSelector>
<variableName>eventDate</variableName>
</valueSelector>
</changeMoveSelector>
</unionMoveSelector>
<acceptor>
<entityTabuRatio>0.2</entityTabuRatio>
<lateAcceptanceSize>500</lateAcceptanceSize>
</acceptor>
<forager>
<acceptedCountLimit>4</acceptedCountLimit>
</forager>
</localSearch>
</solver>
org.volcare.brms.event.EventSolution
com.volcare.brms.EventPlanning
硬而软
/eventrule.drl
90
初试
事件日期
0.2
500
4.
可在DRL文件中访问规划实体。
如果我遗漏了什么,请告诉我。你的问题不太清楚。你能澄清一下吗?标题说您无法在DRL中加载事实,但问题的最后一行表示“规划实体在DRL文件中可访问”。我没有在事实中添加规划实体,因为它默认在工作内存中可访问,但其他事实在DRL文件中不可访问。例如,我试图访问用户事实,但它没有运行。添加了一个简单的规则来检查用户事实是否可用。还值得注意的是,如果插入
getProblemFacts()
的结果,那么工作内存中就没有用户
事实。相反,您有一个ArrayList
事实,其中包含各种类型的对象。这是因为,正如我所提到的,$users
不是一个列表。如果一个用户碰巧被插入到工作内存中,那么它就是一个用户。我不知道你的第二句话是什么意思。如果插入事实的ArrayList
,则需要编写DRL以匹配ArrayList
事实,然后在$yourlist
中的User()上进行匹配。
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<solutionClass>org.volcare.brms.event.EventSolution</solutionClass>
<planningEntityClass>com.volcare.brms.EventPlanning</planningEntityClass>
<scoreDirectorFactory>
<scoreDefinitionType>HARD_SOFT</scoreDefinitionType>
<scoreDrl>/eventrule.drl</scoreDrl>
</scoreDirectorFactory>
<termination>
<maximumSecondsSpend>90</maximumSecondsSpend>
</termination>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
<unionMoveSelector>
<changeMoveSelector>
<valueSelector>
<variableName>eventDate</variableName>
</valueSelector>
</changeMoveSelector>
</unionMoveSelector>
<acceptor>
<entityTabuRatio>0.2</entityTabuRatio>
<lateAcceptanceSize>500</lateAcceptanceSize>
</acceptor>
<forager>
<acceptedCountLimit>4</acceptedCountLimit>
</forager>
</localSearch>
</solver>