# tf_agents.bandits.environments.drifting_linear_environment.DriftingLinearDynamics

<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/drifting_linear_environment.py#L87-L264) |

A drifting linear 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.drifting_linear_environment.DriftingLinearDynamics(
        observation_distribution: types.Distribution,
        observation_to_reward_distribution: types.Distribution,
        drift_distribution: types.Distribution,
        additive_reward_distribution: types.Distribution
    )

This is a drifting linear environment which computes rewards as:

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

where `t` is the environment time. `observation_to_reward` slowly rotates over
time. The environment time is incremented in the base class after the reward
is computed. The parameters `observation_to_reward` and `additive_reward` are
updated at each time step.
In order to preserve the norm of the `observation_to_reward` (and the range
of values of the reward) the drift is applied in form of rotations, i.e.,

observation_to_reward(t) = R(theta(t)) \* observation_to_reward(t - 1)

where `theta` is the angle of the rotation. The angle is sampled from a
provided input distribution.

<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. |
| `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`. |
| `drift_distribution` | A scalar distribution from [`tfp.distributions`](https://www.tensorflow.org/probability/api_docs/python/tfp/distributions) of type tf.float32. It represents the angle of rotation. |
| `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/drifting_linear_environment.py#L254-L264)

    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/drifting_linear_environment.py#L244-L252)

    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/drifting_linear_environment.py#L211-L212)

    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/drifting_linear_environment.py#L214-L242)

    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 />