Spaces:
Sleeping
Sleeping
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) | |