in isoexp/main_attack_one_user.py [0:0]
def compute_attack(alg, a_star, x_star, slack=10 **-10):
d = model.n_features
func = lambda delta: np.linalg.norm(delta)/2
theta_a_star = alg.thetas_hat[a_star]
P_a_star = sqrtm(alg.inv_design_matrices[a_star])
betas = alg.alpha()
constraints_list = []
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 = lambda delta, P=P, P_a_star=P_a_star, theta=theta, theta_a_star=theta_a_star, beta=betas[a], beta_a_star=betas[a_star]: \
-((theta - theta_a_star).dot((x_star + delta)) + beta * np.linalg.norm(P.dot((x_star + delta)))
- beta_a_star * np.linalg.norm(P_a_star.dot((x_star + delta))) + slack)
temp_cons = {'type': 'ineq', 'fun': temp_constraint}
constraints_list.append(temp_cons)
cons = tuple(constraints_list)
res = minimize(func, -x_star, method='SLSQP', constraints=cons)
# print(res.message)
try:
epsilon = res.x
except:
epsilon = np.zeros((d,))
if epsilon is None:
return np.zeros((d,))
return epsilon