Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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
Java 如何解决“;退出无延迟选择器以避免无限循环”;I'时出错;我在Optaplanner中使用了@PlanningPin?_Java_Optaplanner - Fatal编程技术网

Java 如何解决“;退出无延迟选择器以避免无限循环”;I'时出错;我在Optaplanner中使用了@PlanningPin?

Java 如何解决“;退出无延迟选择器以避免无限循环”;I'时出错;我在Optaplanner中使用了@PlanningPin?,java,optaplanner,Java,Optaplanner,我想使用optaplanner的“pin”功能进行固定操作。然而,我得到了“退出无延迟选择器(过滤(从SolutionEntitySelector(PersonalAssignment))以避免无限循环”的错误。我用@PlanningPin和movableEntitySelectionFilter都试过了。Optaplanner版本是7.32.0最终版,我也尝试了7.44.0.最终版。我已经搜索了很多,我可以看到您已经在7.31.0.Final版本中解决了这个问题 我已经生成了我的域,它运行良好

我想使用optaplanner的“pin”功能进行固定操作。然而,我得到了“退出无延迟选择器(过滤(从SolutionEntitySelector(PersonalAssignment))以避免无限循环”的错误。我用@PlanningPin和movableEntitySelectionFilter都试过了。Optaplanner版本是7.32.0最终版,我也尝试了7.44.0.最终版。我已经搜索了很多,我可以看到您已经在7.31.0.Final版本中解决了这个问题

我已经生成了我的域,它运行良好。我的问题是这里不止一家酒店。人们在不同的时间来旅馆。每个酒店都有不同的容量,如果有足够的空间,我想让人们去酒店。关于作业,我也有很多规定。我的域模型由两个@PlanningEntity、customShadowVariable和TimeGrain组成。结构如下:

@PlanningEntity(movableEntitySelectionFilter = PersonAssignmentSelectionFilter.class)
public class PersonAssignment extends AbstractPersistable {

private Person person;

private TimeGrain startingTimeGrain;

private TimeGrain endTime; // This added

private HotelDomain hotelDomain;


public TimeGrain getStartingTimeGrain() {
      return startingTimeGrain;
}

public void setStartingTimeGrain(TimeGrain startingTimeGrain) {
      this.startingTimeGrain = startingTimeGrain;
}

public TimeGrain getEndTime() {
      return endTime;
}

public void setEndTime(TimeGrain endTime) {
      this.endTime = endTime;
}

@PlanningVariable(valueRangeProviderRefs = { "hotelDomainRange" }, nullable = true)
    public HotelDomain getHotelDomain() {
      return hotelDomain;
}

public void setHotelDomain(HotelDomain hotelDomain) {
      this.hotelDomain = hotelDomain;
}
......
}

@DeepPlanningClone
公共类HotelDomain扩展了AbstractPersistable{
私人字符串酒店名称;
@CustomShadowVariable(variableListenerRef=@PlanningVariableReference(variableName=“紧占用,角色分配))
私人地图hotelOccupancyMap;
......
}

@PlanningEntity
公共类HotelOccupPancyperSlot扩展了AbstractPersistable{
@CustomShadowVariable(variableListenerClass=HotelDomainConservalListener.class,源={
@PlanningVariableReference(entityClass=PersonalAssignment.class,variableName=“hotelDomain”)})
私人整数占用;//天
@CustomShadowVariable(variableListenerRef=@PlanningVariableReference(variableName=“紧占用”))
私人名单人物;
.......
}

公共类HotelDomainConservateListener实现VariableListener{
......
}
config.xml是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<solver>
    <moveThreadCount>3</moveThreadCount> <!-- To solve faster by saturating multiple CPU cores -->
    <solutionClass>com.domain.HotelAccomodation</solutionClass>
    <entityClass>com.domain.PersonAssignment</entityClass>
    <entityClass>com.domain.HotelOccupancyPerSlot</entityClass>

    <scoreDirectorFactory>
        <scoreDrl>solver/solverScoreRules.drl</scoreDrl>
    </scoreDirectorFactory>
  
    <termination>
         <minutesSpentLimit>15</minutesSpentLimit>
    </termination>
</solver>

3.
com.domain.hotelacomodation
com.domain.PersonAssignment
com.domain.HotelOccupancyPerSlot
解算器/解算器核心规则.drl
15
如果我在HotelOccupanTyperSlot中使用@PlannigPin,没有问题,但我只想在PersonalAssignment类中使用它(或过滤器),因为它是我的基本类。有什么建议吗?我应该在配置中添加一些东西吗

谢谢:)

当移动选择过滤器过滤掉每一个移动时,就会出现“退出”警告(它永远不会返回true)。这不是一个错误,而是一个警告,因为如果你只看到一次,理论上在某些情况下可能是无害的侥幸

无论如何,对于所有选定的移动,筛选器何时返回
false

  • A) 您在solverConfig.xml中配置了一个从未返回
    true
  • B) 解决方案值范围没有值-OptaPlanner检查ins 7.44+是否正确,并自动执行正确的操作。如果有2个计划变量且只有1个没有值,则不确定是否执行正确的操作
  • C) 解决方案值范围只有一个值-这意味着move isDoable()为false。但我不记得这是一个问题
  • D) 解决方案值范围没有非固定值。请参见B)
  • E) 解决方案值范围只有1个非固定值。请参见C)

看看你的输入数据。你是在处理案例B、C、D还是E吗?

案例D。当所有的PersonalAssignment实体都被锁定时,它会给出这个警告。它只记录这个警告,然后什么都不会发生。啊,我明白了。因为不是所有的酒店分配都被锁定,你不能只说“那么,解决这个问题没有意义。”“。这是一个问题,请创建一个jira。
@PlanningEntity
public class HotelOccupancyPerSlot extends AbstractPersistable {

 @CustomShadowVariable(variableListenerClass = HotelDomainVariableListener.class, sources = {
         @PlanningVariableReference(entityClass = PersonAssignment.class, variableName = "hotelDomain") })
   private Integer tightOccupancy; // days

   @CustomShadowVariable(variableListenerRef = @PlanningVariableReference(variableName = "tightOccupancy"))
   private List<PersonAssignment> personAssignments;

.......
}
public class HotelDomainVariableListener implements VariableListener<PersonAssignment> {
......
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<solver>
    <moveThreadCount>3</moveThreadCount> <!-- To solve faster by saturating multiple CPU cores -->
    <solutionClass>com.domain.HotelAccomodation</solutionClass>
    <entityClass>com.domain.PersonAssignment</entityClass>
    <entityClass>com.domain.HotelOccupancyPerSlot</entityClass>

    <scoreDirectorFactory>
        <scoreDrl>solver/solverScoreRules.drl</scoreDrl>
    </scoreDirectorFactory>
  
    <termination>
         <minutesSpentLimit>15</minutesSpentLimit>
    </termination>
</solver>