Spaces:
Sleeping
Sleeping
Commit
Β·
48d465b
1
Parent(s):
a8b2d62
Make filenaming more consistent
Browse files- julia/{complexityChecks.jl β CheckConstraints.jl} +1 -1
- julia/{optimization.jl β ConstantOptimization.jl} +0 -0
- julia/{Node.jl β Equation.jl} +0 -0
- julia/{eval.jl β EvaluateEquation.jl} +0 -35
- julia/{errors.jl β LossFunctions.jl} +44 -1
- julia/{simulatedAnnealing.jl β Mutate.jl} +2 -3
- julia/{randomMutations.jl β MutationFunctions.jl} +0 -0
- julia/{constants.jl β ProgramConstants.jl} +0 -0
- julia/{regEvolCycle.jl β RegularizedEvolution.jl} +0 -0
- julia/{simplification.jl β SimplifyEquation.jl} +0 -0
- julia/{run.jl β SingleIteration.jl} +0 -0
- julia/{utils.jl β Utils.jl} +1 -1
- julia/halloffame.jl +1 -1
- julia/sr.jl +13 -40
julia/{complexityChecks.jl β CheckConstraints.jl}
RENAMED
|
@@ -39,4 +39,4 @@ function flagUnaOperatorComplexity(tree::Node, op::Int)::Bool
|
|
| 39 |
else
|
| 40 |
return (flagUnaOperatorComplexity(tree.l, op) || flagUnaOperatorComplexity(tree.r, op))
|
| 41 |
end
|
| 42 |
-
end
|
|
|
|
| 39 |
else
|
| 40 |
return (flagUnaOperatorComplexity(tree.l, op) || flagUnaOperatorComplexity(tree.r, op))
|
| 41 |
end
|
| 42 |
+
end
|
julia/{optimization.jl β ConstantOptimization.jl}
RENAMED
|
File without changes
|
julia/{Node.jl β Equation.jl}
RENAMED
|
File without changes
|
julia/{eval.jl β EvaluateEquation.jl}
RENAMED
|
@@ -45,38 +45,3 @@ function evalTreeArray(tree::Node, cX::Array{Float32, 2})::Union{Array{Float32,
|
|
| 45 |
return cumulator
|
| 46 |
end
|
| 47 |
end
|
| 48 |
-
|
| 49 |
-
# Score an equation
|
| 50 |
-
function scoreFunc(tree::Node)::Float32
|
| 51 |
-
prediction = evalTreeArray(tree)
|
| 52 |
-
if prediction === nothing
|
| 53 |
-
return 1f9
|
| 54 |
-
end
|
| 55 |
-
if weighted
|
| 56 |
-
mse = MSE(prediction, y, weights)
|
| 57 |
-
else
|
| 58 |
-
mse = MSE(prediction, y)
|
| 59 |
-
end
|
| 60 |
-
return mse / baselineMSE + countNodes(tree)*parsimony
|
| 61 |
-
end
|
| 62 |
-
|
| 63 |
-
# Score an equation with a small batch
|
| 64 |
-
function scoreFuncBatch(tree::Node)::Float32
|
| 65 |
-
# batchSize
|
| 66 |
-
batch_idx = randperm(len)[1:batchSize]
|
| 67 |
-
batch_X = X[batch_idx, :]
|
| 68 |
-
prediction = evalTreeArray(tree, batch_X)
|
| 69 |
-
if prediction === nothing
|
| 70 |
-
return 1f9
|
| 71 |
-
end
|
| 72 |
-
size_adjustment = 1f0
|
| 73 |
-
batch_y = y[batch_idx]
|
| 74 |
-
if weighted
|
| 75 |
-
batch_w = weights[batch_idx]
|
| 76 |
-
mse = MSE(prediction, batch_y, batch_w)
|
| 77 |
-
size_adjustment = 1f0 * len / batchSize
|
| 78 |
-
else
|
| 79 |
-
mse = MSE(prediction, batch_y)
|
| 80 |
-
end
|
| 81 |
-
return size_adjustment * mse / baselineMSE + countNodes(tree)*parsimony
|
| 82 |
-
end
|
|
|
|
| 45 |
return cumulator
|
| 46 |
end
|
| 47 |
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
julia/{errors.jl β LossFunctions.jl}
RENAMED
|
@@ -34,4 +34,47 @@ end
|
|
| 34 |
# Mean of square error between two arrays
|
| 35 |
function MSE(x::Array{Float32}, y::Array{Float32}, w::Array{Float32})::Float32
|
| 36 |
return SSE(x, y, w)/sum(w)
|
| 37 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
# Mean of square error between two arrays
|
| 35 |
function MSE(x::Array{Float32}, y::Array{Float32}, w::Array{Float32})::Float32
|
| 36 |
return SSE(x, y, w)/sum(w)
|
| 37 |
+
end
|
| 38 |
+
|
| 39 |
+
if weighted
|
| 40 |
+
const avgy = sum(y .* weights)/sum(weights)
|
| 41 |
+
const baselineMSE = MSE(y, convert(Array{Float32, 1}, ones(len) .* avgy), weights)
|
| 42 |
+
else
|
| 43 |
+
const avgy = sum(y)/len
|
| 44 |
+
const baselineMSE = MSE(y, convert(Array{Float32, 1}, ones(len) .* avgy))
|
| 45 |
+
end
|
| 46 |
+
|
| 47 |
+
# Score an equation
|
| 48 |
+
function scoreFunc(tree::Node)::Float32
|
| 49 |
+
prediction = evalTreeArray(tree)
|
| 50 |
+
if prediction === nothing
|
| 51 |
+
return 1f9
|
| 52 |
+
end
|
| 53 |
+
if weighted
|
| 54 |
+
mse = MSE(prediction, y, weights)
|
| 55 |
+
else
|
| 56 |
+
mse = MSE(prediction, y)
|
| 57 |
+
end
|
| 58 |
+
return mse / baselineMSE + countNodes(tree)*parsimony
|
| 59 |
+
end
|
| 60 |
+
|
| 61 |
+
# Score an equation with a small batch
|
| 62 |
+
function scoreFuncBatch(tree::Node)::Float32
|
| 63 |
+
# batchSize
|
| 64 |
+
batch_idx = randperm(len)[1:batchSize]
|
| 65 |
+
batch_X = X[batch_idx, :]
|
| 66 |
+
prediction = evalTreeArray(tree, batch_X)
|
| 67 |
+
if prediction === nothing
|
| 68 |
+
return 1f9
|
| 69 |
+
end
|
| 70 |
+
size_adjustment = 1f0
|
| 71 |
+
batch_y = y[batch_idx]
|
| 72 |
+
if weighted
|
| 73 |
+
batch_w = weights[batch_idx]
|
| 74 |
+
mse = MSE(prediction, batch_y, batch_w)
|
| 75 |
+
size_adjustment = 1f0 * len / batchSize
|
| 76 |
+
else
|
| 77 |
+
mse = MSE(prediction, batch_y)
|
| 78 |
+
end
|
| 79 |
+
return size_adjustment * mse / baselineMSE + countNodes(tree)*parsimony
|
| 80 |
+
end
|
julia/{simulatedAnnealing.jl β Mutate.jl}
RENAMED
|
@@ -1,5 +1,4 @@
|
|
| 1 |
-
# Go through one
|
| 2 |
-
# exp(-delta/T) defines probability of accepting a change
|
| 3 |
function iterate(member::PopMember, T::Float32, curmaxsize::Integer, frequencyComplexity::Array{Float32, 1})::PopMember
|
| 4 |
prev = member.tree
|
| 5 |
tree = prev
|
|
@@ -122,4 +121,4 @@ function iterate(member::PopMember, T::Float32, curmaxsize::Integer, frequencyCo
|
|
| 122 |
end
|
| 123 |
end
|
| 124 |
return PopMember(tree, afterLoss)
|
| 125 |
-
end
|
|
|
|
| 1 |
+
# Go through one mutation cycle
|
|
|
|
| 2 |
function iterate(member::PopMember, T::Float32, curmaxsize::Integer, frequencyComplexity::Array{Float32, 1})::PopMember
|
| 3 |
prev = member.tree
|
| 4 |
tree = prev
|
|
|
|
| 121 |
end
|
| 122 |
end
|
| 123 |
return PopMember(tree, afterLoss)
|
| 124 |
+
end
|
julia/{randomMutations.jl β MutationFunctions.jl}
RENAMED
|
File without changes
|
julia/{constants.jl β ProgramConstants.jl}
RENAMED
|
File without changes
|
julia/{regEvolCycle.jl β RegularizedEvolution.jl}
RENAMED
|
File without changes
|
julia/{simplification.jl β SimplifyEquation.jl}
RENAMED
|
File without changes
|
julia/{run.jl β SingleIteration.jl}
RENAMED
|
File without changes
|
julia/{utils.jl β Utils.jl}
RENAMED
|
@@ -29,4 +29,4 @@ function testConfiguration()
|
|
| 29 |
@printf("\n\nYour configuration is invalid - one of your operators is not well-defined over the real line.\n\n\n")
|
| 30 |
throw(error)
|
| 31 |
end
|
| 32 |
-
end
|
|
|
|
| 29 |
@printf("\n\nYour configuration is invalid - one of your operators is not well-defined over the real line.\n\n\n")
|
| 30 |
throw(error)
|
| 31 |
end
|
| 32 |
+
end
|
julia/halloffame.jl
CHANGED
|
@@ -5,4 +5,4 @@ mutable struct HallOfFame
|
|
| 5 |
|
| 6 |
# Arranged by complexity - store one at each.
|
| 7 |
HallOfFame() = new([PopMember(Node(1f0), 1f9) for i=1:actualMaxsize], [false for i=1:actualMaxsize])
|
| 8 |
-
end
|
|
|
|
| 5 |
|
| 6 |
# Arranged by complexity - store one at each.
|
| 7 |
HallOfFame() = new([PopMember(Node(1f0), 1f9) for i=1:actualMaxsize], [false for i=1:actualMaxsize])
|
| 8 |
+
end
|
julia/sr.jl
CHANGED
|
@@ -2,48 +2,21 @@ import Optim
|
|
| 2 |
import Printf: @printf
|
| 3 |
import Random: shuffle!, randperm
|
| 4 |
|
| 5 |
-
|
| 6 |
-
include("
|
| 7 |
-
|
| 8 |
-
include("
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
const baselineMSE = MSE(y, convert(Array{Float32, 1}, ones(len) .* avgy), weights)
|
| 13 |
-
else
|
| 14 |
-
const avgy = sum(y)/len
|
| 15 |
-
const baselineMSE = MSE(y, convert(Array{Float32, 1}, ones(len) .* avgy))
|
| 16 |
-
end
|
| 17 |
-
|
| 18 |
-
include("utils.jl")
|
| 19 |
-
|
| 20 |
-
include("Node.jl")
|
| 21 |
-
|
| 22 |
-
include("eval.jl")
|
| 23 |
-
|
| 24 |
-
include("randomMutations.jl")
|
| 25 |
-
|
| 26 |
-
include("simplification.jl")
|
| 27 |
-
|
| 28 |
include("PopMember.jl")
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
include("
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
include("complexityChecks.jl")
|
| 35 |
-
|
| 36 |
-
include("simulatedAnnealing.jl")
|
| 37 |
-
|
| 38 |
include("Population.jl")
|
| 39 |
-
|
| 40 |
-
include("
|
| 41 |
-
|
| 42 |
-
include("run.jl")
|
| 43 |
-
|
| 44 |
-
include("optimization.jl")
|
| 45 |
-
|
| 46 |
-
|
| 47 |
|
| 48 |
function fullRun(niterations::Integer;
|
| 49 |
npop::Integer=300,
|
|
|
|
| 2 |
import Printf: @printf
|
| 3 |
import Random: shuffle!, randperm
|
| 4 |
|
| 5 |
+
include("Equation.jl")
|
| 6 |
+
include("ProgramConstants.jl")
|
| 7 |
+
include("LossFunctions.jl")
|
| 8 |
+
include("Utils.jl")
|
| 9 |
+
include("EvaluateEquation.jl")
|
| 10 |
+
include("MutationFunctions.jl")
|
| 11 |
+
include("SimplifyEquation.jl")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
include("PopMember.jl")
|
| 13 |
+
include("HallOfFame.jl")
|
| 14 |
+
include("CheckConstraints.jl")
|
| 15 |
+
include("Mutate.jl")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
include("Population.jl")
|
| 17 |
+
include("RegularizedEvolution.jl")
|
| 18 |
+
include("SingleIteration.jl")
|
| 19 |
+
include("ConstantOptimization.jl")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
|
| 21 |
function fullRun(niterations::Integer;
|
| 22 |
npop::Integer=300,
|