MilesCranmer commited on
Commit
c9adc43
1 Parent(s): c88d0b9

Fix #10 issue with hall of fame not saving

Browse files
Files changed (1) hide show
  1. julia/sr.jl +10 -41
julia/sr.jl CHANGED
@@ -1,6 +1,5 @@
1
  import Optim
2
  import Printf: @printf
3
- import Random: shuffle!
4
 
5
  const maxdegree = 2
6
  const actualMaxsize = maxsize + maxdegree
@@ -626,49 +625,19 @@ end
626
 
627
  # Mutate the best sampled member of the population
628
  function iterateSample(pop::Population, T::Float32)::PopMember
 
 
629
  end
630
 
631
  # Pass through the population several times, replacing the oldest
632
  # with the fittest of a small subsample
633
  function regEvolCycle(pop::Population, T::Float32)::Population
634
- # Batch over each subsample. Can give 15% improvement in speed; probably moreso for large pops.
635
- # but is ultimately a different algorithm than regularized evolution, and might not be
636
- # as good.
637
- if fast_cycle
638
- shuffle!(pop.members)
639
- n_evol_cycles = round(Integer, pop.n/ns)
640
- babies = Array{PopMember}(undef, n_evol_cycles)
641
-
642
- # Iterate each ns-member sub-sample
643
- @inbounds Threads.@threads for i=1:n_evol_cycles
644
- best_score = Inf32
645
- best_idx = 1+(i-1)*ns
646
- # Calculate best member of the subsample:
647
- for sub_i=1+(i-1)*ns:i*ns
648
- if pop.members[sub_i].score < best_score
649
- best_score = pop.members[sub_i].score
650
- best_idx = sub_i
651
- end
652
- end
653
- allstar = pop.members[best_idx]
654
- babies[i] = iterate(allstar, T)
655
- end
656
-
657
- # Replace the n_evol_cycles-oldest members of each population
658
- @inbounds for i=1:n_evol_cycles
659
- oldest = argmin([pop.members[member].birth for member=1:pop.n])
660
- pop.members[oldest] = babies[i]
661
- end
662
- else
663
- for i=1:round(Integer, pop.n/ns)
664
- allstar = bestOfSample(pop)
665
- baby = iterate(allstar, T)
666
- #printTree(baby.tree)
667
- oldest = argmin([pop.members[member].birth for member=1:pop.n])
668
- pop.members[oldest] = baby
669
- end
670
  end
671
-
672
  return pop
673
  end
674
 
@@ -830,13 +799,13 @@ function fullRun(niterations::Integer;
830
  hallOfFame = HallOfFame()
831
 
832
  for i=1:npopulations
833
- future = @spawnat :any Population(npop, 3)
834
  push!(allPops, future)
835
  end
836
 
837
  # # 2. Start the cycle on every process:
838
  @sync for i=1:npopulations
839
- @async allPops[i] = @spawnat :any run(fetch(allPops[i]), ncyclesperiteration, verbosity=verbosity)
840
  end
841
  println("Started!")
842
  cycles_complete = npopulations * niterations
@@ -914,7 +883,7 @@ function fullRun(niterations::Integer;
914
  end
915
 
916
  @async begin
917
- allPops[i] = @spawnat :any let
918
  tmp_pop = run(cur_pop, ncyclesperiteration, verbosity=verbosity)
919
  for j=1:tmp_pop.n
920
  if rand() < 0.1
 
1
  import Optim
2
  import Printf: @printf
 
3
 
4
  const maxdegree = 2
5
  const actualMaxsize = maxsize + maxdegree
 
625
 
626
  # Mutate the best sampled member of the population
627
  function iterateSample(pop::Population, T::Float32)::PopMember
628
+ allstar = bestOfSample(pop)
629
+ return iterate(allstar, T)
630
  end
631
 
632
  # Pass through the population several times, replacing the oldest
633
  # with the fittest of a small subsample
634
  function regEvolCycle(pop::Population, T::Float32)::Population
635
+ for i=1:round(Integer, pop.n/ns)
636
+ baby = iterateSample(pop, T)
637
+ #printTree(baby.tree)
638
+ oldest = argmin([pop.members[member].birth for member=1:pop.n])
639
+ pop.members[oldest] = baby
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
640
  end
 
641
  return pop
642
  end
643
 
 
799
  hallOfFame = HallOfFame()
800
 
801
  for i=1:npopulations
802
+ future = @spawn Population(npop, 3)
803
  push!(allPops, future)
804
  end
805
 
806
  # # 2. Start the cycle on every process:
807
  @sync for i=1:npopulations
808
+ @async allPops[i] = @spawn run(fetch(allPops[i]), ncyclesperiteration, verbosity=verbosity)
809
  end
810
  println("Started!")
811
  cycles_complete = npopulations * niterations
 
883
  end
884
 
885
  @async begin
886
+ allPops[i] = @spawn let
887
  tmp_pop = run(cur_pop, ncyclesperiteration, verbosity=verbosity)
888
  for j=1:tmp_pop.n
889
  if rand() < 0.1