Spaces:
Sleeping
Sleeping
Commit
·
327e651
1
Parent(s):
651f56a
Create copy operation for nodes; faster than deepcopy
Browse files
README.md
CHANGED
|
@@ -147,14 +147,14 @@ pd.DataFrame, Results dataframe, giving complexity, MSE, and equations
|
|
| 147 |
|
| 148 |
# TODO
|
| 149 |
|
| 150 |
-
- [ ] Write our own tree copy operation; deepcopy() is the slowest operation by far.
|
| 151 |
- [ ] Consider adding mutation for constant<->variable
|
| 152 |
- [ ] Use NN to generate weights over all probability distribution conditional on error and existing equation, and train on some randomly-generated equations
|
| 153 |
- [ ] Performance:
|
| 154 |
- [ ] Use an enum for functions instead of storing them?
|
| 155 |
- Current most expensive operations:
|
| 156 |
- [ ] Calculating the loss function - there is duplicate calculations happening.
|
| 157 |
-
- [
|
|
|
|
| 158 |
- [x] Hyperparameter tune
|
| 159 |
- [x] Create a benchmark for accuracy
|
| 160 |
- [x] Add interface for either defining an operation to learn, or loading in arbitrary dataset.
|
|
|
|
| 147 |
|
| 148 |
# TODO
|
| 149 |
|
|
|
|
| 150 |
- [ ] Consider adding mutation for constant<->variable
|
| 151 |
- [ ] Use NN to generate weights over all probability distribution conditional on error and existing equation, and train on some randomly-generated equations
|
| 152 |
- [ ] Performance:
|
| 153 |
- [ ] Use an enum for functions instead of storing them?
|
| 154 |
- Current most expensive operations:
|
| 155 |
- [ ] Calculating the loss function - there is duplicate calculations happening.
|
| 156 |
+
- [x] Declaration of the weights array every iteration
|
| 157 |
+
- [x] Write our own tree copy operation; deepcopy() is the slowest operation by far.
|
| 158 |
- [x] Hyperparameter tune
|
| 159 |
- [x] Create a benchmark for accuracy
|
| 160 |
- [x] Add interface for either defining an operation to learn, or loading in arbitrary dataset.
|
eureqa.jl
CHANGED
|
@@ -39,6 +39,17 @@ mutable struct Node
|
|
| 39 |
Node(op, l::Union{Float32, Integer}, r::Union{Float32, Integer}) = new(2, 0.0f0, false, op, Node(l), Node(r))
|
| 40 |
end
|
| 41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
# Evaluate a symbolic equation:
|
| 43 |
function evalTree(tree::Node, x::Array{Float32, 1}=Float32[])::Float32
|
| 44 |
if tree.degree == 0
|
|
@@ -327,11 +338,11 @@ function iterate(
|
|
| 327 |
annealing::Bool=true
|
| 328 |
)::Node
|
| 329 |
prev = tree
|
| 330 |
-
tree =
|
| 331 |
|
| 332 |
mutationChoice = rand()
|
| 333 |
weightAdjustmentMutateConstant = min(8, countConstants(tree))/8.0
|
| 334 |
-
cur_weights =
|
| 335 |
cur_weights[1] *= weightAdjustmentMutateConstant
|
| 336 |
cur_weights /= sum(cur_weights)
|
| 337 |
cweights = cumsum(cur_weights)
|
|
@@ -361,7 +372,7 @@ function iterate(
|
|
| 361 |
probChange = exp(-delta/(T*alpha))
|
| 362 |
|
| 363 |
if isnan(afterLoss) || probChange < rand()
|
| 364 |
-
return
|
| 365 |
end
|
| 366 |
end
|
| 367 |
|
|
|
|
| 39 |
Node(op, l::Union{Float32, Integer}, r::Union{Float32, Integer}) = new(2, 0.0f0, false, op, Node(l), Node(r))
|
| 40 |
end
|
| 41 |
|
| 42 |
+
# Copy an equation (faster than deepcopy)
|
| 43 |
+
function copyNode(tree::Node)::Node
|
| 44 |
+
if tree.degree == 0
|
| 45 |
+
return Node(tree.val)
|
| 46 |
+
elseif tree.degree == 1
|
| 47 |
+
return Node(tree.op, copyNode(tree.l))
|
| 48 |
+
else
|
| 49 |
+
return Node(tree.op, copyNode(tree.l), copyNode(tree.r))
|
| 50 |
+
end
|
| 51 |
+
end
|
| 52 |
+
|
| 53 |
# Evaluate a symbolic equation:
|
| 54 |
function evalTree(tree::Node, x::Array{Float32, 1}=Float32[])::Float32
|
| 55 |
if tree.degree == 0
|
|
|
|
| 338 |
annealing::Bool=true
|
| 339 |
)::Node
|
| 340 |
prev = tree
|
| 341 |
+
tree = copyNode(tree)
|
| 342 |
|
| 343 |
mutationChoice = rand()
|
| 344 |
weightAdjustmentMutateConstant = min(8, countConstants(tree))/8.0
|
| 345 |
+
cur_weights = copy(mutationWeights) .* 1.0
|
| 346 |
cur_weights[1] *= weightAdjustmentMutateConstant
|
| 347 |
cur_weights /= sum(cur_weights)
|
| 348 |
cweights = cumsum(cur_weights)
|
|
|
|
| 372 |
probChange = exp(-delta/(T*alpha))
|
| 373 |
|
| 374 |
if isnan(afterLoss) || probChange < rand()
|
| 375 |
+
return copyNode(prev)
|
| 376 |
end
|
| 377 |
end
|
| 378 |
|