Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Model run error in spine version 13 #1159

Open
Seven11037 opened this issue Jan 23, 2025 · 5 comments
Open

Model run error in spine version 13 #1159

Seven11037 opened this issue Jan 23, 2025 · 5 comments

Comments

@Seven11037
Copy link

Seven11037 commented Jan 23, 2025

input(v2b).json

Dear Sir/Madam,

The below is the error I am getting when running a spine model in the newest spine version. When I run the model in spine version 11, the model runs with no error. The reported error in the upgraded spine version can be seen below:

ERROR: LoadError: KeyError: key (unit = Heat Pump, node = Space Heating, direction = from_node, stochastic_scenario = Forecast 1, t = 2000-01-01T00:00~(1 hour)~>2000-01-01T01:00) not found
Stacktrace:
[1] (::SpineOpt.var"#1024#1025"{JuMP.Model, Symbol, @NamedTuple{unit::SpineInterface.Object, node::SpineInterface.Object, direction::SpineInterface.Object, stochastic_scenario::SpineInterface.Object, t::SpineInterface.TimeSlice}})()
@ SpineOpt C:\Users\admin.julia\packages\SpineOpt\tissq\src\variables\variable_common.jl:182
[2] get(default::SpineOpt.var"#1024#1025"{JuMP.Model, Symbol, @NamedTuple{unit::SpineInterface.Object, node::SpineInterface.Object, direction::SpineInterface.Object, stochastic_scenario::SpineInterface.Object, t::SpineInterface.TimeSlice}}, h::Dict{@NamedTuple{unit::SpineInterface.Object, node::SpineInterface.Object, direction::SpineInterface.Object, stochastic_scenario::SpineInterface.Object, t::SpineInterface.TimeSlice}, Union{JuMP.GenericAffExpr{T, JuMP.VariableRef} where T<:Union{Number, SpineInterface.Call}, JuMP.VariableRef}}, key::@NamedTuple{unit::SpineInterface.Object, node::SpineInterface.Object, direction::SpineInterface.Object, stochastic_scenario::SpineInterface.Object, t::SpineInterface.TimeSlice})
@ Base .\dict.jl:526
[3] _get_var_with_replacement(m::JuMP.Model, var_name::Symbol, ind::@NamedTuple{unit::SpineInterface.Object, node::SpineInterface.Object, direction::SpineInterface.Object, stochastic_scenario::SpineInterface.Object, t::SpineInterface.TimeSlice})
@ SpineOpt C:\Users\admin.julia\packages\SpineOpt\tissq\src\variables\variable_common.jl:175
[4] (::SpineOpt.var"#1022#1023"{JuMP.Model})(::Pair{Symbol, Tuple{NamedTuple, Int64}})
@ SpineOpt .\none:0
[5] MappingRF
@ .\reduce.jl:100 [inlined]
[6] _foldl_impl(op::Base.MappingRF{SpineOpt.var"#1022#1023"{JuMP.Model}, Base.BottomRF{typeof(Base.add_sum)}}, init::Base._InitialValue, itr::Dict{Symbol, Tuple{NamedTuple, Int64}})
@ Base .\reduce.jl:58
[7] foldl_impl
@ .\reduce.jl:48 [inlined]
[8] mapfoldl_impl
@ .\reduce.jl:44 [inlined]
[9] mapfoldl
@ .\reduce.jl:175 [inlined]
[10] mapreduce
@ .\reduce.jl:307 [inlined]
[11] sum
@ .\reduce.jl:532 [inlined]
[12] sum(a::Base.Generator{Dict{Symbol, Tuple{NamedTuple, Int64}}, SpineOpt.var"#1022#1023"{JuMP.Model}})
@ Base .\reduce.jl:561
[13] _expand_replacement_expressions!(m::JuMP.Model)
@ SpineOpt C:\Users\admin.julia\packages\SpineOpt\tissq\src\variables\variable_common.jl:166
[14] _add_variables!(m::JuMP.Model; log_level::Int64)
@ SpineOpt C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt_basic.jl:126
[15] _add_variables!
@ C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt_basic.jl:88 [inlined]
[16] macro expansion
@ .\timing.jl:581 [inlined]
[17] macro expansion
@ C:\Users\admin.julia\packages\SpineOpt\tissq\src\util\misc.jl:51 [inlined]
[18] build_model!(m::JuMP.Model; log_level::Int64)
@ SpineOpt C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt_basic.jl:75
[19] build_model!
@ C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt_basic.jl:66 [inlined]
[20] do_run_spineopt!(m::JuMP.Model, url_out::String, ::Val{:basic_algorithm}; log_level::Int64, optimize::Bool, update_names::Bool, alternative::String, write_as_roll::Int64, resume_file_path::Nothing)
@ SpineOpt C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt_basic.jl:31
[21] #invokelatest#2
@ .\essentials.jl:1057 [inlined]
[22] invokelatest
@ .\essentials.jl:1052 [inlined]
[23] run_spineopt!(m::JuMP.Model, url_out::String; log_level::Int64, optimize::Bool, update_names::Bool, alternative::String, write_as_roll::Int64, resume_file_path::Nothing)
@ SpineOpt C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt.jl:314
[24] run_spineopt!
@ C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt.jl:303 [inlined]
[25] _run_spineopt(f::SpineOpt.var"#76#77", url_in::String, url_out::String; upgrade::Bool, filters::Dict{String, String}, templates::Tuple{}, mip_solver::Nothing, lp_solver::Nothing, use_direct_model::Bool, log_level::Int64, alternative::String, kwargs::@kwargs{optimize::Bool, update_names::Bool, write_as_roll::Int64, resume_file_path::Nothing})
@ SpineOpt C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt.jl:142
[26] #79
@ C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt.jl:99 [inlined]
[27] _log_to_file
@ C:\Users\admin.julia\packages\SpineOpt\tissq\src\util\misc.jl:225 [inlined]
[28] #run_spineopt#78
@ C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt.jl:98 [inlined]
[29] run_spineopt(f::Function, url_in::String, url_out::String)
@ SpineOpt C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt.jl:80
[30] #run_spineopt#75
@ C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt.jl:64 [inlined]
[31] run_spineopt(url_in::String, url_out::String)
@ SpineOpt C:\Users\admin.julia\packages\SpineOpt\tissq\src\run_spineopt.jl:63
[32] top-level scope
@ C:\Users\admin.spinetoolbox\work\run_spineopt__4d128d7773dd4b4a9cec8edcbb50eb5d__toolbox\run_spineopt.jl:3
[33] include(fname::String)
@ Main .\sysimg.jl:38
[34] top-level scope
@ none:1
in expression starting at C:\Users\admin.spinetoolbox\work\run_spineopt__4d128d7773dd4b4a9cec8edcbb50eb5d__toolbox\run_spineopt.jl:3

Please help me solve this issue as soon as possible

Image

@datejada
Copy link
Member

@Seven11037 would you mind sharing you DB? You can export it to a JSON file from SpineToolbox and add it to this issue. That will help to debug the error. Thanks!

@Seven11037
Copy link
Author

@Seven11037 would you mind sharing you DB? You can export it to a JSON file from SpineToolbox and add it to this issue. That will help to debug the error. Thanks!

Any updates?

@tarskul
Copy link
Collaborator

tarskul commented Feb 24, 2025

I've taken a quick look at your json file in the db editor. It is quite a big system which makes it a bit confusing. It is highly recommended to build your system bit by bit and make sure that it works every step along the way. That makes it a lot easier to debug. Did you do it like this? If so, could you also share your last working version as well?

Regardless, from a first glance I noticed that the stochastic structure is a bit weird. There seems to be a mix of the deterministic structure and the branching structure. Also, despite using multiple scenarios, I don't see a map value in the parameters that uses those scenarios. Maybe you should check out the tutorial on the stochastic structure?

@Seven11037
Copy link
Author

I've taken a quick look at your json file in the db editor. It is quite a big system which makes it a bit confusing. It is highly recommended to build your system bit by bit and make sure that it works every step along the way. That makes it a lot easier to debug. Did you do it like this? If so, could you also share your last working version as well?

V2Binput.json
The above is the original model but I didn't create it. Someone else did.

Thanks and regards

@tarskul
Copy link
Collaborator

tarskul commented Mar 4, 2025

That one fails too (and has the same weird leftover "deterministic" stochastic structure). Did the original model run for that other person? (Maybe it is an older model that is not up to date with the latest changes? In that case we may want to check our migration scripts.)

I'm afraid the best option is to build it step by step from scratch because it takes too much time to debug such a larger system when you don't have a latest working version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants