def compute_relaxed_attack()

in isoexp/main_attack_one_user.py [0:0]


def compute_relaxed_attack(alg, a_star, x_star, slack=10**-10):
    d = model.n_features
    delta = cp.Variable(d)
    obj = cp.Minimize(cp.quad_form(delta, np.eye(d))/2)
    theta_a_star = alg.thetas_hat[a_star]
    betas = alg.alpha()
    constraints = []
    P_a_star = sqrtm(alg.inv_design_matrices[a_star])
    for a in range(len(alg.thetas_hat)):
        if a != a_star:
            theta = alg.thetas_hat[a]
            P = sqrtm(alg.inv_design_matrices[a])
            temp_constraint = (theta - theta_a_star)@(x_star+delta) + betas[a]*cp.norm(P@(x_star+delta))\
                              #- betas[a_star]R * (cp.norm(P_a_star @ x_star) + (alg.inv_design_matrices[a] @ x_star) @
                              #                  delta/cp.norm(P_a_star @ x_star))
            constraints.append(temp_constraint + slack <= 0)
    prob = cp.Problem(obj, constraints)
    try:
        prob.solve(verbose=False, max_iters=1000, feastol=10**-8)
        epsilon = delta.value
        # print('epsilon =', epsilon)
        # for a in range(len(alg.thetas_hat)):
        #     if a != a_star:
        #         theta_a_star = alg.thetas_hat[a_star]
        #         betas = alg.alpha()
        #         theta = alg.thetas_hat[a]
        #         P = sqrtm(alg.inv_design_matrices[a])
        #         P_a_star = sqrtm(alg.inv_design_matrices[a_star])
        #         print('The constraint for arm {}:'.format(a), np.dot(theta - theta_a_star, (x_star+epsilon)) + betas[a]*np.linalg.norm(P.dot((x_star+epsilon))) \
        #                       - betas[a_star] * (np.linalg.norm(P_a_star.dot(x_star)) +
        #                                          np.dot((alg.inv_design_matrices[a].dot(x_star)), epsilon)/np.linalg.norm(P_a_star.dot(x_star))))

    except:
        print('Exception')
        epsilon = np.zeros((d,))
    # print('epsilon =', epsilon)
    if epsilon is None:
        return np.zeros((d,))
    return epsilon