{% extends "base.html" %} {% block title %}Upload Algorithm - MHA Flow{% endblock %} {% block content %}
BaseOptimizer_optimize() methoddef _optimize(self, objective_function, X=None, y=None, **kwargs)(best_position, best_fitness, global_fitness, local_fitness, local_positions)from mha_toolbox.base import BaseOptimizer
import numpy as np
class MyCustomAlgorithm(BaseOptimizer):
"""Custom Optimization Algorithm"""
def __init__(self, population_size=30, max_iterations=100, **kwargs):
super().__init__(population_size, max_iterations, **kwargs)
self.algorithm_name = "My Custom Algorithm"
def _optimize(self, objective_function, X=None, y=None, **kwargs):
# Get dimensions and bounds
if X is not None:
dimension = X.shape[1]
lb, ub = 0.0, 1.0
else:
dimension = kwargs.get('dimensions', 10)
lb = kwargs.get('lower_bound', -100.0)
ub = kwargs.get('upper_bound', 100.0)
# Initialize population
population = np.random.uniform(lb, ub, (self.population_size_, dimension))
fitness = np.array([objective_function(ind) for ind in population])
# Find best solution
best_idx = np.argmin(fitness)
best_position = population[best_idx].copy()
best_fitness = fitness[best_idx]
# Tracking
global_fitness = [best_fitness]
local_fitness = [fitness.copy()]
local_positions = [population.copy()]
# Main optimization loop
for iteration in range(self.max_iterations_):
for i in range(self.population_size_):
# Your optimization logic here
# Update population[i]
population[i] = np.clip(population[i], lb, ub)
fitness[i] = objective_function(population[i])
if fitness[i] < best_fitness:
best_position = population[i].copy()
best_fitness = fitness[i]
global_fitness.append(best_fitness)
local_fitness.append(fitness.copy())
local_positions.append(population.copy())
return best_position, best_fitness, global_fitness, local_fitness, local_positions