Implementasi Metode Systematical Grid Search

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

Implementasi metode systematical grid search.

Code
#Juanly Sitanggang 12320078

import numpy as np
from itertools import product
import time
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def objective_function(x, y):


return x**2 + y**2

def systematic_grid_search(param_range, step_size):


param_values = [np.arange(start, stop, step_size) for start, stop,
step_size in param_range]
param_combinations = list(product(*param_values))
return param_combinations

def grid_search(objective_function, param_combinations):


min_value = float('inf')
optimal_params = None
values = []

for params in param_combinations:


x, y = params
current_value = objective_function(x, y)
values.append(current_value)

if current_value < min_value:


min_value = current_value
optimal_params = params

return optimal_params, min_value, values

def plot_surface_and_optimal(param_range, values, optimal_params):


x_range = np.arange(param_range[0][0], param_range[0][1],
param_range[0][2])
y_range = np.arange(param_range[1][0], param_range[1][1],
param_range[1][2])
X, Y = np.meshgrid(x_range, y_range)
Z = np.reshape(values, X.shape)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis', alpha=0.8)
ax.scatter(*optimal_params, objective_function(*optimal_params),
color='red', marker='*', s=100, label='Optimal')

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Objective Function')
ax.legend()

plt.show()

def main():
# Rentang nilai parameter yang akan diuji
param_range = [(0, 10, 1), (0, 10, 1)] # (start, stop, step_size)

# Langkah pencarian parameter


step_size = 1

# Membuat kombinasi parameter yang akan diuji


param_combinations = systematic_grid_search(param_range, step_size)

# Melakukan grid search untuk mencari parameter optimal


start_time = time.time()
optimal_params, min_value, values = grid_search(objective_function,
param_combinations)
end_time = time.time()

# Menampilkan hasil
print("Parameter Optimal:", optimal_params)
print("Nilai Minimum Objektif:", min_value)
print("Waktu Eksekusi:", end_time - start_time, "detik")

# Menampilkan grafik fungsi objektif dan lokasi parameter optimal


plot_surface_and_optimal(param_range, values, optimal_params)

if __name__ == "__main__":
main()

Dalam Grafik

You might also like