Spaces:
Sleeping
Sleeping
Commit
·
3f4ce91
1
Parent(s):
d6b0684
Add functionality to save hall of fame to file
Browse files
.gitignore
CHANGED
|
@@ -1,2 +1,3 @@
|
|
| 1 |
.dataset.jl
|
| 2 |
.hyperparams.jl
|
|
|
|
|
|
| 1 |
.dataset.jl
|
| 2 |
.hyperparams.jl
|
| 3 |
+
*.csv
|
README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# Eureqa.jl
|
| 2 |
|
| 3 |
-
Symbolic regression built on
|
| 4 |
Uses regularized evolution and simulated annealing.
|
| 5 |
|
| 6 |
## Running:
|
|
|
|
| 1 |
# Eureqa.jl
|
| 2 |
|
| 3 |
+
Symbolic regression built on Julia, and interfaced by Python.
|
| 4 |
Uses regularized evolution and simulated annealing.
|
| 5 |
|
| 6 |
## Running:
|
eureqa.jl
CHANGED
|
@@ -592,21 +592,25 @@ function fullRun(niterations::Integer;
|
|
| 592 |
end
|
| 593 |
|
| 594 |
dominating = PopMember[]
|
| 595 |
-
|
| 596 |
-
|
| 597 |
-
|
| 598 |
-
|
| 599 |
-
|
| 600 |
-
|
| 601 |
-
|
| 602 |
-
|
| 603 |
-
|
| 604 |
-
|
| 605 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 606 |
end
|
| 607 |
end
|
|
|
|
| 608 |
end
|
| 609 |
-
debug(verbosity, "")
|
| 610 |
|
| 611 |
# Migration
|
| 612 |
if migration
|
|
|
|
| 592 |
end
|
| 593 |
|
| 594 |
dominating = PopMember[]
|
| 595 |
+
open(hofFile, "w") do io
|
| 596 |
+
debug(verbosity, "Hall of Fame:")
|
| 597 |
+
debug(verbosity, "-----------------------------------------")
|
| 598 |
+
debug(verbosity, "Complexity \t MSE \t Equation")
|
| 599 |
+
println(io,"Complexity|MSE|Equation")
|
| 600 |
+
for size=1:maxsize
|
| 601 |
+
if hallOfFame.exists[size]
|
| 602 |
+
member = hallOfFame.members[size]
|
| 603 |
+
numberSmallerAndBetter = sum([member.score > hallOfFame.members[i].score for i=1:(size-1)])
|
| 604 |
+
betterThanAllSmaller = (numberSmallerAndBetter == 0)
|
| 605 |
+
if betterThanAllSmaller
|
| 606 |
+
debug(verbosity, "$size \t $(member.score-parsimony*size) \t $(stringTree(member.tree))")
|
| 607 |
+
println(io, "$size|$(member.score-parsimony*size)|$(stringTree(member.tree))")
|
| 608 |
+
push!(dominating, member)
|
| 609 |
+
end
|
| 610 |
end
|
| 611 |
end
|
| 612 |
+
debug(verbosity, "")
|
| 613 |
end
|
|
|
|
| 614 |
|
| 615 |
# Migration
|
| 616 |
if migration
|
eureqa.py
CHANGED
|
@@ -11,7 +11,7 @@ def eureqa(threads=4, parsimony=1e-3, alpha=10,
|
|
| 11 |
unary_operators=["cos", "exp", "sin"],
|
| 12 |
niterations=20, npop=100, annealing=True,
|
| 13 |
ncyclesperiteration=5000, fractionReplaced=0.1,
|
| 14 |
-
topn=10
|
| 15 |
):
|
| 16 |
|
| 17 |
def_hyperparams = f"""
|
|
@@ -42,6 +42,8 @@ def eureqa(threads=4, parsimony=1e-3, alpha=10,
|
|
| 42 |
const fractionReplacedHof = {fractionReplacedHof}f0
|
| 43 |
# Optimize constants
|
| 44 |
const shouldOptimizeConstants = {'true' if shouldOptimizeConstants else 'false'}
|
|
|
|
|
|
|
| 45 |
##################
|
| 46 |
"""
|
| 47 |
|
|
@@ -64,7 +66,7 @@ def eureqa(threads=4, parsimony=1e-3, alpha=10,
|
|
| 64 |
'julia -O3',
|
| 65 |
f'--threads {threads}',
|
| 66 |
'-e',
|
| 67 |
-
f'\'include("
|
| 68 |
])
|
| 69 |
import os
|
| 70 |
os.system(command)
|
|
@@ -87,6 +89,7 @@ if __name__ == "__main__":
|
|
| 87 |
parser.add_argument("--hofMigration", type=bool, default=True, help="Whether to have hall of fame migration")
|
| 88 |
parser.add_argument("--shouldOptimizeConstants", type=bool, default=True, help="Whether to use classical optimization on constants before every migration (doesn't impact performance that much)")
|
| 89 |
parser.add_argument("--annealing", type=bool, default=True, help="Whether to use simulated annealing")
|
|
|
|
| 90 |
|
| 91 |
parser.add_argument(
|
| 92 |
"--binary-operators", type=str, nargs="+", default=["plus", "mul"],
|
|
|
|
| 11 |
unary_operators=["cos", "exp", "sin"],
|
| 12 |
niterations=20, npop=100, annealing=True,
|
| 13 |
ncyclesperiteration=5000, fractionReplaced=0.1,
|
| 14 |
+
topn=10, equation_file='hall_of_fame.csv'
|
| 15 |
):
|
| 16 |
|
| 17 |
def_hyperparams = f"""
|
|
|
|
| 42 |
const fractionReplacedHof = {fractionReplacedHof}f0
|
| 43 |
# Optimize constants
|
| 44 |
const shouldOptimizeConstants = {'true' if shouldOptimizeConstants else 'false'}
|
| 45 |
+
# File to put operators
|
| 46 |
+
const hofFile = "{equation_file}"
|
| 47 |
##################
|
| 48 |
"""
|
| 49 |
|
|
|
|
| 66 |
'julia -O3',
|
| 67 |
f'--threads {threads}',
|
| 68 |
'-e',
|
| 69 |
+
f'\'include("eureqa.jl"); fullRun({niterations:d}, npop={npop:d}, annealing={"true" if annealing else "false"}, ncyclesperiteration={ncyclesperiteration:d}, fractionReplaced={fractionReplaced:f}f0, verbosity=round(Int32, 1e9), topn={topn:d})\''
|
| 70 |
])
|
| 71 |
import os
|
| 72 |
os.system(command)
|
|
|
|
| 89 |
parser.add_argument("--hofMigration", type=bool, default=True, help="Whether to have hall of fame migration")
|
| 90 |
parser.add_argument("--shouldOptimizeConstants", type=bool, default=True, help="Whether to use classical optimization on constants before every migration (doesn't impact performance that much)")
|
| 91 |
parser.add_argument("--annealing", type=bool, default=True, help="Whether to use simulated annealing")
|
| 92 |
+
parser.add_argument("--equation_file", type=str, default='hall_of_fame.csv', help="File to dump best equations to")
|
| 93 |
|
| 94 |
parser.add_argument(
|
| 95 |
"--binary-operators", type=str, nargs="+", default=["plus", "mul"],
|