使用影子变量对计算性能进行评分
Score calculation performance using shadow variables
从分数计算的角度来看,假设影子变量有助于比不使用影子变量更快地得出解决方案是否正确。
使用影子变量允许 VariableListner 将依赖实体的值重置为更接近 final/optimal 值。
视情况而定。影子变量和分数计算都使用增量来创建增量计算。这些增量是扩展和获得高 分数计算速度 每秒的关键(请参阅最后的 INFO 日志记录行和基准报告)。无论您做什么,至少要关注不同大小的数据集的值。
理论上,如果有一个影子变量来简化评分规则,或者如果没有影子变量并且评分规则更复杂(并且可能使用 insertLogicals
等),应该没有太大关系).
在实践中,它通常很重要:对于车辆路径,IIRC 我已经看到影子变量 arrivalTime
显着提高了性能和可扩展性。
我的建议是在域中有意义时使用影子变量。例如 arrivalTime 等。但是在足够的情况下使用简单的计算 getter(无循环):例如 departmentTime(= arrivalTime + 持续时间)。其余使用评分规则。
最后,这是一个设计选择:评分规则是否需要自己计算出出发时间或到达时间,或者我们能否对其进行抽象 - 通过将它们放入模型中 - 并使规则更易于阅读?
从分数计算的角度来看,假设影子变量有助于比不使用影子变量更快地得出解决方案是否正确。
使用影子变量允许 VariableListner 将依赖实体的值重置为更接近 final/optimal 值。
视情况而定。影子变量和分数计算都使用增量来创建增量计算。这些增量是扩展和获得高 分数计算速度 每秒的关键(请参阅最后的 INFO 日志记录行和基准报告)。无论您做什么,至少要关注不同大小的数据集的值。
理论上,如果有一个影子变量来简化评分规则,或者如果没有影子变量并且评分规则更复杂(并且可能使用 insertLogicals
等),应该没有太大关系).
在实践中,它通常很重要:对于车辆路径,IIRC 我已经看到影子变量 arrivalTime
显着提高了性能和可扩展性。
我的建议是在域中有意义时使用影子变量。例如 arrivalTime 等。但是在足够的情况下使用简单的计算 getter(无循环):例如 departmentTime(= arrivalTime + 持续时间)。其余使用评分规则。
最后,这是一个设计选择:评分规则是否需要自己计算出出发时间或到达时间,或者我们能否对其进行抽象 - 通过将它们放入模型中 - 并使规则更易于阅读?