ProjectTorreyPines / FUSE.jl

FUsion Synthesis Engine
https://fuse.help/
Apache License 2.0
18 stars 0 forks source link

New error in workflow_multiobjective_optimization #362

Closed daveweisberg closed 1 year ago

daveweisberg commented 1 year ago

This error is preventing me from running any multiobjective optimizations! My guess is that it may be a result of developments made at last week's hackathon, but I'm not sure.

Running the workflow_multiobjective_optimization function in optimization_workflow.jl yields the following MethodError:

ini, act = FUSE.case_parameters(:FPP, version=:v1_demount, init_from=:scalars);
OFL = deepcopy(FUSE.ObjectiveFunctionsLibrary)
CFL = deepcopy(FUSE.ConstraintFunctionsLibrary)
objective_functions = [OFL[:min_βn], OFL[:min_capital_cost], OFL[:max_log10_flattop]]
constraint_functions = [CFL[:min_required_power_electric_net]]
# option to resume an optimization where it was left off
if false
    continue_state = state
else
    continue_state = missing
end

# define optimization parameters
# For real optimization studies the population size (N) and number of iterations should be bigger
# eg. N=100, iterations=25
optimization_parameters = Dict(
    :N => 2, # even number
    :iterations => 100,
    :continue_state => continue_state,
    :save_folder => "tmp")

# run optimization
state = FUSE.workflow_multiobjective_optimization(ini, act, FUSE.ActorWholeFacility, objective_functions, constraint_functions; optimization_parameters...);
MethodError: no method matching workflow_multiobjective_optimization(::FUSE.ParametersInits{Float64}, ::FUSE.ParametersActors{Float64}, ::Type{FUSE.ActorWholeFacility}, ::Vector{FUSE.ObjectiveFunction}, ::Vector{FUSE.ConstraintFunction}; N=2, continue_state=missing, iterations=100, save_folder="tmp")
Closest candidates are:
  workflow_multiobjective_optimization(::FUSE.ParametersAllInits, ::FUSE.ParametersAllActors, ::Union{DataType, Function}, ::Vector{<:FUSE.ObjectiveFunction}, ::Vector{<:FUSE.ConstraintFunction}; N, iterations, continue_state, save_folder) at [/fusion/ga/projects/ird/ptp/weisbergd/julia/dev/FUSE/src/workflows/optimization_workflow.jl:17](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/fusion/ga/projects/ird/ptp/weisbergd/julia/dev/FUSE/src/workflows/optimization_workflow.jl:17)
  workflow_multiobjective_optimization(::FUSE.ParametersAllInits, ::FUSE.ParametersAllActors, ::Union{DataType, Function}, ::Vector{<:FUSE.ObjectiveFunction}) at [/fusion/ga/projects/ird/ptp/weisbergd/julia/dev/FUSE/src/workflows/optimization_workflow.jl:17](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/fusion/ga/projects/ird/ptp/weisbergd/julia/dev/FUSE/src/workflows/optimization_workflow.jl:17) got unsupported keyword arguments "N", "continue_state", "iterations", "save_folder"
  workflow_multiobjective_optimization(::FUSE.ParametersAllInits, ::FUSE.ParametersAllActors, ::Union{DataType, Function}) at [/fusion/ga/projects/ird/ptp/weisbergd/julia/dev/FUSE/src/workflows/optimization_workflow.jl:17](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/fusion/ga/projects/ird/ptp/weisbergd/julia/dev/FUSE/src/workflows/optimization_workflow.jl:17) got unsupported keyword arguments "N", "continue_state", "iterations", "save_folder"

Stacktrace:
 [1] top-level scope
   @ In[27]:28

If I edit the workflow_multiobjective_optimization function so that actor_or_workflow does not have a pre-assigned type, then this error no longer occurs. However, a new error in the Metaheuristics package appears:

MethodError: no method matching Metaheuristics.Problem(::FUSE.var"#763#766"{String, FUSE.ParametersInits{Float64}, FUSE.ParametersActors{Float64}, UnionAll, Vector{FUSE.ObjectiveFunction}, Vector{FUSE.ConstraintFunction}, ProgressMeter.Progress}, ::LinearAlgebra.Adjoint{Any, Matrix{Any}}; parallel_evaluation=true)
Closest candidates are:
  Metaheuristics.Problem(::Function, ::S, ::Int64, ::Bool) where S at [~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:9](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:9) got unsupported keyword argument "parallel_evaluation"
  Metaheuristics.Problem(::Function, ::Tuple{AbstractVector, AbstractVector}; kargs...) at [~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:50](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:50)
  Metaheuristics.Problem(::Function, ::Matrix{Bool}; kargs...) at [~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:46](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:46)
  ...

Stacktrace:
 [1] _before_optimization!(f::Function, search_space::LinearAlgebra.Adjoint{Any, Matrix{Any}}, method::Metaheuristics.Algorithm{Metaheuristics.SPEA2}, logger::Metaheuristics.var"#153#155")
   @ Metaheuristics [~/.julia/packages/Metaheuristics/wLOSa/src/optimize/before.jl:7](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/optimize/before.jl:7)
 [2] optimize(f::Function, search_space::LinearAlgebra.Adjoint{Any, Matrix{Any}}, method::Metaheuristics.Algorithm{Metaheuristics.SPEA2}; logger::Function)
   @ Metaheuristics [~/.julia/packages/Metaheuristics/wLOSa/src/optimize/optimize.jl:49](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/optimize/optimize.jl:49)
 [3] optimize(f::Function, search_space::LinearAlgebra.Adjoint{Any, Matrix{Any}}, method::Metaheuristics.Algorithm{Metaheuristics.SPEA2})
   @ Metaheuristics [~/.julia/packages/Metaheuristics/wLOSa/src/optimize/optimize.jl:42](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/optimize/optimize.jl:42)
 [4] macro expansion
   @ [./timing.jl:262](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/timing.jl:262) [inlined]
 [5] workflow_multiobjective_optimization(ini::FUSE.ParametersInits{Float64}, act::FUSE.ParametersActors{Float64}, actor_or_workflow::Type, objectives_functions::Vector{FUSE.ObjectiveFunction}, constraints_functions::Vector{FUSE.ConstraintFunction}; N::Int64, iterations::Int64, continue_state::Missing, save_folder::String)
   @ FUSE [/fusion/ga/projects/ird/ptp/weisbergd/julia/dev/FUSE/src/workflows/optimization_workflow.jl:105](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/fusion/ga/projects/ird/ptp/weisbergd/julia/dev/FUSE/src/workflows/optimization_workflow.jl:105)
 [6] top-level scope
   @ In[26]:28
orso82 commented 1 year ago

For the time being can you try this:

@everywhere function my_workflow(ini::FUSE.ParametersInits, act::FUSE.ParametersActors)
    dd = FUSE.init(ini, act)
    FUSE.ActorWholeFacility(dd, act)
    return dd
end

state = FUSE.workflow_multiobjective_optimization(ini, act, my_workflow, objective_functions, constraint_functions; optimization_parameters...);
daveweisberg commented 1 year ago

Thanks for the fast reply @orso82 ! Unfortunately, this just returns the same Heuristics error as above:

MethodError: no method matching Metaheuristics.Problem(::FUSE.var"#672#675"{String, FUSE.ParametersInits{Float64}, FUSE.ParametersActors{Float64}, typeof(my_workflow), Vector{FUSE.ObjectiveFunction}, Vector{FUSE.ConstraintFunction}, ProgressMeter.Progress}, ::LinearAlgebra.Adjoint{Any, Matrix{Any}}; parallel_evaluation=true)
Closest candidates are:
  Metaheuristics.Problem(::Function, ::S, ::Int64, ::Bool) where S at [~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:9](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:9) got unsupported keyword argument "parallel_evaluation"
  Metaheuristics.Problem(::Function, ::Tuple{AbstractVector, AbstractVector}; kargs...) at [~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:50](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:50)
  Metaheuristics.Problem(::Function, ::Matrix{Bool}; kargs...) at [~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:46](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/core/structures.jl:46)
  ...

Stacktrace:
 [1] _before_optimization!(f::Function, search_space::LinearAlgebra.Adjoint{Any, Matrix{Any}}, method::Metaheuristics.Algorithm{Metaheuristics.SPEA2}, logger::Metaheuristics.var"#153#155")
   @ Metaheuristics [~/.julia/packages/Metaheuristics/wLOSa/src/optimize/before.jl:7](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/optimize/before.jl:7)
 [2] optimize(f::Function, search_space::LinearAlgebra.Adjoint{Any, Matrix{Any}}, method::Metaheuristics.Algorithm{Metaheuristics.SPEA2}; logger::Function)
   @ Metaheuristics [~/.julia/packages/Metaheuristics/wLOSa/src/optimize/optimize.jl:49](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/optimize/optimize.jl:49)
 [3] optimize(f::Function, search_space::LinearAlgebra.Adjoint{Any, Matrix{Any}}, method::Metaheuristics.Algorithm{Metaheuristics.SPEA2})
   @ Metaheuristics [~/.julia/packages/Metaheuristics/wLOSa/src/optimize/optimize.jl:42](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/~/.julia/packages/Metaheuristics/wLOSa/src/optimize/optimize.jl:42)
 [4] macro expansion
   @ [./timing.jl:262](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/home/weisbergd/julia_dev/FUSE/playground/weisberg_FPP_opt/timing.jl:262) [inlined]
 [5] workflow_multiobjective_optimization(ini::FUSE.ParametersInits{Float64}, act::FUSE.ParametersActors{Float64}, actor_or_workflow::typeof(my_workflow), objectives_functions::Vector{FUSE.ObjectiveFunction}, constraints_functions::Vector{FUSE.ConstraintFunction}; N::Int64, iterations::Int64, continue_state::Missing, save_folder::String)
   @ FUSE [/fusion/ga/projects/ird/ptp/weisbergd/julia/dev/FUSE/src/workflows/optimization_workflow.jl:105](https://vscode-remote+ssh-002dremote-002bomegae.vscode-resource.vscode-cdn.net/fusion/ga/projects/ird/ptp/weisbergd/julia/dev/FUSE/src/workflows/optimization_workflow.jl:105)
 [6] top-level scope
   @ In[10]:27
daveweisberg commented 1 year ago

@orso82 Update: the full run-through actually works with this fix, thanks! Not sure why my simplified test script failed with that Heuristic error, but probably due to the some issue with the worker nodes.

I should be good for now!