function best_duty_cycle = testing1(~, I_pv )
% Prompt the user to enter the values of the input arguments
V_pv = 210
I_pv = 22
population_size = 2
max_generations = 60
% Initialize the population with random duty cycles
population = rand(population_size, 1);
% Initialize the best duty cycle
best_duty_cycle = population(1);
% Initialize the best fitness
best_fitness = fitness(best_duty_cycle, V_pv, I_pv);
% Loop through the generations
for generation = 1:max_generations
% Evaluate the fitness of the population
fitness_values = arrayfun(@(x) fitness(x, V_pv, I_pv), population);
% Select the individuals for reproduction
selected_indices = randsample(1:length(population), length(population), true, fitness_values);
% Perform crossover
for i = 1:2:length(population)
parent1 = population(selected_indices(i));
parent2 = population(selected_indices(i+1));
crossover_points = randi([1, length(parent1)], 1);
child1 = [parent1(1:crossover_points), parent2(crossover_points+1:end)];
child2 = [parent2(1:crossover_points), parent1(crossover_points+1:end)];
population([i, i+1]) = [child1, child2];
end
% Perform mutation
mutation_probabilities = rand(length(population), 1);
mutation_indices = find(mutation_probabilities < 0.01);
population(mutation_indices) = population(mutation_indices) + 0.1 * randn(length(mutation_indices), 1);
% Update the best duty cycle and fitness
current_best_index = find(fitness_values == max(fitness_values));
if fitness_values(current_best_index) > best_fitness
best_duty_cycle = population(current_best_index);
best_fitness = fitness_values(current_best_index);
end
end
end
function fitness = fitness(best_duty_cycle, V_pv, I_pv)
% Calculate the power
power = best_duty_cycle .* V_pv .* I_pv;
% Calculate the fitness
fitness = sum(power);
end