Beispiel #1
0
def create_oracle(mpc, set_vrep, abs_frac, abs_err, rel_err):
    """
    Creates the optimization problem oracle.
    
    Parameters
    ----------
    mpc : MPC
        The control law to be used.
    set_vrep : np.array
        Vertex representation of the set to be partitioned (every row is a
        vertex).
    abs_frac : float, optional
        Fraction (0,1) away from the origin of the full size of the invariant
        set where to compute the absolute error.
    abs_err : float, optional
        Absolute error value. If provided, takes precedence over abs_frac.
    rel_err : float
        Relative error value.

    Returns
    -------
    oracle : Oracle
        Optimization problem oracle.
    """
    if abs_err is None:
        oracle = Oracle(mpc, eps_a=1., eps_r=1.)
        abs_err = np.max([
            oracle.P_theta(theta=vx)[2]
            for vx in [abs_frac * vx for vx in set_vrep]
        ])
    oracle = Oracle(mpc, eps_a=abs_err, eps_r=rel_err)
    return oracle