当前位置: 首页 > 知识库问答 >
问题:

OptaPlanner计划实体,即使没有可用的移动

袁翰池
2023-03-14

我正在尝试使用MoveSelectionFilter从计划中排除一些计划整体实例。

然而,即使我拒绝所有的移动,根据调试输出,实例仍然在构建启发式阶段进行初始规划。我使用WEAKEST_FIT启发式,两个自定义的MoveListFactory(目前根本不生成任何移动),并且没有默认的MoveListWorks。

如何阻止OptaPlanner规划这些实体?我看了护士名册示例,如果您提前日期但无法重现行为,它完全可以做我想做的事情。

编辑:过滤器肯定正在应用。我检查了MoveList的大小,它们都是空的。

我的过滤器看起来像这样:

public boolean accept(PatientAdmissionSchedule patientAdmissionSchedule, BedDesignation bedDesignation) {
    return false;
}

并像这样应用:

if (filter.accept(patientAdmissionSchedule, bedDesignation)) {
            for (Bed bed : bedList) {
                moveList.add(new BedChangeMove(bedDesignation, bed));
            }
        }

for (ListIterator<BedDesignation> it = bedDesignationList.listIterator(); it.hasNext();) {
        BedDesignation bedDesignation = it.next();
        if (!filter.accept(patientAdmissionSchedule, bedDesignation)) {
            it.remove();
        }
    }

在调试中,我有以下几行

2017-03-14 19:40:59,305 [SwingWorker-pool-4-thread-1] DEBUG     CH step (31), time spent (173), score (0hard/0medium/0soft), selected move count (7), picked move (Patient6(Night(7),null) {null -> 15(0)}).
2017-03-14 19:40:59,306 [SwingWorker-pool-4-thread-1] INFO  Construction Heuristic phase (0) ended: step total (32), time spent (174), best score (0hard/0medium/0soft).
2017-03-14 19:40:59,313 [SwingWorker-pool-4-thread-1] WARN      No doable selected move at step index (0), time spent (181). Terminating phase early.

我认为这进一步表明没有可供选择的动作。

规划实体与患者入院日程安排示例中的实体基本相同:

@PlanningEntity(difficultyWeightFactoryClass = BedDesignationDifficultyWeightFactory.class)
@XStreamAlias("BedDesignation")
public class BedDesignation extends AbstractPersistable {

private Admission admission;
private Bed bed;
private Night night;

@PlanningVariable(nullable = true, valueRangeProviderRefs = {"bedRange"},
        strengthComparatorClass = BedStrengthComparator.class)
public Bed getBed() {
    return bed;
}

我还尝试只使用一个返回空MoveList的MoveListFactory。但是仍然有这样的举动

2017-03-14 19:40:59,305 [SwingWorker-pool-4-thread-1] DEBUG     CH step (31), time spent (173), score (0hard/0medium/0soft), selected move count (7), picked move (Patient6(Night(7),null) {null -> 15(0)})

在构建启发式阶段被挑选出来。

共有1个答案

章高朗
2023-03-14

< code>@PlanningEntity中缺少< code > movableEntitySelectionFilter 属性

@PlanningEntity(movableEntitySelectionFilter = MovableLectureSelectionFilter.class, ...)
public class Lecture ...
 类似资料:
  • 我正在使用Optaplanner解决一个类似于病人入院调度示例的问题。 我面临两个问题。 首先,当一个规划实体(类似于示例中的bedDesignation)被某人(而不是optaplanner)定位时,该规划实体像其他实体一样被打分。手工放置的计划实体变为不可移动的计划实体,但仍被打分为可移动的计划实体。正因为如此,它打破了一些硬性的限制。 BedDesignationPillarPartSwap

  • 对于时间窗VRP的解决方案,我编辑了已求解的XML文件并设置了< code > 我添加了一个SectionFiler类,并按照建议进行了配置。在解决的xml数据文件的末尾,我添加了一些新的未分配客户。 我预计只有新的未分配客户才会被优化并插入现有链的末尾 - 事实并非如此 - 链条被破坏了。 问题:6.2中处理不可移动客户预约的具体内容是什么? 我认为jira问题https://issues.jb

  • 我正在尝试限制可以与特定实体关联的计划变量。在 OptaPlanner 手册的第 4.3.4.2.2 节中,显示了一个示例,但不清楚应该如何生成变量列表。列表应包含哪些内容?这些计划变量本身吗?它们可以是副本吗?如果允许复制,那么如何比较它们?如果不是,则在定义计划实体时计划变量不在范围内 - 我意识到这是一个 Java 问题,但如何从计划实体定义访问计划变量列表并不明显。 这是早期版本不支持的6

  • 我试图将规划实体和一个问题事实加入到约束流中,但我的IDE抛出了一个错误: 我的问题结构和运输问题很相似。我有节点和边,想要计算边的数量。 我的主要问题是: 和规划实体: 约束的代码为: 如果我尝试连接边与边,例如: 这不会出错。原因是,我尝试将节点连接到节点的Edge属性中的Edge中吗?有没有别的办法可以做我想做的事?

  • 我是Optaplanner的新手,我一直在考虑将VRP扩展到一个不同的问题空间。我用的是6.1.0-final。这是一个很难计算的问题,但下面是: 规划实体-装运(扩展Standstill),由运输商(即货船)锚定规划变量-终端(货物目的地),当然隐含运输商(作为VRP示例中的Vehicle这样的影子变量) 在这个路径问题中,货物直接运输到一个终端,然后再运回工厂。即一个运输机服务于一个终点站,然