# tf_agents.bandits.environments.piecewise_stochastic_environment.PiecewiseStationaryDynamics

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/bandits/environments/piecewise_stochastic_environment.py#L38-L237) |

A piecewise stationary environment dynamics.

Inherits From: [`EnvironmentDynamics`](https://www.tensorflow.org/agents/api_docs/python/tf_agents/bandits/environments/non_stationary_stochastic_environment/EnvironmentDynamics)

    tf_agents.bandits.environments.piecewise_stochastic_environment.PiecewiseStationaryDynamics(
        observation_distribution: types.Distribution,
        interval_distribution: types.Distribution,
        observation_to_reward_distribution: types.Distribution,
        additive_reward_distribution: types.Distribution
    )

This is a piecewise stationary environment which computes rewards as:

rewards(t) = observation(t) \* observation_to_reward(i) + additive_reward(i)

where t is the environment time (env_time) and i is the index of each piece.
The environment time is incremented after the reward is computed while the
piece index is incremented at the end of the time interval. The parameters
observation_to_reward(i), additive_reward(i), and the length of interval, are
drawn from given distributions at the beginning of each temporal interval.

<br />

<br />

<br />

| ## Args ||
|---|---|
| `observation_distribution` | A distribution from tfp.distributions with shape `[batch_size, observation_dim]` Note that the values of `batch_size` and `observation_dim` are deduced from the distribution. |
| `interval_distribution` | A scalar distribution from [`tfp.distributions`](https://www.tensorflow.org/probability/api_docs/python/tfp/distributions). The value is casted to `int64` to update the time range. |
| `observation_to_reward_distribution` | A distribution from [`tfp.distributions`](https://www.tensorflow.org/probability/api_docs/python/tfp/distributions) with shape `[observation_dim, num_actions]`. The value `observation_dim` must match the second dimension of `observation_distribution`. |
| `additive_reward_distribution` | A distribution from [`tfp.distributions`](https://www.tensorflow.org/probability/api_docs/python/tfp/distributions) with shape `[num_actions]`. This models the non-contextual behavior of the bandit. |

<br />

<br />

<br />

<br />

| ## Attributes ||
|---|---|
| `action_spec` | Specification of the actions. |
| `batch_size` | Returns the batch size used for observations and rewards. |
| `observation_spec` | Specification of the observations. |

<br />

## Methods

### `compute_optimal_action`

[View source](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/bandits/environments/piecewise_stochastic_environment.py#L227-L237)

    compute_optimal_action(
        observation: https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/NestedTensor
    ) -> https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/NestedTensor

### `compute_optimal_reward`

[View source](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/bandits/environments/piecewise_stochastic_environment.py#L217-L225)

    compute_optimal_reward(
        observation: https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/NestedTensor
    ) -> https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/NestedTensor

### `observation`

[View source](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/bandits/environments/piecewise_stochastic_environment.py#L165-L166)

    observation(
        unused_t
    ) -> https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/NestedTensor

Returns an observation batch for the given time.

<br />

<br />

<br />

| Args ||
|---|---|
| `env_time` | The scalar int64 tensor of the environment time step. This is incremented by the environment after the reward is computed. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| The observation batch with spec according to `observation_spec.` ||

<br />

### `reward`

[View source](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/bandits/environments/piecewise_stochastic_environment.py#L168-L215)

    reward(
        observation: https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/NestedTensor,
        t: https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/Int
    ) -> https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/NestedTensor

Reward for the given observation and time step.

<br />

<br />

<br />

| Args ||
|---|---|
| `observation` | A batch of observations with spec according to `observation_spec.` |
| `env_time` | The scalar int64 tensor of the environment time step. This is incremented by the environment after the reward is computed. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A batch of rewards with spec shape \[batch_size, num_actions\] containing rewards for all arms. ||

<br />