Package org.optaplanner.core.api.domain.variable

## Annotation Type PlanningVariable

-     @Target({METHOD,FIELD})
      @Retention(RUNTIME)
      public @interface PlanningVariable

  Specifies that a bean property (or a field) can be changed and should be optimized by the optimization algorithms.

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

- - ### Optional Element Summary

    Optional Elements
    Modifier and Type | Optional Element | Description
    --- | --- | ---
    `PlanningVariableGraphType` | `graphType` | In some use cases, such as Vehicle Routing, planning entities form a specific graph type, as specified by `PlanningVariableGraphType`.
    `boolean` | `nullable` | A nullable planning variable will automatically add the planning value null to the `ValueRangeProvider`'s range.
    `Class<? extends Comparator>` | `strengthComparatorClass` | Allows a collection of planning values for this variable to be sorted by strength.
    `Class<? extends SelectionSorterWeightFactory>` | `strengthWeightFactoryClass` | The `SelectionSorterWeightFactory` alternative for `strengthComparatorClass()`.
    `String[]` | `valueRangeProviderRefs` | Any `ValueRangeProvider` annotation on a `PlanningSolution` or `PlanningEntity` will automatically be registered with its `ValueRangeProvider.id()`.

- - ### Element Detail

    - #### valueRangeProviderRefs

          String[] valueRangeProviderRefs

      Any `ValueRangeProvider` annotation on a `PlanningSolution` or `PlanningEntity` will automatically be registered with its `ValueRangeProvider.id()`.

      There should be at least 1 element in this array.

      Returns:
        1 (or more) registered `ValueRangeProvider.id()`
      Default:
        {}

  - - #### nullable

          boolean nullable

      A nullable planning variable will automatically add the planning value null to the `ValueRangeProvider`'s range.

      Nullable true is not compatible with `PlanningVariableGraphType.CHAINED` true. Nullable true is not compatible with a primitive property type.

      Returns:
        true if null is a valid value for this planning variable
      Default:
        false

  - - #### graphType

          PlanningVariableGraphType graphType

      In some use cases, such as Vehicle Routing, planning entities form a specific graph type, as specified by `PlanningVariableGraphType`.
      Returns:
        never null, defaults to `PlanningVariableGraphType.NONE`
      Default:
        org.optaplanner.core.api.domain.variable.PlanningVariableGraphType.NONE

  - - #### strengthComparatorClass

          Class<? extends Comparator> strengthComparatorClass

      Allows a collection of planning values for this variable to be sorted by strength. A strengthWeight estimates how strong a planning value is. Some algorithms benefit from planning on weaker planning values first or from focusing on them.

      The `Comparator` should sort in ascending strength. For example: sorting 3 computers on strength based on their RAM capacity: Computer B (1GB RAM), Computer A (2GB RAM), Computer C (7GB RAM),

      Do not use together with `strengthWeightFactoryClass()`.

      Returns:
        `PlanningVariable.NullStrengthComparator` when it is null (workaround for annotation limitation)
      See Also:
        `strengthWeightFactoryClass()`
      Default:
        org.optaplanner.core.api.domain.variable.PlanningVariable.NullStrengthComparator.class

  - - #### strengthWeightFactoryClass

          Class<? extends SelectionSorterWeightFactory> strengthWeightFactoryClass

      The `SelectionSorterWeightFactory` alternative for `strengthComparatorClass()`.

      Do not use together with `strengthComparatorClass()`.

      Returns:
        `PlanningVariable.NullStrengthWeightFactory` when it is null (workaround for annotation limitation)
      See Also:
        `strengthComparatorClass()`
      Default:
        org.optaplanner.core.api.domain.variable.PlanningVariable.NullStrengthWeightFactory.class