<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/probability/blob/v0.25.0/tensorflow_probability/python/experimental/bayesopt/acquisition/probability_of_improvement.py#L25-L138) |

Parallel probability of improvement acquisition function.

Inherits From: [`AcquisitionFunction`](https://www.tensorflow.org/probability/api_docs/python/tfp/experimental/bayesopt/acquisition/AcquisitionFunction)

    tfp.experimental.bayesopt.acquisition.ParallelProbabilityOfImprovement(
        predictive_distribution,
        observations,
        seed=None,
        num_samples=100,
        transform_fn=None
    )

Computes the q-PI from a multivariate observation model. This is also known as
batch probability of improvement.

Requires that `predictive_distribution` has a `sample` method.

#### Examples

Build and evaluate a Parallel Probability of Improvement acquisition function.

    import numpy as np
    import tensorflow_probability as tfp

    tfd = tfp.distributions
    tfpk = tfp.math.psd_kernels
    tfp_acq = tfp.experimental.bayesopt.acquisition

    # Sample 10 20-dimensional index points and associated observations.
    index_points = np.random.uniform(size=[10, 20])
    observations = np.random.uniform(size=[10])

    # Build a Student T Process regression model conditioned on observed data.
    dist = tfd.StudentTProcessRegressionModel(
        kernel=tfpk.ExponentiatedQuadratic(),
        df=5.,
        observation_index_points=index_points,
        observations=observations)

    # Define a Parallel Probability of Improvement acquisition function.
    stp_pei = tfp_acq.ParallelProbabilityOfImprovement(
        predictive_distribution=dist,
        observations=observations,
        num_samples=10_000)

    # Evaluate the acquisition function at a new set of index points.
    pred_index_points = np.random.uniform(size=[6, 20])
    acq_fn_vals = stp_pei(pred_index_points)  # Has shape [6].

<br />

<br />

<br />

| ## Args ||
|---|---|
| `predictive_distribution` | `tfd.Distribution`-like, the distribution over observations at a set of index points. Must have a `sample` method. |
| `observations` | `Float` `Tensor` of observations. Shape has the form `[b1, ..., bB, e]`, where `e` is the number of index points (such that the event shape of `predictive_distribution` is `[e]`) and `[b1, ..., bB]` is broadcastable with the batch shape of `predictive_distribution`. |
| `seed` | PRNG seed; see tfp.random.sanitize_seed for details. |
| `num_samples` | The number of samples to use for the Parallel Probability of Improvement approximation. |
| `transform_fn` | Optional Python `Callable` that transforms objective values. This is used for optimizing a composite grey box function `g(f(x))` where `f` is our black box function and `g` is `transform_fn`. |

<br />

<br />

<br />

<br />

| ## Attributes ||
|---|---|
| `is_parallel` | Python `bool` indicating whether the acquisition function is parallel. <br /> Parallel (batched) acquisition functions evaluate batches of points rather than single points. |
| `num_samples` | <br /> <br /> |
| `observations` | Float `Tensor` of observations. |
| `predictive_distribution` | The distribution over observations at a set of index points. |
| `seed` | PRNG seed. |
| `transform_fn` | <br /> <br /> |

<br />

## Methods

### `__call__`

[View source](https://github.com/tensorflow/probability/blob/v0.25.0/tensorflow_probability/python/experimental/bayesopt/acquisition/probability_of_improvement.py#L113-L138)

    __call__(
        **kwargs
    )

Computes the Parallel Probability of Improvement.

<br />

<br />

<br />

| Args ||
|---|---|
| `**kwargs` | Keyword args passed on to the `sample` method of `predictive_distribution`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| Parallel Probability of improvement at index points implied by `predictive_distribution` (or overridden in `**kwargs`). ||

<br />