在有时间窗的容量车辆路径问题(CVRPTW)中,我无法跟踪车辆的持续容量。
我试图让车辆在达到最大容量时返回仓库。
根据我在这里得到的回复https://groups.google.com/forum/#!topic/optaplanner-dev/IMG_7D1JvmQ我目前正在尝试实现每天n次的设计。
我尝试在车辆上使用阴影变量,并在其上使用变量侦听器。
我将车辆等级修改如下:
@XStreamAlias("VrpVehicle")
public class Vehicle extends AbstractPersistable implements Standstill {
...planning entities
...other shadow variables
protected Integer currentDemand;
@CustomShadowVariable(sources = {@PlanningVariableReference(variableName = "previousStandstill")})
public Integer getCurrentDemand() { return currentDemand; }
}
}
我的可变监听器如下:
public class VehicleCapacityReuseVariableListener implements VariableListener<Customer> {
@Override
public void afterEntityAdded(ScoreDirector scoreDirector,Customer customer) {
if (customer instanceof TimeWindowedCustomer) {
updateVehicleDemandTotal(scoreDirector, (TimeWindowedCustomer) customer);
}
}
@Override
public void afterVariableChanged(ScoreDirector scoreDirector, Customer customer) {
if (customer instanceof TimeWindowedCustomer) {
updateVehicleDemandTotal(scoreDirector, (TimeWindowedCustomer) customer);
}
}
...
protected void updateVehicleDemandTotal(ScoreDirector scoreDirector, Customer sourceCustomer) {
Standstill previousStandstill = sourceCustomer.getPreviousStandstill();
Vehicle vehicle = previousStandstill == null ? null : previousStandstill.getVehicle();
TimeWindowedCustomer shadowCustomer = (TimeWindowedCustomer) sourceCustomer;
Integer currentDemand = shadowCustomer.getDemand();
Vehicle currentVehicle = shadowCustomer.getVehicle();
Vehicle nextVehicle = currentVehicle;
while (shadowCustomer != null) {
scoreDirector.beforeVariableChanged(shadowCustomer, "vehicle");
currentVehicle = shadowCustomer.getVehicle();
scoreDirector.afterVariableChanged(shadowCustomer, "vehicle");
shadowCustomer = shadowCustomer.getNextCustomer();
if (shadowCustomer != null) {
nextVehicle = shadowCustomer.getVehicle();
if (!currentVehicle.equals(nextVehicle)){
nextVehicle.setCurrentDemand(currentDemand);
currentVehicle.setCurrentDemand(currentVehicle.getCurrentDemand() - currentDemand);
currentDemand = nextVehicle.getCurrentDemand();
}
currentDemand += shadowCustomer.getDemand();
nextVehicle.setCurrentDemand(currentDemand);
}
}
}
}
如果有人能帮我追踪容量,那就太好了。
我认为解决方案(返回仓库)是将下一个客户设置为“仓库”客户。
附言。还有其他与此相关的stackoverflow问题,我已经尝试过了,但没有用。为了完整起见:
也谢谢你花时间看这个,非常感谢任何回复的人。
我不能完全回答您的问题,但我确实发现您的侦听器实现中存在问题。线路
scoreDirector.beforeVariableChanged(shadowCustomer, "vehicle");
scoreDirector.afterVariableChanged(shadowCustomer, "vehicle");
必须围绕修改计划变量的任何行,例如:
nextVehicle.setCurrentDemand(currentDemand);
我认为杰夫的建议是,如果你的容量达到0,你的车。getDistanceToPreviousStandstill函数将把到仓库的距离添加到计算中。(这只是我的猜测,我没有深入阅读杰夫的设计评论)。
我正在创建一个 Flume 代理的概念验证,该代理将缓冲事件,并在接收器不可用时停止使用源中的事件。仅当接收器再次可用时,才应处理缓冲的事件,然后源重新启动消耗。 为此,我创建了一个简单的代理,它从SpoolDir读取并写入文件。为了模拟接收器服务关闭,我更改了文件权限,以便Flume无法写入。然后我启动Flume,一些事件被缓冲在内存通道中,当通道容量已满时,它将停止消耗事件,正如预期的那样。一
问题内容: adminCov继续返回null。当我运行SQL事件探查器时,可以看到生成的linq,将其粘贴到management Studio中时,可以得到预期的结果。 LinqToSql生成此代码: 当我执行时,我得到一个结果。我在这里想念什么?感谢您的帮助,〜ck在圣地亚哥 问题答案: 这确实是一个很好的问题。在日期范围内选择发票时,Linq to SQL遇到了相同的问题。其中一些未包含在生成
问题内容: 我敢肯定有人在附近有一个可插拔的应用程序(或教程),但是我很难找到它:我希望能够跟踪特定对象的“视图”数量(就像这里的问题一样)在stackoverflow上有一个“视图计数”)。 如果用户未登录,则我不介意尝试放置cookie(或记录IP),以便他们不会因刷新页面而无意间增加视图计数;并且如果用户已登录,则仅允许他们跨会话/浏览器/ IP地址进行一个“查看”。我认为没有比这更理想的选
问题内容: 我有一个带有变量StudentID的班级Student: 我希望变量StudentID继续分配给每个Student创建的新ID号。每个ID号都应比上一个创建的ID号大一个,并且应等于已创建的对象总数。现在,每个对象的ID号为1。 问题答案: 将studentID设为静态成员 静态成员将在整个类的每个实例中保留,无论有多少个clas实例。
我一直在测试Laravel,我运行了以下查询: 数据库只包含1条记录,我var_dump$site,我得到的输出类似于下面,除了返回了近900,000个字符。 如果我保持查询简单,例如: 输出为: 对象(照亮\数据库\雄辩\收集)#121(1){[“项目”:受保护]= 这是相当少(1,600个字符),运行第一个查询时的性能很慢,我做了什么错事,因为我担心性能(为什么第一个查询这么慢)。 谢谢
问题内容: Python有类Tkinter的变量,等等,这些都共享方法,和。作为第二个参数传递给的函数将传递四个参数。 例如,这些似乎是。 第三个参数似乎是触发跟踪的模式,在我的情况下,变量已更改。但是,第一个看似空字符串的变量是什么?如果我不得不猜测该变量的内部名称,第二秒是什么? 问题答案: 第一个参数 是内部变量名称。您可以将此名称用作tkinter和方法的参数。如果你给你的变量名称(例如: