Annotation Interface ShadowVariable


@Target({METHOD,FIELD}) @Retention(RUNTIME) @Repeatable(List.class) public @interface ShadowVariable
Specifies that a bean property (or a field) is a custom shadow variable of 1 or more source variables. The source variable may be a genuine PlanningVariable, PlanningListVariable, or another shadow variable.

It is specified on a getter of a java bean property (or a field) of a PlanningEntity class.

  • Element Details

    • supplierName

      String supplierName
      Preview feature.

      If set, this ShadowVariable is a supplier variable, and it is a name of a method annotated with ShadowSources that computes the value of this ShadowVariable.

      If set, variableListenerClass(), sourceEntityClass() and sourceVariableName() must all be unset.

      Returns:
      the method that computes the value of this ShadowVariable.
      Default:
      ""
    • variableListenerClass

      Class<? extends AbstractVariableListener> variableListenerClass
      A VariableListener or ListVariableListener gets notified after a source planning variable has changed. That listener changes the shadow variable (often recursively on multiple planning entities) accordingly. Those shadow variables should make the score calculation more natural to write.

      For example: VRP with time windows uses a VariableListener to update the arrival times of all the trailing entities when an entity is changed. Must not be set if supplierName() is set.

      Returns:
      ShadowVariable.NullVariableListener when the attribute is omitted (workaround for annotation limitation). The variable listener class that computes the value of this shadow variable.
      Default:
      ai.timefold.solver.core.api.domain.variable.ShadowVariable.NullVariableListener.class
    • sourceEntityClass

      Class<?> sourceEntityClass
      The PlanningEntity class of the source variable.

      Specified if the source variable is on a different Class than the class that uses this referencing annotation.

      Must not be set if supplierName() is set.

      Returns:
      ShadowVariable.NullEntityClass when the attribute is omitted (workaround for annotation limitation). Defaults to the same Class as the one that uses this annotation.
      Default:
      ai.timefold.solver.core.api.domain.variable.ShadowVariable.NullEntityClass.class
    • sourceVariableName

      String sourceVariableName
      The source variable name.

      Must not be set if supplierName() is set.

      Returns:
      never null, a genuine or shadow variable name
      Default:
      ""