Skip to main content
. 2021 Oct 14;23(10):1335. doi: 10.3390/e23101335
Algorithm A1 Estimating the Pareto Frontier
Parameters:num_generations, num_langs
Inputs: set of languages L, Pareto dominance method find_dominant, interpolate method
 
 function genetic_estimate(num_generations, num_langs)
  languages←SAMPLE_RANDOM_LANGUAGES(num_langs)
  for i=1,⋯,num_generations do
   dominant_languages←FIND_DOMINANT(languages)
   languages←SAMPLE_MUTATED(dominant_languages,num_langs)
  end for
  return languages
 end function
 
 function sample_mutated(languages, amount)
  amount_per_lang,amount_random←amount/|languages|
  mutated_languages←[]
  for language ∈ languages do
   for i=1,⋯,amount_per_lang do
    Add MUTATE(language) to mutated_languages
   end for
  end for
  for i=1,⋯,amount_random do
   language←RANDOM_CHOICE(languages)
   Add MUTATE(language) to mutated_languages
  end for
  return mutated_languages
 end function
 
 function mutate (language)
  mutated_language ← language
  num_mutations←RANDOM_CHOICE([1,2,3])
  for i=1,⋯,num_mutations do
   mutation←RANDOM_CHOICE(
               ADD_QUANTIFIER,REMOVE_QUANTIFIER,SWAP_QUANTIFIER)
   mutated_language←MUTATION(language)
  end for
  return mutated_language
 end function
 
 estimate←GENETIC_ESTIMATE(num_generations,num_langs)
 pareto_frontier←FIND_DOMINANT(estimate∪L)
 pareto_frontier←INTERPOLATE(pareto_frontier)