GEMRec-Gallery / Archive /optimization.py
Ricercar's picture
important bug fix for image selection
97b4d0f
raw
history blame
1.56 kB
import numpy as np
from scipy.optimize import minimize, differential_evolution
# Define the function y = x_1*w_1 + x_2*w_2 + x_3*w_3
def objective_function(w_indices):
x_1 = x_1_values[int(w_indices[0])]
x_2 = x_2_values[int(w_indices[1])]
x_3 = x_3_values[int(w_indices[2])]
return - (x_1 * w_indices[3] + x_2 * w_indices[4] + x_3 * w_indices[5]) # Use w_indices to get w_1, w_2, w_3
if __name__ == '__main__':
# Given sets of discrete values for x_1, x_2, and x_3
x_1_values = [1, 2, 3, 5, 6]
x_2_values = [0, 5, 7, 2, 1]
x_3_values = [3, 7, 4, 5, 2]
# Perform differential evolution optimization with integer variables
# bounds = [(0, len(x_1_values) - 2), (0, len(x_2_values) - 1), (0, len(x_3_values) - 1), (-1, 1), (-1, 1), (-1, 1)]
bounds = [(3, 4), (3, 4), (3, 4), (-1, 1), (-1, 1), (-1, 1)]
result = differential_evolution(objective_function, bounds)
# Get the optimal indices of x_1, x_2, and x_3
x_1_index, x_2_index, x_3_index, w_1_opt, w_2_opt, w_3_opt = result.x
# Calculate the peak point (x_1, x_2, x_3) corresponding to the optimal indices
x_1_peak = x_1_values[int(x_1_index)]
x_2_peak = x_2_values[int(x_2_index)]
x_3_peak = x_3_values[int(x_3_index)]
# Print the results
print("Optimal w_1:", w_1_opt)
print("Optimal w_2:", w_2_opt)
print("Optimal w_3:", w_3_opt)
print("Peak Point (x_1, x_2, x_3):", (x_1_peak, x_2_peak, x_3_peak))
print("Maximum Value of y:", -result.fun) # Use negative sign as we previously used to maximize