Woohoo! Working experiment, it's actually pretty good at selecting meals

This commit is contained in:
Jacob Windle 2019-08-19 06:15:29 -04:00
parent 1e33fcb9cd
commit 3c8fad2e50

View File

@ -5,7 +5,7 @@ POPSIZE = 5
mu = 1 mu = 1
lambda = 4 lambda = 4
GENLIMIT = 20 GENLIMIT = 20
TARGETCALORIES = 1000 TARGETCALORIES = 2000
data = ExcelReaders.readxlsheet("./data/nutrional_information_5917.xlsx", "Sheet2", skipstartrows=1) data = ExcelReaders.readxlsheet("./data/nutrional_information_5917.xlsx", "Sheet2", skipstartrows=1)
header = ExcelReaders.readxlsheet("./data/nutrional_information_5917.xlsx", "Sheet2", nrows=1) header = ExcelReaders.readxlsheet("./data/nutrional_information_5917.xlsx", "Sheet2", nrows=1)
@ -24,8 +24,34 @@ for i = 1:length(header)
df[header[i]] = data[2:end, i] df[header[i]] = data[2:end, i]
end end
"""
Step through the parent, and randomly delete and update rows.S
"""
function mutate(parent) function mutate(parent)
randomCandidate(4)
# Copy the parent so we can do some work.
child = deepcopy(parent)
rowsDeleted = 0
toDelete = []
for i in 1:size(parent, 1)
if rand(Float64) > 0.5 # NOTE: make this tunable
push!(toDelete, i)
rowsDeleted += 1
end
# If we get tails, delete the row and push a new one to it.
end
println("TO DELETE $toDelete")
# Delete all rows we don't want at once.
DataFrames.deleterows!(child, toDelete)
# Add new random rows from the ones we deleted
for i in 1:rowsDeleted
push!(child, df[randRow(), :])
end
child
end end
""" """
@ -63,7 +89,7 @@ function main()
fit = nothing fit = nothing
parents = nothing parents = nothing
while generationNum != GENLIMIT || (best != nothing && fitness(best) != 0) while generationNum <= GENLIMIT
println("Generation $generationNum") println("Generation $generationNum")
# Assess the fitness of parents # Assess the fitness of parents
@ -85,7 +111,6 @@ function main()
print("Parents $parents") print("Parents $parents")
for p in parents for p in parents
for i = 1:(lambda/mu) for i = 1:(lambda/mu)
println("breed")
push!(pop, mutate(p)) push!(pop, mutate(p))
end end
end end