Skip to content

Commit c2f4747

Browse files
Merge pull request #978 from ProjectTorreyPines/feat/study_database
Introduce In‑Memory Study Database Type
2 parents bba005d + 1e8c773 commit c2f4747

File tree

9 files changed

+1085
-452
lines changed

9 files changed

+1085
-452
lines changed

src/FUSE.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ include("studies.jl")
178178
include(joinpath("studies", "database_generator.jl"))
179179
include(joinpath("studies", "multi_objective_optimization.jl"))
180180
include(joinpath("studies", "TGLF_database.jl"))
181+
include(joinpath("studies", "study_database.jl"))
181182
include(joinpath("studies", "experiment_postdictive.jl"))
182183

183184
#= ========= =#

src/optimization.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ function optimization_engine(
206206
df[!, :elapsed_time] = fill(time()-start_time, nrow(df))
207207

208208
# save simulation data
209-
save_database("tmp_h5_output", parent_group, (save_dd ? dd : nothing), ini, act, tmp_log_io;
209+
save_study_database("tmp_h5_output", parent_group, (save_dd ? dd : nothing), ini, act, tmp_log_io;
210210
timer=true, freeze=false, overwrite_groups=true)
211211

212212
# Write into temporary csv files, in case the whole Julia session is crashed
@@ -250,7 +250,7 @@ function optimization_engine(
250250
df[!, :elapsed_time] = fill(time()-start_time, nrow(df))
251251

252252
# save empty dd and error to directory
253-
save_database("tmp_h5_output", parent_group, nothing, ini, act, tmp_log_io;
253+
save_study_database("tmp_h5_output", parent_group, nothing, ini, act, tmp_log_io;
254254
error_info=e, timer=true, freeze=false, overwrite_groups=true, kw...)
255255

256256
# Write into temporary csv files, in case the whole Julia session is crashed

src/studies/database_generator.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ function run_case(study::AbstractStudy, item::Int, ::Val{:hdf5}; kw...)
227227
df[!, :worker_id] = fill(myid, nrow(df))
228228
df[!, :elapsed_time] = fill(time() - start_time, nrow(df))
229229

230-
save_database("tmp_h5_output", parent_group, (sty.save_dd ? dd : IMAS.dd()), ini, act, tmp_log_io; timer=true, freeze=false, overwrite_groups=true, kw...)
230+
save_study_database("tmp_h5_output", parent_group, (sty.save_dd ? dd : IMAS.dd()), ini, act, tmp_log_io; timer=true, freeze=false, overwrite_groups=true, kw...)
231231

232232
# Write into temporary csv files, in case the whole Julia session is crashed
233233
tmp_csv_folder = "tmp_csv_output"
@@ -253,7 +253,7 @@ function run_case(study::AbstractStudy, item::Int, ::Val{:hdf5}; kw...)
253253
df[!, :elapsed_time] = fill(time() - start_time, nrow(df))
254254

255255
# save empty dd and error to directory
256-
save_database("tmp_h5_output", parent_group, nothing, ini, act, tmp_log_io; error_info=e, timer=true, freeze=false, overwrite_groups=true, kw...)
256+
save_study_database("tmp_h5_output", parent_group, nothing, ini, act, tmp_log_io; error_info=e, timer=true, freeze=false, overwrite_groups=true, kw...)
257257

258258
# Write into temporary csv files, in case the whole Julia session is crashed
259259
tmp_csv_folder = "tmp_csv_output"

src/studies/multi_objective_optimization.jl

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ mutable struct StudyMultiObjectiveOptimizer{T<:Real} <: AbstractStudy
3939
dataframe::Union{DataFrame,Missing}
4040
datafame_filtered::Union{DataFrame,Missing}
4141
generation::Int
42+
workflow::Union{Function,Missing}
4243
end
4344

4445
function StudyMultiObjectiveOptimizer(
@@ -50,8 +51,7 @@ function StudyMultiObjectiveOptimizer(
5051
kw...
5152
)
5253
sty = OverrideParameters(sty; kw...)
53-
study = StudyMultiObjectiveOptimizer(sty, ini, act, constraint_functions, objective_functions, nothing, missing, missing, 0)
54-
54+
study = StudyMultiObjectiveOptimizer(sty, ini, act, constraint_functions, objective_functions, nothing, missing, missing, 0, missing)
5555
check_and_create_file_save_mode(sty)
5656

5757
parallel_environment(sty.server, sty.n_workers)
@@ -102,7 +102,6 @@ function _run(study::StudyMultiObjectiveOptimizer)
102102
@info "released workers"
103103

104104
else
105-
setup(study)
106105
optimization_parameters = Dict(
107106
:N => sty.population_size,
108107
:iterations => sty.number_of_generations,
@@ -111,8 +110,12 @@ function _run(study::StudyMultiObjectiveOptimizer)
111110

112111
@assert !isempty(sty.save_folder) "Specify where you would like to store your optimization results in sty.save_folder"
113112

113+
if ismissing(study.workflow)
114+
study.workflow = optimization_workflow_default
115+
end
116+
114117
study.state = workflow_multiobjective_optimization(
115-
study.ini, study.act, ActorWholeFacility, study.objective_functions, study.constraint_functions;
118+
study.ini, study.act, study.workflow, study.objective_functions, study.constraint_functions;
116119
optimization_parameters..., generation_offset=study.generation, sty.database_policy,
117120
sty.number_of_generations, sty.population_size)
118121

@@ -233,4 +236,15 @@ function filter_outputs(outputs::DataFrame, constraint_symbols::Vector{Symbol})
233236
constraint_values = [outputs[i, key] for key in constraint_symbols, i in 1:n]
234237
all_constraint_idxs = findall(i -> all(x -> x == 0.0, constraint_values[:, i]), 1:n)
235238
return outputs[all_constraint_idxs, :]
239+
end
240+
241+
"""
242+
optimization_workflow_default(ini::ParametersAllInits, act::ParametersAllActors)
243+
Default optimization workflow when study.workflow isn't set, initializes and runs the whole facility actor
244+
"""
245+
function optimization_workflow_default(ini::ParametersAllInits, act::ParametersAllActors)
246+
dd = FUSE.IMAS.dd()
247+
FUSE.init(dd, ini, act)
248+
FUSE.ActorWholeFacility(dd, act)
249+
return dd
236250
end

0 commit comments

Comments
 (0)