Basic Usage Examples

Simple Optimization Experiment

from orruns import ExperimentTracker
import numpy as np

def objective_function(x):
    return np.sum(x**2)

# Initialize tracker
with ExperimentTracker("simple_optimization") as tracker:
    # Set parameters
    tracker.log_params({
        "dimensions": 10,
        "iterations": 1000,
        "algorithm": "gradient_descent"
    })

    # Run optimization
    x = np.random.randn(10)
    for i in range(1000):
        grad = 2 * x
        x = x - 0.01 * grad

        if i % 100 == 0:
            tracker.log_metrics({
                "iteration": i,
                "objective_value": objective_function(x)
            })

    # Log final results
    tracker.log_metrics({
        "final_value": objective_function(x),
        "solution_norm": np.linalg.norm(x)
    })

Multi-Objective Optimization

from orruns import ExperimentTracker
from orruns.decorators import experiment_manager

@experiment_manager(times=5)
def nsga2_experiment(tracker):
    # Initialize NSGA-II
    problem = MultiObjectiveProblem()
    algorithm = NSGA2(
        pop_size=100,
        n_generations=50
    )

    # Run optimization
    population = algorithm.run(problem)

    # Log results
    tracker.log_metrics({
        "hypervolume": calculate_hypervolume(population),
        "pareto_front_size": len(population.fronts[0])
    })

    # Save Pareto front
    tracker.log_artifact(
        "pareto_front.csv",
        population.fronts[0]
    )

    return population

# Run experiments
results = nsga2_experiment()

Parameter Study

from orruns import ExperimentTracker
from orruns.utils import parameter_sweep

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

# Run parameter sweep
@parameter_sweep(param_grid, parallel=True)
def optimization_study(params, tracker):
    # Initialize algorithm with params
    algorithm = GeneticAlgorithm(**params)

    # Run optimization
    result = algorithm.optimize()

    # Log results
    tracker.log_metrics({
        "best_fitness": result.best_fitness,
        "convergence_time": result.time
    })

    return result

# Execute study
results = optimization_study()