Skip to content

Commit

Permalink
add command line args for different chemical species numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
ltatka committed Jun 26, 2024
1 parent 2132b55 commit 007af9f
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 4 deletions.
27 changes: 27 additions & 0 deletions run_evolution.jl
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,23 @@ Pkg.activate(".")
using ReactionNetworkEvolution
using ArgParse



function parse_initial_concentrations(initial_concentrations::String)
# Strip whitespace
initial_concentrations = filter(x -> !isspace(x), initial_concentrations)
# Strip brackets
initial_concentrations = initial_concentrations[2:end-1]
# Separate by commas
initial_concentrations = split(initial_concentrations, ",")
new_array = Vector{Float64}()
for num in initial_concentrations
push!(new_array, parse(Float64, num))
end
return new_array
end


s = ArgParseSettings()

@add_arg_table s begin
Expand All @@ -12,6 +29,12 @@ s = ArgParseSettings()
"--ntrials"
arg_type = Int
default = -1
"--nspecies"
arg_type = Int
default = 3
"--initial_concentrations"
arg_type = String
default = "[1., 5., 9.]"
"--population_size"
arg_type = Int
default = -1
Expand All @@ -31,8 +54,12 @@ end

parsed_args = parse_args(ARGS, s)

parsed_args["initial_concentrations"] = parse_initial_concentrations(parsed_args["initial_concentrations"])

ReactionNetworkEvolution.run_evolution(ngenerations=parsed_args["ngenerations"],
ntrials=parsed_args["ntrials"],
nspecies=parsed_args["nspecies"],
initial_concentrations = parsed_args["initial_concentrations"],
population_size=parsed_args["population_size"],
pathtosettings=parsed_args["pathtosettings"],
outputpath=parsed_args["outputpath"],
Expand Down
5 changes: 3 additions & 2 deletions settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"percent_rateconstant_change": 20,
"p_new_rateconstant": 0.15,
"population_size": 100,
"ngenerations": 800,
"ngenerations": 800,
"nspecies": 3,
"nreactions": 5,
"max_offspring_portion": 0.1,
"writeout_threshold": 0.05,
Expand All @@ -30,5 +31,5 @@
"same_fitness_crossover": false,
"same_fitness_percent_range": 5,
"process_output_oscillators": false,
"objective_data_path": "",
"objective_data_path": "DEFAULT",
"note": ""}
4 changes: 3 additions & 1 deletion src/ReactionNetworkEvolution.jl
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ end
function run_evolution(;
ngenerations::Int64=-1,
ntrials::Int64=-1,
nspecies::Int64=3,
initial_concentrations::Vector{Float64}=[1., 5., 9.],
population_size::Int64=-1,
pathtosettings::String="",
outputpath::String="",
Expand Down Expand Up @@ -109,7 +111,7 @@ function run_evolution(;
pathtosettings = "DEFAULT"
end

settings, objectivefunction = read_usersettings(pathtosettings, ngenerations=ngenerations, population_size=population_size, seed=seed, note=note)
settings, objectivefunction = read_usersettings(pathtosettings, ngenerations=ngenerations, nspecies=nspecies, initial_concentrations=initial_concentrations, population_size=population_size, seed=seed, note=note)

println("Beginning $ntrials trials with $(settings.ngenerations) generations each")

Expand Down
28 changes: 27 additions & 1 deletion src/settings.jl
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ struct Settings
p_new_rateconstant::Float64 # Probability of picking new rate constant during mutation vs slight change
population_size::Int
ngenerations::Int
nspecies::Int
nreactions::Int
max_offspring_portion::Float64 # The maximum portion of offspring a single species can have
writeout_threshold::Float64 # Networks with this fitness or better will be saved
Expand Down Expand Up @@ -111,6 +112,7 @@ function read_usersettings(settings_dict::Dict{String, Any})
"p_new_rateconstant" => 0.15,
"population_size" => 100,
"ngenerations" => 800,
"nspecies" => 3,
"nreactions" => 5,
"max_offspring_portion" => 0.1,
"writeout_threshold" => 0.05,
Expand Down Expand Up @@ -161,6 +163,7 @@ function read_usersettings(settings_dict::Dict{String, Any})
settings["p_new_rateconstant"],
settings["population_size"],
settings["ngenerations"],
settings["nspecies"],
settings["nreactions"],
settings["max_offspring_portion"],
settings["writeout_threshold"],
Expand Down Expand Up @@ -195,7 +198,7 @@ function read_usersettings(settings_dict::Dict{String, Any})
end


function read_usersettings(path::String; ngenerations::Int64=-1, population_size::Int64=-1, seed::Int64=-1, note::String="")
function read_usersettings(path::String; ngenerations::Int64=-1, nspecies::Int64=3, initial_concentrations::Vector{Float64}=[1., 5., 9.], population_size::Int64=-1, seed::Int64=-1, note::String="")
settings = Dict(
"portion_elite" => 0.1,
"reaction_probabilities" => [.1, .4, .4, .1],
Expand All @@ -205,6 +208,7 @@ function read_usersettings(path::String; ngenerations::Int64=-1, population_size
"p_new_rateconstant" => 0.15,
"population_size" => 100,
"ngenerations" => 800,
"nspecies" => 3,
"nreactions" => 5,
"max_offspring_portion" => 0.1,
"writeout_threshold" => 0.05,
Expand Down Expand Up @@ -300,6 +304,19 @@ function read_usersettings(path::String; ngenerations::Int64=-1, population_size
# Set the random seed
Random.seed!(Int64(seed))

# Check if nspecies is supplied and update it if not default value
# Check if the number of species names match the number of species, if not, generate them
if nspecies != 3
settings["nspecies"] = 3
if length(settings["chemical_species_names"]) != nspecies
settings["chemical_species_names"] = generate_chemical_species_names(nspecies)
end
settings["initial_concentrations"] = initial_concentrations
if length(settings["initial_concentrations"]) != nspecies
error("number of initial conditions does not match number of chemical species")
end
end

# Check if the user has supplied a note
if note != ""
settings["note"] = note
Expand Down Expand Up @@ -339,6 +356,7 @@ function read_usersettings(path::String; ngenerations::Int64=-1, population_size
settings["p_new_rateconstant"],
population_size,
ngenerations,
settings["nspecies"],
settings["nreactions"],
settings["max_offspring_portion"],
settings["writeout_threshold"],
Expand Down Expand Up @@ -379,3 +397,11 @@ function writeout_settings(settings::Settings, filename::String)
write(f, stringsettings)
end
end

function generate_chemical_species_names(nspecies::Int64)
chemical_species_names = Vector{String}()
for i in 1:nspecies
push!(chemical_species_names, "S$i")
end
return chemical_species_names
end

0 comments on commit 007af9f

Please sign in to comment.