{% extends "base.html" %} {% block title %}Upload Algorithm - MHA Flow{% endblock %} {% block content %}
Upload Custom Algorithm
Requirements:
  • Python file (.py) with a class inheriting from BaseOptimizer
  • Must implement _optimize() method
  • Method signature: def _optimize(self, objective_function, X=None, y=None, **kwargs)
  • Must return: (best_position, best_fitness, global_fitness, local_fitness, local_positions)
Upload a Python file containing your algorithm
Example Template
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
{% endblock %}