commit c7452ccbad5e1a9b4f85bcd3c20287d2197413a0
parent 8f4c4c86c881b56dcc172adb0bf8319b2a39a976
Author: dracuxan <[email protected]>
Date: Tue, 7 Apr 2026 12:23:59 +0530
example: portfolio optimization
Diffstat:
1 file changed, 29 insertions(+), 0 deletions(-)
diff --git a/genetic/scripts/portfolio.exs b/genetic/scripts/portfolio.exs
@@ -0,0 +1,29 @@
+defmodule Portfolio do
+ alias Types.Chromosome
+
+ @behaviour Problem
+ @target_fitness 180
+
+ @impl true
+ def genotype do
+ genes =
+ Enum.map(1..10, fn _ -> {:rand.uniform(10), :rand.uniform(10)} end)
+
+ %Chromosome{genes: genes, size: 10}
+ end
+
+ @impl true
+ def fitness_function(chromosome) do
+ chromosome.genes
+ |> Enum.map(fn {roi, risk} -> 2 * roi - risk end)
+ |> Enum.sum()
+ end
+
+ @impl true
+ def terminate?([best | _], _generation) do
+ best.fitness > @target_fitness
+ end
+end
+
+soln = Genetic.run(Portfolio)
+IO.puts("\nfinal answer: #{inspect(soln)}")