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

Optaplanner VRP从工作解决方案中删除客户

皮献
2023-03-14

基于这个来自云平衡问题的示例,我尝试将客户从工作解决方案中删除,如下所示:

Location toBeRemovedLocation = customerToBeRemoved.getLocation();
Location lookUpWorkingObject = (Location) scoreDirector.lookUpWorkingObject(toBeRemovedLocation);
scoreDirector.beforeProblemFactRemoved(lookUpWorkingObject);
routingSolution.getLocationList().remove(lookUpWorkingObject);
scoreDirector.afterProblemFactRemoved(lookUpWorkingObject);

Customer workingCustomer=(Customer) scoreDirector.lookUpWorkingObject(customerToBeRemoved);

for (Customer customer : routingSolution.getCustomerList()) {
    nextCustomer=customer.getNextCustomer();
    if (nextCustomer==workingCustomer) {
        scoreDirector.beforeVariableChanged(customer, "nextCustomer");
        customer.setNextCustomer(null);
        scoreDirector.afterVariableChanged(customer, "nextCustomer");
    }
}

scoreDirector.beforeEntityRemoved(workingCustomer);
routingSolution.getCustomerList().remove(workingCustomer);
scoreDirector.afterEntityRemoved(workingCustomer);
scoreDirector.triggerVariableListeners();

结果我得到了这个例外:

java.lang.IllegalStateException:实体(Customer--6361356485874019865)有一个值为(Customer--902742678799526425)的变量(previousStandstill),该变量有一个值为(null)的sourceVariableName变量(nextCustomer),该值不是该实体。验证该sourceVariableName变量的输入问题的一致性

在那之后,我也尝试了setPrevious标准化null

scoreDirector.beforeVariableChanged(customer, "previousStandstill");
customer.setPreviousStandstill(null);
scoreDirector.afterVariableChanged(customer, "previousStandstill");

但是,我收到:

java.lang.IllegalStateException:实体(客户--6361368382933429785)有一个带值的变量(前一个静态变量)(客户--9027434800388369945)它有一个带值(空)的源变量(下一个客户),它不是该实体。验证该源变量的输入问题的一致性。

需要帮忙吗,拜托。

共有1个答案

宦飞
2023-03-14

如果您当前有链[Customer1,Customer2,Customer3],VRP中的客户是链接/链接的

- Customer1: nextCustomer = Customer2
- Customer2: nextCustomer = Customer2, prevStandstill = Customer1
- Customer3: prevStandstill = Customer2

如果要从中删除Customer2,则必须修复之前和接下来的元素:

- Customer1: nextCustomer = Customer3
- Customer2: nextCustomer = null, prevStandstill = null
- Customer3: prevStandStill = Customer1
 类似资料:
  • 我写了一个相当基本的js函数,它以编程方式自动将iPhone键盘完美地对准每一个聚焦的输入字段(如果你喜欢,可以随意使用它!)。对齐主要由window.scroll处理——这是一种标准方法,适用于任何浏览器视图,UIWebView除外,因此是phonegap/cordova(2.1)。所以我需要一个变通方法。 我的工作代码: 工作在一切,但UIWebView,这是。正如我上面提到的,除了windo

  • 问题内容: 在SQL Server中有批量删除的解决方案吗? 我不能使用TRUNCATE,因为我想使用WHERE来限制行。 是否有诸如批量复制(bcp)之类的用于删除数据的东西? 问题答案: 不。 您需要带WHERE子句的DELETE:这是标准SQL。 您可以做的是批量删除,如下所示: 或者,如果您要删除很高比例的行…

  • 我们有一个具有时间和容量约束的VRP示例。 我们的场景如下: 我们有5辆车 我们的问题是,算法有时在得到新请求时,会丢弃一些我们已经标记为可行并添加到车辆调度中的节点(乘客请求)。如何防止丢弃已经添加到解决方案(然后在初始解决方案中)的节点? 我们尝试从初始解决方案中为节点设置int.max惩罚,并对我们当前添加的节点设置稍微小的惩罚。当已经确认的节点稍后被删除时,它确实减少了事件的数量,但它仍然

  • 我正在尝试让Gradle Artifactory插件来解析工件。 我的build.gradle文件在下面,被替换为正确的主机名 然而,当运行此命令时,它无法解析工件。依赖行是从artiFactory生成的。 我打算使用“旧”发布机制。我的Gradle版本是2.0。 我尝试了一个带有maven2默认值和gradle布局的artifactory存储库。 堆栈跟踪可在以下位置找到:http://text

  • 有人能分享一个关于如何使用Netflix导体的教程吗?github上有代码示例吗?我在亚马逊SWF上做了一个示例,了解了整个事情是如何工作的,但需要一些关于开始使用导体的指导。

  • 本文向大家介绍Linux中文件/文件夹无法删除的解决方案,包括了Linux中文件/文件夹无法删除的解决方案的使用技巧和注意事项,需要的朋友参考一下 前言 最近我们的服务器被黑客攻击,然后有些文件的属性被修改,导致我们无法删除病毒文件,同时采用 root 用户也无法删除,现在把解决方案记录下来。 普通删除 如果文件是当前用户的,那么使用 rm 命令就可以删除 如果无法删除,则尝试使用 root 用户