Optimization Examples

Single-Objective Optimization

Gradient Descent Example

from orruns import ExperimentTracker
import numpy as np

def optimize_quadratic():
    with ExperimentTracker("gradient_descent") as tracker:
        # Configure optimization
        tracker.log_params({
            "learning_rate": 0.01,
            "max_iterations": 1000,
            "tolerance": 1e-6
        })

        # Initial point
        x = np.random.randn(10)

        # Optimization loop
        for i in range(1000):
            grad = 2 * x
            x = x - 0.01 * grad

            if i % 100 == 0:
                tracker.log_metrics({
                    "iteration": i,
                    "objective": np.sum(x**2)
                })

optimize_quadratic()

Multi-Objective Optimization

NSGA-II Example

from orruns import ExperimentTracker
from orruns.decorators import experiment_manager

@experiment_manager(times=5, parallel=True)
def nsga2_optimization(tracker):
    # Configure NSGA-II
    tracker.log_params({
        "population_size": 100,
        "generations": 50,
        "crossover_rate": 0.9,
        "mutation_rate": 0.1
    })

    population = initialize_population()
    for generation in range(50):
        offspring = create_offspring(population)
        population = select_next_generation(population + offspring)

        tracker.log_metrics({
            "generation": generation,
            "hypervolume": calculate_hypervolume(population),
            "diversity": calculate_diversity(population)
        })

    return population

results = nsga2_optimization()

Parameter Tuning

Grid Search Example

from orruns import ExperimentTracker
from orruns.decorators import parameter_sweep

param_grid = {
    "population_size": [50, 100, 200],
    "mutation_rate": [0.1, 0.2, 0.3],
    "crossover_rate": [0.8, 0.9]
}

@parameter_sweep(param_grid, parallel=True)
def parameter_study(params, tracker):
    # Run optimization with given parameters
    result = optimize_with_params(params)

    tracker.log_metrics({
        "final_hypervolume": result.hypervolume,
        "convergence_time": result.time
    })

    return result

results = parameter_study()