Spaces:
Running
Running
File size: 1,493 Bytes
97b4d0f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import numpy as np
from scipy.optimize import minimize
if __name__ == '__main__':
# Given subset of m values for x_1, x_2, and x_3
x1_subset = [2, 3, 4]
x2_subset = [0, 1]
x3_subset = [5, 6, 7]
# Full set of possible values for x_1, x_2, and x_3
x1_full = [1, 2, 3, 4, 5]
x2_full = [0, 1, 2, 3, 4, 5]
x3_full = [3, 5, 7]
# Define the objective function for quantile-based ranking
def objective_function(w):
y_subset = [x1 * w[0] + x2 * w[1] + x3 * w[2] for x1, x2, x3 in zip(x1_subset, x2_subset, x3_subset)]
y_full_set = [x1 * w[0] + x2 * w[1] + x3 * w[2] for x1 in x1_full for x2 in x2_full for x3 in x3_full]
# Calculate the 90th percentile of y values for the full set
y_full_set_90th_percentile = np.percentile(y_full_set, 90)
# Maximize the difference between the 90th percentile of the subset and the 90th percentile of the full set
return - min(y_subset) + y_full_set_90th_percentile
# Bounds for w_1, w_2, and w_3 (-1 to 1)
bounds = [(-1, 1), (-1, 1), (-1, 1)]
# Perform bounded optimization to find the values of w_1, w_2, and w_3 that maximize the objective function
result = minimize(objective_function, np.zeros(3), method='TNC', bounds=bounds)
# Get the optimal values of w_1, w_2, and w_3
w_1_opt, w_2_opt, w_3_opt = result.x
# Print the results
print("Optimal w_1:", w_1_opt)
print("Optimal w_2:", w_2_opt)
print("Optimal w_3:", w_3_opt)
|