genetic

genetic algorithm framework
git clone igris.git:dracuxan/genetic.git
Log | Files | Refs | README

commit e571bfeca645df0c2d49e5d9228f426daebaa108
parent 299b5a4459a9366c99ce7a4ed5076797d91971ea
Author: dracuxan <[email protected]>
Date:   Mon, 20 Apr 2026 11:13:53 +0530

new: tetris player

Diffstat:
Mgenetic/.gitignore | 2++
Mgenetic/lib/genetic.ex | 2+-
Mgenetic/lib/toolbox/selection.ex | 1+
Agenetic/scripts/tetris.exs | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Dgenetic/tiger_simulation.dot | 755-------------------------------------------------------------------------------
5 files changed, 53 insertions(+), 756 deletions(-)

diff --git a/genetic/.gitignore b/genetic/.gitignore @@ -23,3 +23,5 @@ genetic-*.tar /tmp/ .codex + +games/ diff --git a/genetic/lib/genetic.ex b/genetic/lib/genetic.ex @@ -20,7 +20,7 @@ defmodule Genetic do |> Enum.map(fn chromosome -> fitness = fitness_function.(chromosome) age = 1 - %Chromosome{chromosome | fitness: fitness, age: age} + %Chromosome{genes: chromosome.genes, fitness: fitness, age: age} end) |> Enum.sort_by(& &1.fitness, :desc) end diff --git a/genetic/lib/toolbox/selection.ex b/genetic/lib/toolbox/selection.ex @@ -1,4 +1,5 @@ defmodule Toolbox.Selection do + @dialyzer :no_opaque def elite(population, n) do population |> Enum.take(n) diff --git a/genetic/scripts/tetris.exs b/genetic/scripts/tetris.exs @@ -0,0 +1,49 @@ +defmodule TetrisInterface do + use Agent + + def start_link(path_to_tetris_rom) do + int = Alex.new() + + game = + int + |> Alex.set_option(:display_screen, true) + |> Alex.set_option(:sound, true) + |> Alex.set_option(:random_seed, 123) + |> Alex.load(path_to_tetris_rom) + + Agent.start_link(fn -> game end, name: __MODULE__) + end +end + +defmodule Tetris do + alias Types.Chromosome + @behaviour Problem + + @impl true + def genotype do + game = Agent.get(TetrisInterface, & &1) + genes = Enum.map(1..1000, fn _ -> Enum.random(game.legal_actions) end) + %Chromosome{genes: genes, size: 1000} + end + + @impl true + def fitness_function(chromosome) do + game = Agent.get(TetrisInterface, & &1) + actions = chromosome.genes + + game = + actions + |> Enum.reduce(game, fn act, game -> Alex.step(game, act) end) + + reward = game.reward + Alex.reset(game) + reward + end + + @impl true + def terminate?(_population, generation), do: generation == 5 +end + +TetrisInterface.start_link("/home/dracuxan/elixir/src/genetic/genetic/games/tetris.bin") +soln = Genetic.run(Tetris, population_size: 10) +IO.puts("\nbest: #{inspect(soln)}") diff --git a/genetic/tiger_simulation.dot b/genetic/tiger_simulation.dot @@ -1,755 +0,0 @@ -strict digraph { - 949457869[label="[0, 1, 1, 1, 0, 0, 0, 0]"] - 2536618053[label="[0, 1, 0, 1, 0, 1, 0, 1]"] - 724171536[label="[1, 0, 1, 0, 1, 1, 0, 0]"] - 1402067371[label="[0, 1, 0, 1, 1, 1, 0, 0]"] - 3908895871[label="[0, 0, 1, 0, 1, 0, 0, 1]"] - 2403915804[label="[0, 1, 1, 1, 1, 1, 1, 1]"] - 2848633694[label="[1, 0, 1, 1, 1, 1, 1, 0]"] - 1971595665[label="[1, 1, 0, 1, 1, 1, 0, 1]"] - 19331105[label="[0, 1, 0, 0, 0, 0, 1, 0]"] - 677448650[label="[0, 0, 1, 0, 1, 0, 1, 1]"] - 3937712037[label="[0, 1, 1, 0, 1, 1, 0, 1]"] - 767075551[label="[1, 1, 0, 1, 0, 1, 1, 0]"] - 3354606782[label="[0, 1, 0, 0, 0, 1, 0, 1]"] - 2268642208[label="[0, 0, 1, 1, 0, 0, 1, 0]"] - 284311100[label="[0, 1, 1, 0, 1, 1, 0, 0]"] - 4072798414[label="[1, 1, 0, 0, 1, 1, 0, 0]"] - 1809647678[label="[1, 0, 0, 1, 1, 0, 0, 1]"] - 443214995[label="[1, 1, 0, 0, 0, 0, 0, 1]"] - 2445954675[label="[1, 1, 1, 0, 1, 0, 0, 0]"] - 2457784034[label="[0, 0, 1, 0, 0, 1, 1, 1]"] - 1389735369[label="[1, 0, 1, 0, 0, 0, 0, 1]"] - 3026510743[label="[1, 0, 0, 1, 1, 0, 0, 0]"] - 4171340714[label="[0, 0, 0, 0, 0, 0, 0, 0]"] - 1099471454[label="[1, 0, 0, 0, 0, 0, 1, 1]"] - 3513907054[label="[1, 0, 0, 1, 0, 0, 1, 1]"] - 2587689007[label="[1, 1, 1, 0, 0, 1, 1, 1]"] - 2925632667[label="[1, 1, 1, 0, 1, 1, 1, 0]"] - 2057570518[label="[1, 1, 0, 1, 0, 0, 1, 0]"] - 3257104108[label="[0, 1, 1, 1, 0, 1, 0, 1]"] - 3335717218[label="[0, 0, 1, 1, 1, 0, 0, 0]"] - 698173556[label="[0, 1, 1, 0, 0, 1, 1, 1]"] - 3715967540[label="[1, 1, 0, 0, 1, 0, 0, 1]"] - 2368887397[label="[0, 0, 0, 0, 0, 1, 1, 1]"] - 2884901790[label="[0, 1, 0, 1, 0, 0, 0, 1]"] - 3234209085[label="[1, 1, 1, 1, 0, 1, 0, 1]"] - 2037827799[label="[1, 0, 0, 1, 0, 0, 0, 0]"] - 4285881222[label="[1, 1, 0, 1, 0, 1, 0, 0]"] - 793347728[label="[0, 0, 0, 1, 0, 0, 1, 1]"] - 2563037542[label="[1, 1, 1, 1, 0, 1, 1, 1]"] - 2250553917[label="[0, 1, 1, 0, 0, 0, 0, 1]"] - 1714495371[label="[0, 1, 1, 1, 1, 0, 1, 1]"] - 3610445940[label="[1, 1, 0, 0, 1, 0, 1, 0]"] - 3161838376[label="[1, 0, 1, 1, 1, 0, 1, 0]"] - 2642425121[label="[1, 0, 1, 1, 1, 0, 0, 0]"] - 587814686[label="[1, 0, 0, 0, 1, 0, 1, 1]"] - 74531871[label="[1, 1, 0, 0, 0, 1, 0, 0]"] - 3965625862[label="[1, 1, 1, 0, 1, 1, 0, 0]"] - 635681421[label="[0, 0, 1, 0, 1, 1, 1, 0]"] - 3539985169[label="[0, 1, 1, 0, 1, 0, 0, 0]"] - 3260494834[label="[1, 1, 1, 0, 1, 0, 0, 1]"] - 1596605361[label="[1, 0, 0, 0, 1, 1, 1, 1]"] - 496639972[label="[0, 1, 0, 0, 0, 0, 1, 1]"] - 4127025499[label="[0, 0, 1, 0, 1, 1, 1, 1]"] - 1476128492[label="[0, 0, 0, 1, 0, 1, 1, 0]"] - 4058374985[label="[0, 1, 1, 0, 1, 1, 1, 0]"] - 3385205003[label="[1, 0, 0, 1, 0, 0, 0, 1]"] - 504513812[label="[1, 1, 1, 0, 0, 0, 1, 1]"] - 467112377[label="[0, 0, 1, 1, 0, 0, 0, 0]"] - 3844664360[label="[0, 1, 0, 1, 0, 0, 0, 0]"] - 2878229955[label="[1, 0, 1, 0, 1, 0, 1, 0]"] - 1315291317[label="[1, 1, 1, 0, 0, 0, 1, 0]"] - 1240788070[label="[0, 1, 0, 1, 0, 1, 1, 1]"] - 512258003[label="[0, 1, 1, 0, 1, 0, 0, 1]"] - 2059513195[label="[1, 1, 1, 1, 0, 1, 1, 0]"] - 765970116[label="[0, 0, 1, 0, 1, 0, 1, 0]"] - 2250372135[label="[0, 1, 0, 1, 0, 0, 1, 0]"] - 1451784272[label="[1, 0, 1, 0, 1, 0, 0, 1]"] - 4005480581[label="[0, 0, 1, 0, 0, 1, 1, 0]"] - 341183630[label="[0, 1, 1, 0, 0, 0, 1, 0]"] - 1543204776[label="[1, 1, 1, 1, 1, 1, 0, 1]"] - 2304576397[label="[1, 1, 1, 0, 0, 1, 0, 1]"] - 3847528191[label="[0, 0, 0, 1, 0, 0, 0, 0]"] - 449175020[label="[0, 0, 1, 0, 0, 0, 1, 0]"] - 1687961054[label="[0, 1, 0, 0, 0, 1, 1, 1]"] - 3682568289[label="[1, 0, 0, 0, 1, 1, 1, 0]"] - 3594480722[label="[1, 1, 1, 1, 1, 1, 1, 0]"] - 2101625518[label="[0, 0, 0, 0, 0, 0, 0, 1]"] - 3358219454[label="[0, 1, 1, 0, 1, 1, 1, 1]"] - 688080727[label="[1, 0, 1, 0, 1, 1, 0, 1]"] - 2424212868[label="[1, 1, 0, 0, 0, 0, 1, 0]"] - 907040973[label="[1, 1, 0, 1, 1, 1, 1, 1]"] - 3801418391[label="[0, 1, 1, 1, 1, 1, 0, 0]"] - 3587387457[label="[0, 1, 0, 0, 1, 1, 0, 1]"] - 4248627782[label="[0, 1, 0, 1, 1, 1, 1, 0]"] - 1258450967[label="[0, 1, 0, 0, 1, 1, 1, 1]"] - 3043258635[label="[0, 0, 1, 0, 0, 1, 0, 1]"] - 128572598[label="[0, 0, 0, 1, 1, 0, 1, 0]"] - 3980964254[label="[1, 0, 0, 0, 1, 1, 0, 1]"] - 2343540229[label="[0, 0, 1, 1, 1, 1, 1, 0]"] - 3730757465[label="[1, 1, 1, 0, 1, 0, 1, 1]"] - 3041433247[label="[1, 1, 1, 0, 0, 1, 0, 0]"] - 93601957[label="[1, 0, 0, 0, 1, 0, 0, 1]"] - 3569664228[label="[1, 0, 0, 1, 0, 1, 1, 1]"] - 3701305222[label="[1, 1, 0, 1, 1, 1, 0, 0]"] - 3024132584[label="[1, 0, 1, 1, 1, 1, 0, 0]"] - 3031670352[label="[1, 1, 0, 0, 1, 0, 1, 1]"] - 1389186369[label="[0, 0, 1, 1, 0, 1, 0, 1]"] - 1476137680[label="[0, 0, 0, 1, 1, 1, 0, 0]"] - 3408895888[label="[1, 1, 0, 1, 1, 0, 0, 1]"] - 1025807162[label="[1, 1, 1, 0, 0, 0, 0, 0]"] - 1257748804[label="[1, 0, 1, 0, 1, 1, 1, 1]"] - 3806784681[label="[1, 1, 0, 1, 0, 0, 1, 1]"] - 2662161374[label="[0, 0, 1, 1, 0, 1, 1, 0]"] - 341781252[label="[1, 0, 0, 1, 1, 1, 1, 1]"] - 2956543858[label="[0, 0, 0, 1, 1, 1, 1, 1]"] - 4225915748[label="[0, 1, 0, 1, 1, 0, 0, 1]"] - 4174934612[label="[1, 1, 0, 0, 0, 0, 1, 1]"] - 616242749[label="[0, 0, 1, 1, 1, 0, 0, 1]"] - 114033711[label="[0, 0, 0, 1, 0, 1, 0, 1]"] - 489079066[label="[0, 0, 1, 0, 1, 1, 0, 1]"] - 3863142590[label="[0, 1, 0, 0, 0, 1, 0, 0]"] - 730092841[label="[0, 1, 1, 0, 0, 1, 0, 1]"] - 625166020[label="[0, 1, 0, 0, 0, 0, 0, 1]"] - 2695800214[label="[0, 0, 0, 0, 1, 0, 1, 1]"] - 2757872035[label="[1, 1, 1, 1, 1, 1, 1, 1]"] - 814309891[label="[0, 0, 0, 0, 0, 0, 1, 1]"] - 2389889247[label="[0, 1, 1, 0, 1, 0, 1, 1]"] - 3818475453[label="[0, 1, 0, 1, 1, 1, 0, 1]"] - 4267216582[label="[0, 1, 1, 1, 1, 0, 0, 1]"] - 2611811393[label="[0, 0, 1, 1, 0, 1, 1, 1]"] - 4006653452[label="[0, 1, 0, 1, 0, 0, 1, 1]"] - 3283303280[label="[0, 1, 1, 1, 0, 0, 1, 1]"] - 566349598[label="[1, 0, 1, 0, 0, 0, 0, 0]"] - 1102237284[label="[1, 0, 0, 0, 1, 0, 0, 0]"] - 3886701531[label="[0, 1, 1, 0, 0, 0, 1, 1]"] - 1281893856[label="[1, 0, 0, 1, 1, 0, 1, 0]"] - 1807202653[label="[0, 1, 1, 0, 0, 1, 0, 0]"] - 3653750597[label="[0, 1, 0, 1, 1, 0, 0, 0]"] - 3932195571[label="[1, 0, 1, 1, 0, 1, 0, 0]"] - 2614247803[label="[1, 1, 0, 1, 0, 1, 0, 1]"] - 340839238[label="[1, 1, 1, 0, 1, 1, 0, 1]"] - 703869277[label="[0, 1, 0, 0, 1, 1, 0, 0]"] - 1005042913[label="[0, 0, 0, 0, 1, 1, 1, 1]"] - 2093178660[label="[1, 0, 1, 0, 1, 1, 1, 0]"] - 3116854283[label="[0, 0, 1, 1, 1, 0, 1, 0]"] - 269858152[label="[1, 1, 1, 0, 1, 1, 1, 1]"] - 3720302707[label="[0, 1, 1, 1, 0, 0, 0, 1]"] - 3992611598[label="[0, 1, 0, 1, 0, 1, 1, 0]"] - 2694424578[label="[0, 1, 1, 1, 1, 1, 0, 1]"] - 2210017943[label="[1, 0, 1, 0, 0, 0, 1, 1]"] - 1947342348[label="[1, 1, 0, 0, 1, 1, 1, 0]"] - 1594237941[label="[1, 0, 0, 0, 1, 1, 0, 0]"] - 2577465764[label="[1, 1, 0, 1, 1, 0, 0, 0]"] - 2021613852[label="[0, 0, 0, 1, 1, 0, 0, 0]"] - 2576868663[label="[0, 1, 0, 0, 1, 0, 0, 1]"] - 2929388316[label="[1, 1, 0, 0, 0, 1, 1, 1]"] - 1211446481[label="[0, 1, 1, 0, 0, 0, 0, 0]"] - 3956835859[label="[1, 1, 1, 1, 1, 1, 0, 0]"] - 3164977462[label="[0, 1, 0, 1, 1, 0, 1, 0]"] - 2675173574[label="[0, 0, 1, 0, 0, 0, 1, 1]"] - 1744448600[label="[0, 1, 1, 1, 1, 1, 1, 0]"] - 4040258515[label="[1, 1, 0, 0, 1, 1, 0, 1]"] - 4204565953[label="[1, 1, 1, 1, 1, 0, 0, 0]"] - 4280082815[label="[0, 1, 1, 1, 0, 1, 1, 1]"] - 2359991343[label="[1, 0, 1, 1, 0, 1, 1, 1]"] - 1669442311[label="[1, 0, 1, 0, 0, 0, 1, 0]"] - 3372683600[label="[0, 1, 0, 0, 1, 0, 1, 1]"] - 2698673405[label="[1, 1, 0, 0, 1, 1, 1, 1]"] - 2001959156[label="[0, 0, 1, 1, 1, 1, 0, 0]"] - 500051265[label="[1, 0, 0, 1, 1, 1, 1, 0]"] - 2951794785[label="[1, 0, 0, 0, 1, 0, 1, 0]"] - 2895857263[label="[0, 1, 1, 1, 0, 1, 0, 0]"] - 3615109539[label="[0, 1, 1, 1, 0, 0, 1, 0]"] - 3722414022[label="[1, 1, 0, 1, 0, 0, 0, 1]"] - 949457869 -> 341183630 [weight=1] - 949457869 -> 3720302707 [weight=1] - 2536618053 -> 114033711 [weight=1] - 2536618053 -> 625166020 [weight=1] - 2536618053 -> 730092841 [weight=1] - 2536618053 -> 2536618053 [weight=1] - 2536618053 -> 2576868663 [weight=1] - 2536618053 -> 2614247803 [weight=1] - 2536618053 -> 3257104108 [weight=1] - 2536618053 -> 4006653452 [weight=1] - 724171536 -> 1257748804 [weight=1] - 724171536 -> 4072798414 [weight=1] - 1402067371 -> 1947342348 [weight=1] - 1402067371 -> 3818475453 [weight=1] - 3908895871 -> 512258003 [weight=1] - 3908895871 -> 635681421 [weight=1] - 3908895871 -> 677448650 [weight=1] - 3908895871 -> 1451784272 [weight=1] - 3908895871 -> 2695800214 [weight=1] - 3908895871 -> 3408895888 [weight=1] - 3908895871 -> 3715967540 [weight=1] - 3908895871 -> 3908895871 [weight=1] - 2403915804 -> 1258450967 [weight=1] - 2403915804 -> 1744448600 [weight=1] - 2403915804 -> 2389889247 [weight=1] - 2403915804 -> 2403915804 [weight=1] - 2403915804 -> 2694424578 [weight=1] - 2403915804 -> 2757872035 [weight=1] - 2403915804 -> 3587387457 [weight=1] - 2403915804 -> 4280082815 [weight=1] - 2848633694 -> 2343540229 [weight=1] - 2848633694 -> 2878229955 [weight=1] - 1971595665 -> 1971595665 [weight=1] - 1971595665 -> 3715967540 [weight=1] - 19331105 -> 19331105 [weight=1] - 19331105 -> 625166020 [weight=1] - 19331105 -> 1389186369 [weight=1] - 19331105 -> 1669442311 [weight=1] - 19331105 -> 2951794785 [weight=1] - 19331105 -> 3844664360 [weight=1] - 19331105 -> 3863142590 [weight=1] - 3937712037 -> 284311100 [weight=1] - 3937712037 -> 340839238 [weight=1] - 3937712037 -> 730092841 [weight=1] - 3937712037 -> 1807202653 [weight=1] - 3937712037 -> 3937712037 [weight=1] - 767075551 -> 767075551 [weight=1] - 767075551 -> 3992611598 [weight=1] - 3354606782 -> 496639972 [weight=1] - 3354606782 -> 730092841 [weight=1] - 3354606782 -> 1687961054 [weight=1] - 3354606782 -> 3234209085 [weight=1] - 284311100 -> 284311100 [weight=1] - 284311100 -> 1807202653 [weight=1] - 284311100 -> 3937712037 [weight=1] - 284311100 -> 3965625862 [weight=1] - 4072798414 -> 907040973 [weight=1] - 4072798414 -> 3031670352 [weight=1] - 4072798414 -> 3965625862 [weight=1] - 4072798414 -> 4072798414 [weight=1] - 443214995 -> 443214995 [weight=1] - 443214995 -> 625166020 [weight=1] - 443214995 -> 3354606782 [weight=1] - 443214995 -> 4174934612 [weight=1] - 2445954675 -> 269858152 [weight=1] - 2445954675 -> 284311100 [weight=1] - 2445954675 -> 340839238 [weight=1] - 2445954675 -> 1543204776 [weight=1] - 2445954675 -> 1807202653 [weight=1] - 2445954675 -> 2445954675 [weight=1] - 2445954675 -> 2925632667 [weight=1] - 2445954675 -> 3041433247 [weight=1] - 2445954675 -> 3234209085 [weight=1] - 2445954675 -> 3260494834 [weight=1] - 2445954675 -> 3539985169 [weight=1] - 2445954675 -> 3730757465 [weight=1] - 2445954675 -> 3801418391 [weight=1] - 2445954675 -> 3965625862 [weight=1] - 2445954675 -> 4204565953 [weight=1] - 2457784034 -> 698173556 [weight=1] - 2457784034 -> 1389186369 [weight=1] - 2457784034 -> 2457784034 [weight=1] - 2457784034 -> 2611811393 [weight=1] - 2457784034 -> 3043258635 [weight=1] - 2457784034 -> 3847528191 [weight=1] - 1389735369 -> 625166020 [weight=1] - 1389735369 -> 1669442311 [weight=1] - 2587689007 -> 698173556 [weight=1] - 2587689007 -> 1025807162 [weight=1] - 2587689007 -> 2587689007 [weight=1] - 2925632667 -> 2925632667 [weight=1] - 2925632667 -> 3260494834 [weight=1] - 2925632667 -> 3956835859 [weight=1] - 2925632667 -> 4058374985 [weight=1] - 2057570518 -> 449175020 [weight=1] - 2057570518 -> 2662161374 [weight=1] - 2057570518 -> 3806784681 [weight=1] - 3257104108 -> 730092841 [weight=1] - 3257104108 -> 2250553917 [weight=1] - 3257104108 -> 2895857263 [weight=1] - 3257104108 -> 3234209085 [weight=1] - 3257104108 -> 3257104108 [weight=1] - 3257104108 -> 3539985169 [weight=1] - 3257104108 -> 4280082815 [weight=1] - 3335717218 -> 2642425121 [weight=1] - 3335717218 -> 3335717218 [weight=1] - 698173556 -> 698173556 [weight=1] - 698173556 -> 730092841 [weight=1] - 698173556 -> 1211446481 [weight=1] - 698173556 -> 1807202653 [weight=1] - 698173556 -> 2250553917 [weight=1] - 698173556 -> 2563037542 [weight=1] - 698173556 -> 2587689007 [weight=1] - 698173556 -> 2698673405 [weight=1] - 698173556 -> 2757872035 [weight=1] - 698173556 -> 3257104108 [weight=1] - 698173556 -> 3587387457 [weight=1] - 698173556 -> 3730757465 [weight=1] - 698173556 -> 3886701531 [weight=1] - 698173556 -> 4058374985 [weight=1] - 698173556 -> 4280082815 [weight=1] - 3715967540 -> 1971595665 [weight=1] - 3715967540 -> 2576868663 [weight=1] - 3715967540 -> 2614247803 [weight=1] - 3715967540 -> 3715967540 [weight=1] - 3715967540 -> 4040258515 [weight=1] - 3715967540 -> 4225915748 [weight=1] - 2884901790 -> 2457784034 [weight=1] - 2884901790 -> 3844664360 [weight=1] - 3234209085 -> 730092841 [weight=1] - 3234209085 -> 2563037542 [weight=1] - 3234209085 -> 2587689007 [weight=1] - 3234209085 -> 3257104108 [weight=1] - 4285881222 -> 2614247803 [weight=1] - 4285881222 -> 3610445940 [weight=1] - 2563037542 -> 504513812 [weight=1] - 2563037542 -> 1687961054 [weight=1] - 2563037542 -> 2563037542 [weight=1] - 2563037542 -> 3234209085 [weight=1] - 2563037542 -> 3283303280 [weight=1] - 2563037542 -> 3886701531 [weight=1] - 2563037542 -> 4280082815 [weight=1] - 2250553917 -> 625166020 [weight=1] - 2250553917 -> 698173556 [weight=1] - 2250553917 -> 730092841 [weight=1] - 2250553917 -> 1211446481 [weight=1] - 2250553917 -> 2250553917 [weight=1] - 2250553917 -> 3257104108 [weight=1] - 2250553917 -> 3886701531 [weight=1] - 2250553917 -> 3937712037 [weight=1] - 1714495371 -> 1714495371 [weight=1] - 1714495371 -> 1744448600 [weight=1] - 1714495371 -> 3031670352 [weight=1] - 1714495371 -> 3615109539 [weight=1] - 3610445940 -> 1947342348 [weight=1] - 3610445940 -> 2878229955 [weight=1] - 2642425121 -> 2642425121 [weight=1] - 2642425121 -> 3335717218 [weight=1] - 74531871 -> 767075551 [weight=1] - 74531871 -> 3041433247 [weight=1] - 3965625862 -> 284311100 [weight=1] - 3965625862 -> 340839238 [weight=1] - 3965625862 -> 1807202653 [weight=1] - 3965625862 -> 3965625862 [weight=1] - 635681421 -> 635681421 [weight=1] - 635681421 -> 4127025499 [weight=1] - 3539985169 -> 512258003 [weight=1] - 3539985169 -> 2445954675 [weight=1] - 3539985169 -> 3539985169 [weight=1] - 3539985169 -> 3956835859 [weight=1] - 3260494834 -> 269858152 [weight=1] - 3260494834 -> 512258003 [weight=1] - 3260494834 -> 730092841 [weight=1] - 3260494834 -> 1543204776 [weight=1] - 3260494834 -> 2304576397 [weight=1] - 3260494834 -> 2445954675 [weight=1] - 3260494834 -> 2925632667 [weight=1] - 3260494834 -> 3257104108 [weight=1] - 3260494834 -> 3260494834 [weight=1] - 3260494834 -> 3358219454 [weight=1] - 3260494834 -> 3956835859 [weight=1] - 3260494834 -> 3965625862 [weight=1] - 3260494834 -> 4267216582 [weight=1] - 1596605361 -> 1005042913 [weight=1] - 1596605361 -> 1596605361 [weight=1] - 4127025499 -> 635681421 [weight=1] - 4127025499 -> 1257748804 [weight=1] - 4127025499 -> 2001959156 [weight=1] - 4127025499 -> 4127025499 [weight=1] - 4127025499 -> 4225915748 [weight=1] - 4058374985 -> 284311100 [weight=1] - 4058374985 -> 2445954675 [weight=1] - 4058374985 -> 3358219454 [weight=1] - 4058374985 -> 3594480722 [weight=1] - 504513812 -> 504513812 [weight=1] - 504513812 -> 1315291317 [weight=1] - 504513812 -> 2563037542 [weight=1] - 504513812 -> 3886701531 [weight=1] - 467112377 -> 566349598 [weight=1] - 467112377 -> 2268642208 [weight=1] - 3844664360 -> 19331105 [weight=1] - 3844664360 -> 698173556 [weight=1] - 3844664360 -> 3844664360 [weight=1] - 3844664360 -> 3847528191 [weight=1] - 2878229955 -> 765970116 [weight=1] - 2878229955 -> 1451784272 [weight=1] - 2878229955 -> 2343540229 [weight=1] - 2878229955 -> 2662161374 [weight=1] - 2878229955 -> 2878229955 [weight=1] - 1315291317 -> 341183630 [weight=1] - 1315291317 -> 504513812 [weight=1] - 1315291317 -> 1315291317 [weight=1] - 512258003 -> 730092841 [weight=1] - 512258003 -> 3260494834 [weight=1] - 512258003 -> 3358219454 [weight=1] - 512258003 -> 3539985169 [weight=1] - 512258003 -> 3801418391 [weight=1] - 2059513195 -> 767075551 [weight=1] - 2059513195 -> 3041433247 [weight=1] - 765970116 -> 765970116 [weight=1] - 765970116 -> 2343540229 [weight=1] - 765970116 -> 2878229955 [weight=1] - 2250372135 -> 2057570518 [weight=1] - 2250372135 -> 4006653452 [weight=1] - 1451784272 -> 341781252 [weight=1] - 1451784272 -> 688080727 [weight=1] - 1451784272 -> 1451784272 [weight=1] - 1451784272 -> 1687961054 [weight=1] - 1451784272 -> 1809647678 [weight=1] - 1451784272 -> 2093178660 [weight=1] - 1451784272 -> 2577465764 [weight=1] - 1451784272 -> 2878229955 [weight=1] - 1451784272 -> 3026510743 [weight=1] - 1451784272 -> 3260494834 [weight=1] - 1451784272 -> 3408895888 [weight=1] - 1451784272 -> 3908895871 [weight=1] - 1451784272 -> 4225915748 [weight=1] - 4005480581 -> 2457784034 [weight=1] - 4005480581 -> 3844664360 [weight=1] - 341183630 -> 341183630 [weight=1] - 341183630 -> 1315291317 [weight=1] - 341183630 -> 1669442311 [weight=1] - 341183630 -> 3720302707 [weight=1] - 341183630 -> 3886701531 [weight=1] - 341183630 -> 3937712037 [weight=1] - 1543204776 -> 340839238 [weight=1] - 1543204776 -> 512258003 [weight=1] - 1543204776 -> 730092841 [weight=1] - 1543204776 -> 1543204776 [weight=1] - 1543204776 -> 2445954675 [weight=1] - 1543204776 -> 2757872035 [weight=1] - 1543204776 -> 3956835859 [weight=1] - 1543204776 -> 4204565953 [weight=1] - 2304576397 -> 730092841 [weight=1] - 2304576397 -> 2304576397 [weight=1] - 2304576397 -> 3041433247 [weight=1] - 2304576397 -> 3260494834 [weight=1] - 449175020 -> 1669442311 [weight=1] - 449175020 -> 2675173574 [weight=1] - 1687961054 -> 19331105 [weight=1] - 1687961054 -> 1240788070 [weight=1] - 1687961054 -> 1451784272 [weight=1] - 1687961054 -> 1687961054 [weight=1] - 1687961054 -> 3354606782 [weight=1] - 1687961054 -> 3587387457 [weight=1] - 1687961054 -> 4174934612 [weight=1] - 1687961054 -> 4280082815 [weight=1] - 3682568289 -> 93601957 [weight=1] - 3682568289 -> 3682568289 [weight=1] - 3594480722 -> 1543204776 [weight=1] - 3594480722 -> 1744448600 [weight=1] - 3594480722 -> 1947342348 [weight=1] - 3594480722 -> 2563037542 [weight=1] - 3594480722 -> 2757872035 [weight=1] - 3594480722 -> 4058374985 [weight=1] - 3358219454 -> 269858152 [weight=1] - 3358219454 -> 284311100 [weight=1] - 3358219454 -> 512258003 [weight=1] - 3358219454 -> 3260494834 [weight=1] - 3358219454 -> 3358219454 [weight=1] - 3358219454 -> 3539985169 [weight=1] - 3358219454 -> 3730757465 [weight=1] - 688080727 -> 1257748804 [weight=1] - 688080727 -> 1669442311 [weight=1] - 688080727 -> 3587387457 [weight=1] - 688080727 -> 3937712037 [weight=1] - 2424212868 -> 2424212868 [weight=1] - 2424212868 -> 3932195571 [weight=1] - 907040973 -> 341781252 [weight=1] - 907040973 -> 907040973 [weight=1] - 907040973 -> 2956543858 [weight=1] - 907040973 -> 3031670352 [weight=1] - 907040973 -> 3260494834 [weight=1] - 907040973 -> 3956835859 [weight=1] - 3801418391 -> 3956835859 [weight=1] - 3801418391 -> 3965625862 [weight=1] - 3801418391 -> 4058374985 [weight=1] - 3801418391 -> 4267216582 [weight=1] - 3587387457 -> 625166020 [weight=1] - 3587387457 -> 698173556 [weight=1] - 3587387457 -> 1258450967 [weight=1] - 3587387457 -> 2403915804 [weight=1] - 3587387457 -> 2694424578 [weight=1] - 3587387457 -> 3587387457 [weight=1] - 3587387457 -> 3937712037 [weight=1] - 3587387457 -> 4040258515 [weight=1] - 4248627782 -> 1258450967 [weight=1] - 4248627782 -> 2093178660 [weight=1] - 4248627782 -> 2848633694 [weight=1] - 4248627782 -> 4225915748 [weight=1] - 1258450967 -> 489079066 [weight=1] - 1258450967 -> 1005042913 [weight=1] - 1258450967 -> 1257748804 [weight=1] - 1258450967 -> 1258450967 [weight=1] - 1258450967 -> 1402067371 [weight=1] - 1258450967 -> 2698673405 [weight=1] - 1258450967 -> 3587387457 [weight=1] - 1258450967 -> 3937712037 [weight=1] - 3043258635 -> 114033711 [weight=1] - 3043258635 -> 730092841 [weight=1] - 3043258635 -> 2675173574 [weight=1] - 3043258635 -> 3257104108 [weight=1] - 3980964254 -> 688080727 [weight=1] - 3980964254 -> 1099471454 [weight=1] - 3980964254 -> 3569664228 [weight=1] - 3980964254 -> 3818475453 [weight=1] - 2343540229 -> 2343540229 [weight=1] - 2343540229 -> 2878229955 [weight=1] - 3730757465 -> 1258450967 [weight=1] - 3730757465 -> 2389889247 [weight=1] - 3730757465 -> 2445954675 [weight=1] - 3730757465 -> 2757872035 [weight=1] - 3730757465 -> 3031670352 [weight=1] - 3730757465 -> 3260494834 [weight=1] - 3730757465 -> 3283303280 [weight=1] - 3730757465 -> 3730757465 [weight=1] - 3730757465 -> 3965625862 [weight=1] - 3041433247 -> 340839238 [weight=1] - 3041433247 -> 1807202653 [weight=1] - 3041433247 -> 2304576397 [weight=1] - 3041433247 -> 2445954675 [weight=1] - 3041433247 -> 3041433247 [weight=1] - 93601957 -> 93601957 [weight=1] - 93601957 -> 3682568289 [weight=1] - 3701305222 -> 1402067371 [weight=1] - 3701305222 -> 2698673405 [weight=1] - 3024132584 -> 1257748804 [weight=1] - 3024132584 -> 2001959156 [weight=1] - 3031670352 -> 677448650 [weight=1] - 3031670352 -> 907040973 [weight=1] - 3031670352 -> 2614247803 [weight=1] - 3031670352 -> 3031670352 [weight=1] - 3031670352 -> 3610445940 [weight=1] - 3031670352 -> 3715967540 [weight=1] - 1389186369 -> 19331105 [weight=1] - 1389186369 -> 1389186369 [weight=1] - 1389186369 -> 1451784272 [weight=1] - 1389186369 -> 2457784034 [weight=1] - 1389186369 -> 2536618053 [weight=1] - 1389186369 -> 2611811393 [weight=1] - 1389186369 -> 2662161374 [weight=1] - 1389186369 -> 3043258635 [weight=1] - 1389186369 -> 3992611598 [weight=1] - 1476137680 -> 1594237941 [weight=1] - 1476137680 -> 2021613852 [weight=1] - 3408895888 -> 907040973 [weight=1] - 3408895888 -> 1451784272 [weight=1] - 3408895888 -> 1809647678 [weight=1] - 3408895888 -> 2093178660 [weight=1] - 3408895888 -> 2577465764 [weight=1] - 3408895888 -> 3260494834 [weight=1] - 3408895888 -> 3408895888 [weight=1] - 3408895888 -> 3908895871 [weight=1] - 3408895888 -> 4225915748 [weight=1] - 1025807162 -> 1211446481 [weight=1] - 1025807162 -> 2587689007 [weight=1] - 1257748804 -> 907040973 [weight=1] - 1257748804 -> 1258450967 [weight=1] - 1257748804 -> 1451784272 [weight=1] - 1257748804 -> 2093178660 [weight=1] - 1257748804 -> 2577465764 [weight=1] - 1257748804 -> 2848633694 [weight=1] - 1257748804 -> 3024132584 [weight=1] - 1257748804 -> 3408895888 [weight=1] - 1257748804 -> 4127025499 [weight=1] - 1257748804 -> 4225915748 [weight=1] - 3806784681 -> 2057570518 [weight=1] - 3806784681 -> 4006653452 [weight=1] - 4225915748 -> 1451784272 [weight=1] - 4225915748 -> 3408895888 [weight=1] - 4225915748 -> 3653750597 [weight=1] - 4225915748 -> 3844664360 [weight=1] - 4225915748 -> 3908895871 [weight=1] - 4225915748 -> 4127025499 [weight=1] - 4225915748 -> 4225915748 [weight=1] - 4225915748 -> 4248627782 [weight=1] - 616242749 -> 3116854283 [weight=1] - 616242749 -> 4225915748 [weight=1] - 489079066 -> 489079066 [weight=1] - 489079066 -> 1005042913 [weight=1] - 489079066 -> 1258450967 [weight=1] - 489079066 -> 3937712037 [weight=1] - 3863142590 -> 3354606782 [weight=1] - 3863142590 -> 3594480722 [weight=1] - 730092841 -> 340839238 [weight=1] - 730092841 -> 730092841 [weight=1] - 730092841 -> 1807202653 [weight=1] - 730092841 -> 2304576397 [weight=1] - 730092841 -> 3937712037 [weight=1] - 625166020 -> 443214995 [weight=1] - 625166020 -> 625166020 [weight=1] - 625166020 -> 1687961054 [weight=1] - 625166020 -> 2536618053 [weight=1] - 2757872035 -> 907040973 [weight=1] - 2757872035 -> 2389889247 [weight=1] - 2757872035 -> 2403915804 [weight=1] - 2757872035 -> 2757872035 [weight=1] - 2757872035 -> 3354606782 [weight=1] - 2757872035 -> 3594480722 [weight=1] - 2757872035 -> 3965625862 [weight=1] - 2757872035 -> 4040258515 [weight=1] - 2389889247 -> 2389889247 [weight=1] - 2389889247 -> 2757872035 [weight=1] - 3818475453 -> 1240788070 [weight=1] - 3818475453 -> 1971595665 [weight=1] - 3818475453 -> 2576868663 [weight=1] - 3818475453 -> 3587387457 [weight=1] - 3818475453 -> 3720302707 [weight=1] - 3818475453 -> 3818475453 [weight=1] - 3818475453 -> 4040258515 [weight=1] - 3818475453 -> 4225915748 [weight=1] - 3818475453 -> 4248627782 [weight=1] - 2611811393 -> 2662161374 [weight=1] - 2611811393 -> 3806784681 [weight=1] - 4006653452 -> 1099471454 [weight=1] - 4006653452 -> 3818475453 [weight=1] - 3283303280 -> 2675173574 [weight=1] - 3283303280 -> 3257104108 [weight=1] - 3283303280 -> 4006653452 [weight=1] - 566349598 -> 1451784272 [weight=1] - 566349598 -> 3844664360 [weight=1] - 1102237284 -> 1594237941 [weight=1] - 1102237284 -> 2021613852 [weight=1] - 3886701531 -> 341183630 [weight=1] - 3886701531 -> 496639972 [weight=1] - 3886701531 -> 504513812 [weight=1] - 3886701531 -> 730092841 [weight=1] - 3886701531 -> 2563037542 [weight=1] - 3886701531 -> 3720302707 [weight=1] - 3886701531 -> 3886701531 [weight=1] - 3886701531 -> 4040258515 [weight=1] - 3886701531 -> 4280082815 [weight=1] - 1807202653 -> 284311100 [weight=1] - 1807202653 -> 730092841 [weight=1] - 1807202653 -> 1807202653 [weight=1] - 1807202653 -> 2445954675 [weight=1] - 1807202653 -> 2694424578 [weight=1] - 1807202653 -> 3041433247 [weight=1] - 1807202653 -> 3539985169 [weight=1] - 1807202653 -> 3965625862 [weight=1] - 3653750597 -> 2001959156 [weight=1] - 3653750597 -> 2093178660 [weight=1] - 3653750597 -> 2577465764 [weight=1] - 3653750597 -> 3653750597 [weight=1] - 3653750597 -> 4127025499 [weight=1] - 3653750597 -> 4225915748 [weight=1] - 3932195571 -> 2424212868 [weight=1] - 3932195571 -> 3932195571 [weight=1] - 2614247803 -> 2536618053 [weight=1] - 2614247803 -> 2614247803 [weight=1] - 340839238 -> 340839238 [weight=1] - 340839238 -> 730092841 [weight=1] - 340839238 -> 3937712037 [weight=1] - 340839238 -> 3965625862 [weight=1] - 703869277 -> 1258450967 [weight=1] - 703869277 -> 2445954675 [weight=1] - 1005042913 -> 1005042913 [weight=1] - 1005042913 -> 1596605361 [weight=1] - 2093178660 -> 635681421 [weight=1] - 2093178660 -> 688080727 [weight=1] - 2093178660 -> 1451784272 [weight=1] - 2093178660 -> 1947342348 [weight=1] - 2093178660 -> 2093178660 [weight=1] - 2093178660 -> 2878229955 [weight=1] - 2093178660 -> 3408895888 [weight=1] - 2093178660 -> 4248627782 [weight=1] - 269858152 -> 269858152 [weight=1] - 269858152 -> 2445954675 [weight=1] - 269858152 -> 2925632667 [weight=1] - 269858152 -> 3260494834 [weight=1] - 269858152 -> 3358219454 [weight=1] - 269858152 -> 3730757465 [weight=1] - 269858152 -> 3965625862 [weight=1] - 3720302707 -> 341183630 [weight=1] - 3720302707 -> 3234209085 [weight=1] - 3720302707 -> 3260494834 [weight=1] - 3720302707 -> 3283303280 [weight=1] - 3720302707 -> 3720302707 [weight=1] - 3720302707 -> 3818475453 [weight=1] - 3992611598 -> 767075551 [weight=1] - 3992611598 -> 1389186369 [weight=1] - 3992611598 -> 2536618053 [weight=1] - 3992611598 -> 2662161374 [weight=1] - 3992611598 -> 3992611598 [weight=1] - 2694424578 -> 1807202653 [weight=1] - 2694424578 -> 2694424578 [weight=1] - 2694424578 -> 3260494834 [weight=1] - 2694424578 -> 3801418391 [weight=1] - 2210017943 -> 1669442311 [weight=1] - 2210017943 -> 2675173574 [weight=1] - 1947342348 -> 1744448600 [weight=1] - 1947342348 -> 3031670352 [weight=1] - 1947342348 -> 4040258515 [weight=1] - 1947342348 -> 4248627782 [weight=1] - 1594237941 -> 2951794785 [weight=1] - 1594237941 -> 3385205003 [weight=1] - 1594237941 -> 3863142590 [weight=1] - 1594237941 -> 4072798414 [weight=1] - 2577465764 -> 1451784272 [weight=1] - 2577465764 -> 2093178660 [weight=1] - 2577465764 -> 2577465764 [weight=1] - 2577465764 -> 3026510743 [weight=1] - 2577465764 -> 3260494834 [weight=1] - 2577465764 -> 3408895888 [weight=1] - 2577465764 -> 3653750597 [weight=1] - 2576868663 -> 2576868663 [weight=1] - 2576868663 -> 3715967540 [weight=1] - 2929388316 -> 443214995 [weight=1] - 2929388316 -> 1687961054 [weight=1] - 1211446481 -> 698173556 [weight=1] - 1211446481 -> 1025807162 [weight=1] - 1211446481 -> 1211446481 [weight=1] - 1211446481 -> 1807202653 [weight=1] - 1211446481 -> 2250553917 [weight=1] - 1211446481 -> 2895857263 [weight=1] - 1211446481 -> 3886701531 [weight=1] - 3956835859 -> 284311100 [weight=1] - 3956835859 -> 1543204776 [weight=1] - 3956835859 -> 2445954675 [weight=1] - 3956835859 -> 3260494834 [weight=1] - 3956835859 -> 3594480722 [weight=1] - 3956835859 -> 3801418391 [weight=1] - 3956835859 -> 3956835859 [weight=1] - 3164977462 -> 3116854283 [weight=1] - 3164977462 -> 4225915748 [weight=1] - 2675173574 -> 449175020 [weight=1] - 2675173574 -> 2210017943 [weight=1] - 2675173574 -> 2611811393 [weight=1] - 2675173574 -> 3806784681 [weight=1] - 1744448600 -> 2403915804 [weight=1] - 1744448600 -> 3594480722 [weight=1] - 4040258515 -> 730092841 [weight=1] - 4040258515 -> 1543204776 [weight=1] - 4040258515 -> 1947342348 [weight=1] - 4040258515 -> 2698673405 [weight=1] - 4040258515 -> 2757872035 [weight=1] - 4040258515 -> 3587387457 [weight=1] - 4040258515 -> 3886701531 [weight=1] - 4040258515 -> 4040258515 [weight=1] - 4280082815 -> 2403915804 [weight=1] - 4280082815 -> 2563037542 [weight=1] - 4280082815 -> 3886701531 [weight=1] - 4280082815 -> 4280082815 [weight=1] - 2359991343 -> 688080727 [weight=1] - 2359991343 -> 2210017943 [weight=1] - 2359991343 -> 2611811393 [weight=1] - 2359991343 -> 3569664228 [weight=1] - 1669442311 -> 566349598 [weight=1] - 1669442311 -> 2268642208 [weight=1] - 3372683600 -> 512258003 [weight=1] - 3372683600 -> 2695800214 [weight=1] - 2698673405 -> 1257748804 [weight=1] - 2698673405 -> 1947342348 [weight=1] - 2698673405 -> 3818475453 [weight=1] - 2698673405 -> 4072798414 [weight=1] - 2001959156 -> 2001959156 [weight=1] - 2001959156 -> 2956543858 [weight=1] - 2001959156 -> 3024132584 [weight=1] - 2001959156 -> 3653750597 [weight=1] - 2001959156 -> 3956835859 [weight=1] - 2001959156 -> 4127025499 [weight=1] - 2895857263 -> 2445954675 [weight=1] - 2895857263 -> 3257104108 [weight=1] - 3615109539 -> 19331105 [weight=1] - 3615109539 -> 1714495371 [weight=1] - 3615109539 -> 3615109539 [weight=1] - 3615109539 -> 4280082815 [weight=1] - 3722414022 -> 3385205003 [weight=1] - 3722414022 -> 4072798414 [weight=1] -}