关于在 optapy 中使用影子变量的说明
Clarification on using shadow variables in optapy
我正在尝试在 optapy 中使用影子变量,但我不确定我是否理解如何正确更新它们的值。 OptaPlanner 的文档建议更新影子变量,OptaPlanner 使用 VariableListener,但 optapy 似乎还不支持它们。我读错了吗,我不需要 VariableListener?
如果我使用 optapy 文档中的示例:
from optapy import planning_entity, planning_variable
from optapy.types import PlanningVariableGraphType
@planning_entity
class Customer:
@planning_variable(object, graph_type = PlanningVariableGraphType.CHAINED, ...)
def get_previous_standstill(self):
return self.previous_standstill
def set_previous_standstill(previous_standstill):
...
from optapy import planning_entity, inverse_relation_shadow_variable
@planning_entity
class Standstill:
@inverse_relation_shadow_variable(Customer, source_variable_name ="previous_standstill")
def get_next_customer(self):
return self.next_customer
def set_next_customer(Customer nextCustomer):
...
如何更新变量 next_customer?
目前不支持自定义影子变量(使用自定义 VariableListeners)(跟踪问题:https://github.com/optapy/optapy/issues/75),但支持内置影子变量(使用预定义 VariableListeners)。内建影子变量有:@inverse_relation_shadow_variable
,当源变量取对象为值时更新;和 @anchor_shadow_variable
当源链接变量的链开始发生变化时更新。
在上面的示例中,如果我有一个停顿 standstill
,那么每当 OptaPy 通过 customer.set_previous_standstill(standstill)
更新客户 customer
时,就会调用 standstill.set_next_customer(customer)
。
我正在尝试在 optapy 中使用影子变量,但我不确定我是否理解如何正确更新它们的值。 OptaPlanner 的文档建议更新影子变量,OptaPlanner 使用 VariableListener,但 optapy 似乎还不支持它们。我读错了吗,我不需要 VariableListener?
如果我使用 optapy 文档中的示例:
from optapy import planning_entity, planning_variable
from optapy.types import PlanningVariableGraphType
@planning_entity
class Customer:
@planning_variable(object, graph_type = PlanningVariableGraphType.CHAINED, ...)
def get_previous_standstill(self):
return self.previous_standstill
def set_previous_standstill(previous_standstill):
...
from optapy import planning_entity, inverse_relation_shadow_variable
@planning_entity
class Standstill:
@inverse_relation_shadow_variable(Customer, source_variable_name ="previous_standstill")
def get_next_customer(self):
return self.next_customer
def set_next_customer(Customer nextCustomer):
...
如何更新变量 next_customer?
目前不支持自定义影子变量(使用自定义 VariableListeners)(跟踪问题:https://github.com/optapy/optapy/issues/75),但支持内置影子变量(使用预定义 VariableListeners)。内建影子变量有:@inverse_relation_shadow_variable
,当源变量取对象为值时更新;和 @anchor_shadow_variable
当源链接变量的链开始发生变化时更新。
在上面的示例中,如果我有一个停顿 standstill
,那么每当 OptaPy 通过 customer.set_previous_standstill(standstill)
更新客户 customer
时,就会调用 standstill.set_next_customer(customer)
。