Challenge

Week 5 - Genetic Algorithm

clc; clear all;

% Genetic Algorithm Parameters
pop_size = 50;
num_vars = 30;
lb = -100;
ub = 100;
num_generations = 1000;
mutation_rate = 0.1;
crossover_rate = 0.7;

% Initialize population
population = lb + (ub - lb) * rand(pop_size, num_vars);

% Main loop
for gen = 1:num_generations
    % Evaluate fitness (define your objective function)
    fitness = sphere_func(population);
    best_fitness = min(fitness);
    
    % Selection (tournament-based)
    tournament_size = 2;
    tournament_winners = zeros(pop_size, num_vars);
    for i = 1:pop_size
        tournament_inds = randperm(pop_size, tournament_size);
        tournament_fitness = fitness(tournament_inds);
        [~, best_ind] = min(tournament_fitness);
        tournament_winners(i, :) = population(tournament_inds(best_ind), :);
    end
    
    % Crossover
    crossover_inds = rand(pop_size, num_vars) < crossover_rate;
    offspring = zeros(pop_size, num_vars);
    for i = 1:pop_size
        parent1 = tournament_winners(i, :);
        if i == pop_size
            parent2 = tournament_winners(1, :);
        else
            parent2 = tournament_winners(i+1, :);
        end
        offspring(i, crossover_inds(i,:)) = parent1(crossover_inds(i,:));
        offspring(i, ~crossover_inds(i,:)) = parent2(~crossover_inds(i,:));
    end
    
    % Mutation
    mutation_inds = rand(pop_size, num_vars) < mutation_rate;
    mutation_amounts = lb + (ub - lb) * rand(pop_size, num_vars);
    offspring(mutation_inds) = mutation_amounts(mutation_inds);
    
    % Update population
    population = offspring;
    
    % Display current best fitness
    fprintf('Generation %d: Best Fitness = %f\n', gen, best_fitness);
end

% Final evaluation
final_fitness = sphere_func(population);
best_solution = population(final_fitness == min(final_fitness), :);
best_fitness = min(final_fitness);
fprintf('Final Best Fitness = %f\n', best_fitness);
disp('Best Solution:');
disp(best_solution);
Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.