# builders.domain.observability
Domain specification
# PartiallyObservable
A domain must inherit this class if it is partially observable.
"Partially observable" means that the observation provided to the agent is computed from (but generally not equal to) the internal state of the domain. Additionally, according to literature, a partially observable domain must provide the probability distribution of the observation given a state and action.
# get_observation_distribution PartiallyObservable
get_observation_distribution(
self,
state: D.T_state,
action: Optional[StrDict[list[D.T_event]]] = None
) -> Distribution[StrDict[D.T_observation]]
Get the probability distribution of the observation given a state and action.
In mathematical terms (discrete case), given an action
# Parameters
- state: The state to be observed.
- action: The last applied action (or None if the state is an initial state).
# Returns
The probability distribution of the observation.
# get_observation_space PartiallyObservable
get_observation_space(
self
) -> StrDict[Space[D.T_observation]]
Get the (cached) observation space (finite or infinite set).
By default, PartiallyObservable.get_observation_space()
internally
calls PartiallyObservable._get_observation_space_()
the first time and automatically caches its value to make
future calls more efficient (since the observation space is assumed to be constant).
# Returns
The observation space.
# is_observation PartiallyObservable
is_observation(
self,
observation: StrDict[D.T_observation]
) -> bool
Check that an observation indeed belongs to the domain observation space.
TIP
By default, this function is implemented using the skdecide.core.Space.contains()
function on the domain
observation space provided by PartiallyObservable.get_observation_space()
, but it can be overridden for
faster implementations.
# Parameters
- observation: The observation to consider.
# Returns
True if the observation belongs to the domain observation space (False otherwise).
# _get_observation_distribution PartiallyObservable
_get_observation_distribution(
self,
state: D.T_state,
action: Optional[StrDict[list[D.T_event]]] = None
) -> Distribution[StrDict[D.T_observation]]
Get the probability distribution of the observation given a state and action.
In mathematical terms (discrete case), given an action
# Parameters
- state: The state to be observed.
- action: The last applied action (or None if the state is an initial state).
# Returns
The probability distribution of the observation.
# _get_observation_space PartiallyObservable
_get_observation_space(
self
) -> StrDict[Space[D.T_observation]]
Get the (cached) observation space (finite or infinite set).
By default, PartiallyObservable._get_observation_space()
internally
calls PartiallyObservable._get_observation_space_()
the first time and automatically caches its value to make
future calls more efficient (since the observation space is assumed to be constant).
# Returns
The observation space.
# _get_observation_space_ PartiallyObservable
_get_observation_space_(
self
) -> StrDict[Space[D.T_observation]]
Get the observation space (finite or infinite set).
This is a helper function called by default from PartiallyObservable._get_observation_space()
, the difference
being that the result is not cached here.
TIP
The underscore at the end of this function's name is a convention to remind that its result should be constant.
# Returns
The observation space.
# _is_observation PartiallyObservable
_is_observation(
self,
observation: StrDict[D.T_observation]
) -> bool
Check that an observation indeed belongs to the domain observation space.
TIP
By default, this function is implemented using the skdecide.core.Space.contains()
function on the domain
observation space provided by PartiallyObservable._get_observation_space()
, but it can be overridden for
faster implementations.
# Parameters
- observation: The observation to consider.
# Returns
True if the observation belongs to the domain observation space (False otherwise).
# TransformedObservable
A domain must inherit this class if it is transformed observable.
"Transformed observable" means that the observation provided to the agent is deterministically computed from (but generally not equal to) the internal state of the domain.
# get_observation TransformedObservable
get_observation(
self,
state: D.T_state,
action: Optional[StrDict[list[D.T_event]]] = None
) -> StrDict[D.T_observation]
Get the deterministic observation given a state and action.
# Parameters
- state: The state to be observed.
- action: The last applied action (or None if the state is an initial state).
# Returns
The probability distribution of the observation.
# get_observation_distribution PartiallyObservable
get_observation_distribution(
self,
state: D.T_state,
action: Optional[StrDict[list[D.T_event]]] = None
) -> Distribution[StrDict[D.T_observation]]
Get the probability distribution of the observation given a state and action.
In mathematical terms (discrete case), given an action
# Parameters
- state: The state to be observed.
- action: The last applied action (or None if the state is an initial state).
# Returns
The probability distribution of the observation.
# get_observation_space PartiallyObservable
get_observation_space(
self
) -> StrDict[Space[D.T_observation]]
Get the (cached) observation space (finite or infinite set).
By default, PartiallyObservable.get_observation_space()
internally
calls PartiallyObservable._get_observation_space_()
the first time and automatically caches its value to make
future calls more efficient (since the observation space is assumed to be constant).
# Returns
The observation space.
# is_observation PartiallyObservable
is_observation(
self,
observation: StrDict[D.T_observation]
) -> bool
Check that an observation indeed belongs to the domain observation space.
TIP
By default, this function is implemented using the skdecide.core.Space.contains()
function on the domain
observation space provided by PartiallyObservable.get_observation_space()
, but it can be overridden for
faster implementations.
# Parameters
- observation: The observation to consider.
# Returns
True if the observation belongs to the domain observation space (False otherwise).
# _get_observation TransformedObservable
_get_observation(
self,
state: D.T_state,
action: Optional[StrDict[list[D.T_event]]] = None
) -> StrDict[D.T_observation]
Get the deterministic observation given a state and action.
# Parameters
- state: The state to be observed.
- action: The last applied action (or None if the state is an initial state).
# Returns
The probability distribution of the observation.
# _get_observation_distribution PartiallyObservable
_get_observation_distribution(
self,
state: D.T_state,
action: Optional[StrDict[list[D.T_event]]] = None
) -> Distribution[StrDict[D.T_observation]]
Get the probability distribution of the observation given a state and action.
In mathematical terms (discrete case), given an action
# Parameters
- state: The state to be observed.
- action: The last applied action (or None if the state is an initial state).
# Returns
The probability distribution of the observation.
# _get_observation_space PartiallyObservable
_get_observation_space(
self
) -> StrDict[Space[D.T_observation]]
Get the (cached) observation space (finite or infinite set).
By default, PartiallyObservable._get_observation_space()
internally
calls PartiallyObservable._get_observation_space_()
the first time and automatically caches its value to make
future calls more efficient (since the observation space is assumed to be constant).
# Returns
The observation space.
# _get_observation_space_ PartiallyObservable
_get_observation_space_(
self
) -> StrDict[Space[D.T_observation]]
Get the observation space (finite or infinite set).
This is a helper function called by default from PartiallyObservable._get_observation_space()
, the difference
being that the result is not cached here.
TIP
The underscore at the end of this function's name is a convention to remind that its result should be constant.
# Returns
The observation space.
# _is_observation PartiallyObservable
_is_observation(
self,
observation: StrDict[D.T_observation]
) -> bool
Check that an observation indeed belongs to the domain observation space.
TIP
By default, this function is implemented using the skdecide.core.Space.contains()
function on the domain
observation space provided by PartiallyObservable._get_observation_space()
, but it can be overridden for
faster implementations.
# Parameters
- observation: The observation to consider.
# Returns
True if the observation belongs to the domain observation space (False otherwise).
# FullyObservable
A domain must inherit this class if it is fully observable.
"Fully observable" means that the observation provided to the agent is equal to the internal state of the domain.
WARNING
In the case of fully observable domains, make sure that the observation type D.T_observation is equal to the state type D.T_state.
# get_observation TransformedObservable
get_observation(
self,
state: D.T_state,
action: Optional[StrDict[list[D.T_event]]] = None
) -> StrDict[D.T_observation]
Get the deterministic observation given a state and action.
# Parameters
- state: The state to be observed.
- action: The last applied action (or None if the state is an initial state).
# Returns
The probability distribution of the observation.
# get_observation_distribution PartiallyObservable
get_observation_distribution(
self,
state: D.T_state,
action: Optional[StrDict[list[D.T_event]]] = None
) -> Distribution[StrDict[D.T_observation]]
Get the probability distribution of the observation given a state and action.
In mathematical terms (discrete case), given an action
# Parameters
- state: The state to be observed.
- action: The last applied action (or None if the state is an initial state).
# Returns
The probability distribution of the observation.
# get_observation_space PartiallyObservable
get_observation_space(
self
) -> StrDict[Space[D.T_observation]]
Get the (cached) observation space (finite or infinite set).
By default, PartiallyObservable.get_observation_space()
internally
calls PartiallyObservable._get_observation_space_()
the first time and automatically caches its value to make
future calls more efficient (since the observation space is assumed to be constant).
# Returns
The observation space.
# is_observation PartiallyObservable
is_observation(
self,
observation: StrDict[D.T_observation]
) -> bool
Check that an observation indeed belongs to the domain observation space.
TIP
By default, this function is implemented using the skdecide.core.Space.contains()
function on the domain
observation space provided by PartiallyObservable.get_observation_space()
, but it can be overridden for
faster implementations.
# Parameters
- observation: The observation to consider.
# Returns
True if the observation belongs to the domain observation space (False otherwise).
# _get_observation TransformedObservable
_get_observation(
self,
state: D.T_state,
action: Optional[StrDict[list[D.T_event]]] = None
) -> StrDict[D.T_observation]
Get the deterministic observation given a state and action.
# Parameters
- state: The state to be observed.
- action: The last applied action (or None if the state is an initial state).
# Returns
The probability distribution of the observation.
# _get_observation_distribution PartiallyObservable
_get_observation_distribution(
self,
state: D.T_state,
action: Optional[StrDict[list[D.T_event]]] = None
) -> Distribution[StrDict[D.T_observation]]
Get the probability distribution of the observation given a state and action.
In mathematical terms (discrete case), given an action
# Parameters
- state: The state to be observed.
- action: The last applied action (or None if the state is an initial state).
# Returns
The probability distribution of the observation.
# _get_observation_space PartiallyObservable
_get_observation_space(
self
) -> StrDict[Space[D.T_observation]]
Get the (cached) observation space (finite or infinite set).
By default, PartiallyObservable._get_observation_space()
internally
calls PartiallyObservable._get_observation_space_()
the first time and automatically caches its value to make
future calls more efficient (since the observation space is assumed to be constant).
# Returns
The observation space.
# _get_observation_space_ PartiallyObservable
_get_observation_space_(
self
) -> StrDict[Space[D.T_observation]]
Get the observation space (finite or infinite set).
This is a helper function called by default from PartiallyObservable._get_observation_space()
, the difference
being that the result is not cached here.
TIP
The underscore at the end of this function's name is a convention to remind that its result should be constant.
# Returns
The observation space.
# _is_observation PartiallyObservable
_is_observation(
self,
observation: StrDict[D.T_observation]
) -> bool
Check that an observation indeed belongs to the domain observation space.
TIP
By default, this function is implemented using the skdecide.core.Space.contains()
function on the domain
observation space provided by PartiallyObservable._get_observation_space()
, but it can be overridden for
faster implementations.
# Parameters
- observation: The observation to consider.
# Returns
True if the observation belongs to the domain observation space (False otherwise).