Topic 1
Exercise 1
Here’s a simple exercise with code chunks provided for entering or editing the answer.
Use the the function initialize_population to generate
number of individuals:
population <- genetic.algo.optimizeR::initialize_population(population_size = 10, min = 0, max = 3)
populationThe generated population contains integers within specified range.
Exercise 2
Given a poputation of these individuals (1, 3, 0), use the the
function evaluate_fitness to return correct fitness values
of all individuals of the popultation:
population = c(1, 3, 0)
fitness <- genetic.algo.optimizeR::evaluate_fitness(population)
fitnessThe expected fitness of the population should (1, 1, 4) respectively.
population = c(1, 3, 0) # Done above
fitness <- genetic.algo.optimizeR::evaluate_fitness(population) # Done above
population |>
  cbind(fitness) |>
  data.frame() |>
  magrittr::set_rownames(c("individual_1", "individual_2", "individual_3"))Exercise 3
In this next exercise examine the fitness of the given population.
population = c(1, 3, 0) # Done above
fitness <- genetic.algo.optimizeR::evaluate_fitness(population) # Done above
population |>
  cbind(fitness) |>
  data.frame() |>
  ggplot2::ggplot(aes(x = fitness)) +
  geom_density(fill = "skyblue", color = "steelblue", alpha = 0.7) +
  geom_point(aes(x = fitness, y = 0), color = "red", size = 3) + # Add red points
  geom_vline(xintercept = fitness, linetype = "dashed", color = "red") + # Add vertical line
  ggrepel::geom_text_repel(aes(label = paste0("x=",population)), x = fitness, y = 6, vjust = -0.5, color = "black", size = 5) + # Add text label
  labs(x = "Fitness", y = "Density", 
       title = "Density Plot of Fitness") +
  xlim(0.5, 4.5)Topic 2
Exercise 1
Here’s an exercise where the objective is to find the
optimal(minimal of evaluate_fitness) fitness.
Recall the initial generated population and fitness(in ascending order):
population |>
  cbind(fitness) |>
  data.frame() |>
  dplyr::group_by_all() |>
  dplyr::arrange(fitness) # in ascending order based on fitnessSelect correct number of individuals wit the best fitness:
selected_parents <- genetic.algo.optimizeR::selection(population, fitness, num_parents = 2)
selected_parentsExercise 2
Use crossover to generate correct and defined number of offspring:offspring <- genetic.algo.optimizeR::crossover(selected_parents, offspring_size = 2)
offspringMutate correctly offspring give a certain rate of mutation:
mutated_offspring <- genetic.algo.optimizeR::mutation(offspring, mutation_rate = 1) # All offspring will be mutated
mutated_offspringreplaced_population <- genetic.algo.optimizeR::replacement(population, offspring, num_to_replace = 1)
replaced_populationTopic 3
Exercise 1
Optimize this script:
The scirpt below illustrates the process of a genetic algorithm, where individuals are selected, crossed over, and replaced iteratively to improve the population towards finding the optimal solution(i.e. fitting population).
print("Initial Population:")
print(population)
generation <- 0  # Initialize generation/reputation counter
while (TRUE) {
  generation <- generation + 1  # Increment generation/reputation count
  
  # Evaluate fitness
  fitness <- evaluate_fitness(population)
  print("Evaluation:")
  print(fitness)
  
  
  # Check if the fitness of every individual is close to zero
  if (all(abs(fitness) <= 0.01)) {
    print("Termination Condition Reached: All individuals have fitness close to zero.")
    break
  }
  
  # Selection
  selected_parents <- selection(population, fitness, num_parents = 2)
  print("Selection:")
  print(selected_parents)
  
  # Crossover and Mutation
  offspring <- crossover(selected_parents, offspring_size = 2)
  mutated_offspring <- mutation(offspring, mutation_rate = 0) #(no mutation in this example)
  print("Crossover and Mutation:")
  print(mutated_offspring)
  
  # Replacement
  population <- replacement(population, mutated_offspring, num_to_replace = 1)
  print("Replacement:")
  print(population)
}
print(paste("Total generations/reputations:", generation))Topic 4
Exercise 1
library(genetic.algo.optimizeR)
library(dplyr)
library(ggplot2)After multiple generations of repeating the steps(in the Topic 1 and 2), the genetic algorithm will converge towards an optimal or near-optimal solution. In that example, since it’s simple and the solution space is small, we could expect the algorithm to converge relatively quickly towards the optimal solution \(x = 2\), where \(f(x) = 0\).
Now in case case of large population, find the optimal(minimal of
evaluate_fitness) fitness using the optimize function(from
stats Rpackage).
population =c(1, 3, 0)
optimal_result <- optimize(genetic.algo.optimizeR::evaluate_fitness, population, maximum = FALSE)
optimal_fitting_individual <- optimal_result$minimumpopulation =c(1, 3, 0)
optimal_result <- optimize(genetic.algo.optimizeR::evaluate_fitness, population, maximum = FALSE)
optimal_fitting_individual <- optimal_result$minimum
fitness_data <- rnorm(1000, mean = optimal_fitting_individual, sd = 1)Create a data frame for the density plot
population =c(1, 3, 0)
optimal_result <- optimize(genetic.algo.optimizeR::evaluate_fitness, population, maximum = FALSE)
optimal_fitting_individual <- optimal_result$objective
fitness_data <- rnorm(1000, mean = optimal_fitting_individual, sd = 1)
df_density <- data.frame(fitness = fitness_data)
df_density |>
  data.frame() |>
  ggplot2::ggplot(aes(x = fitness)) +
  geom_density(fill = "skyblue", color = "steelblue", alpha = 0.7) +
  geom_vline(xintercept = optimal_fitting_individual, linetype = "dashed", color = "red") +
  geom_text(aes(label = paste0("x=",optimal_result$minimum)), x = optimal_result$objective, y = .35, vjust = -0.5, color = "black", size = 5) + # Add text label
  labs(x = "Fitness", y = "Density", 
       title = "Density Plot of Fitness with Optimal Population",
       caption = paste("Optimal Fitting Individual:", round(optimal_result$minimum, 2)))Quiz
Here’s a section including number of single or multiple choice questions as a quiz.
Please answer this questions: