Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从drools的工作内存加载DRL文件中的事实_Drools_Optaplanner - Fatal编程技术网

无法从drools的工作内存加载DRL文件中的事实

无法从drools的工作内存加载DRL文件中的事实,drools,optaplanner,Drools,Optaplanner,我有一个计划解决方案类,其中包含一个方法getProblemFacts(),用于在工作内存中加载事实。 但我无法在DRL文件中获得事实 一些代码片段如下所示: @Override public Collection<? extends Object> getProblemFacts() { List<Object> facts = new ArrayList<Object>(); facts.add(users);

我有一个计划解决方案类,其中包含一个方法getProblemFacts(),用于在工作内存中加载事实。 但我无法在DRL文件中获得事实

一些代码片段如下所示:

@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>