-
Notifications
You must be signed in to change notification settings - Fork 1
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
Jd/implement state estimator #5
base: main
Are you sure you want to change the base?
Changes from 20 commits
427f209
11fb21a
9bef618
0010f2f
85bc349
550b635
0574f26
d84d886
ad23fc2
b13bd0b
ffb6750
cfe2879
4d85f78
6cef2d8
6912794
de68a83
1cf7afb
275af17
4cb605e
0d654ac
2b67507
18035e6
0075692
d441db7
823f960
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -19,7 +19,8 @@ function build_main_problem!( | |||||||||||||||||||||||||||||||||
container::MultiOptimizationContainer{SequentialAlgorithm}, | ||||||||||||||||||||||||||||||||||
template::MultiProblemTemplate, | ||||||||||||||||||||||||||||||||||
sys::PSY.System, | ||||||||||||||||||||||||||||||||||
) end | ||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
# The drawback of this approach is that it will loop over the results twice | ||||||||||||||||||||||||||||||||||
# once to write into the main container and a second time when writing into the | ||||||||||||||||||||||||||||||||||
|
@@ -28,35 +29,41 @@ function build_main_problem!( | |||||||||||||||||||||||||||||||||
function write_results_to_main_container(container::MultiOptimizationContainer) | ||||||||||||||||||||||||||||||||||
# TODO: This process needs to work in parallel almost right away | ||||||||||||||||||||||||||||||||||
# TODO: This doesn't handle the case where subproblems have an overlap in axis names. | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
for subproblem in values(container.subproblems) | ||||||||||||||||||||||||||||||||||
for (k, subproblem) in container.subproblems | ||||||||||||||||||||||||||||||||||
for field in CONTAINER_FIELDS | ||||||||||||||||||||||||||||||||||
subproblem_data_field = getproperty(subproblem, field) | ||||||||||||||||||||||||||||||||||
main_container_data_field = getproperty(container, field) | ||||||||||||||||||||||||||||||||||
for (key, src) in subproblem_data_field | ||||||||||||||||||||||||||||||||||
if src isa JuMP.Containers.SparseAxisArray | ||||||||||||||||||||||||||||||||||
# @warn "Skip SparseAxisArray" field key | ||||||||||||||||||||||||||||||||||
@debug "Skip SparseAxisArray" field key | ||||||||||||||||||||||||||||||||||
continue | ||||||||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||||||||
num_dims = ndims(src) | ||||||||||||||||||||||||||||||||||
num_dims > 2 && error("ndims = $(num_dims) is not supported yet") | ||||||||||||||||||||||||||||||||||
data = nothing | ||||||||||||||||||||||||||||||||||
try | ||||||||||||||||||||||||||||||||||
data = PSI.jump_value.(src) | ||||||||||||||||||||||||||||||||||
catch e | ||||||||||||||||||||||||||||||||||
if e isa UndefRefError | ||||||||||||||||||||||||||||||||||
#@warn "Skip UndefRefError for" field key | ||||||||||||||||||||||||||||||||||
continue | ||||||||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||||||||
rethrow() | ||||||||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||||||||
data = PSI.jump_value.(src) | ||||||||||||||||||||||||||||||||||
dst = main_container_data_field[key] | ||||||||||||||||||||||||||||||||||
if num_dims == 1 | ||||||||||||||||||||||||||||||||||
dst[1:length(axes(src)[1])] = data | ||||||||||||||||||||||||||||||||||
elseif num_dims == 2 | ||||||||||||||||||||||||||||||||||
columns = axes(src)[1] | ||||||||||||||||||||||||||||||||||
len = length(axes(src)[2]) | ||||||||||||||||||||||||||||||||||
#ychen fix horizontal passing ACbusinjection issue | ||||||||||||||||||||||||||||||||||
if field==:expressions | ||||||||||||||||||||||||||||||||||
field1= :parameters | ||||||||||||||||||||||||||||||||||
Comment on lines
+49
to
+51
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [JuliaFormatter] reported by reviewdog 🐶
Suggested change
|
||||||||||||||||||||||||||||||||||
subproblem_data_field1 = getproperty(subproblem, field1) | ||||||||||||||||||||||||||||||||||
src1=subproblem_data_field1[InfrastructureSystems.Optimization.ParameterKey{PowerSimulationsDecomposition.StateEstimationInjections, PSY.ACBus}("")] | ||||||||||||||||||||||||||||||||||
B=parse.(Int,axes(src1.parameter_array)[1]) | ||||||||||||||||||||||||||||||||||
A=axes(src)[1] | ||||||||||||||||||||||||||||||||||
C=filter(x -> !(x in B), A) | ||||||||||||||||||||||||||||||||||
columns= C | ||||||||||||||||||||||||||||||||||
Comment on lines
+53
to
+57
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [JuliaFormatter] reported by reviewdog 🐶
Suggested change
|
||||||||||||||||||||||||||||||||||
else | ||||||||||||||||||||||||||||||||||
columns = axes(src)[1] | ||||||||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||||||||
#ychen end | ||||||||||||||||||||||||||||||||||
len = length(axes(src)[2]) | ||||||||||||||||||||||||||||||||||
Comment on lines
+59
to
+62
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [JuliaFormatter] reported by reviewdog 🐶
Suggested change
|
||||||||||||||||||||||||||||||||||
dst[columns, 1:len] = PSI.jump_value.(src[:, :]) | ||||||||||||||||||||||||||||||||||
#try | ||||||||||||||||||||||||||||||||||
# println("======111 dst,k,",dst[203, :],",subproblem,",k) | ||||||||||||||||||||||||||||||||||
#catch e end | ||||||||||||||||||||||||||||||||||
elseif num_dims == 3 | ||||||||||||||||||||||||||||||||||
# TODO: untested | ||||||||||||||||||||||||||||||||||
axis1 = axes(src)[1] | ||||||||||||||||||||||||||||||||||
|
@@ -82,9 +89,13 @@ function _write_parameter_results_to_main_container( | |||||||||||||||||||||||||||||||||
src_mult_data = PSI.jump_value.(parameter_container.multiplier_array) | ||||||||||||||||||||||||||||||||||
dst_param_data = container.parameters[key].parameter_array | ||||||||||||||||||||||||||||||||||
dst_mult_data = container.parameters[key].multiplier_array | ||||||||||||||||||||||||||||||||||
#println("*****11,subproblem,",subproblem) | ||||||||||||||||||||||||||||||||||
#println("*****12,key,",key) | ||||||||||||||||||||||||||||||||||
#println("*****13,num_dims,",num_dims) | ||||||||||||||||||||||||||||||||||
if num_dims == 1 | ||||||||||||||||||||||||||||||||||
dst_param_data[1:length(axes(src_param_data)[1])] = src_param_data | ||||||||||||||||||||||||||||||||||
dst_mult_data[1:length(axes(src_mult_data)[1])] = src_mult_data | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
elseif num_dims == 2 | ||||||||||||||||||||||||||||||||||
param_columns = axes(src_param_data)[1] | ||||||||||||||||||||||||||||||||||
mult_columns = axes(src_mult_data)[1] | ||||||||||||||||||||||||||||||||||
|
@@ -103,10 +114,14 @@ function solve_impl!( | |||||||||||||||||||||||||||||||||
sys::PSY.System, | ||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||
# Solve main problem | ||||||||||||||||||||||||||||||||||
status = PSI.RunStatus.SUCCESSFUL | ||||||||||||||||||||||||||||||||||
status = ISSIM.RunStatus.RUNNING | ||||||||||||||||||||||||||||||||||
for (index, subproblem) in container.subproblems | ||||||||||||||||||||||||||||||||||
@info "Solving problem $index" | ||||||||||||||||||||||||||||||||||
@debug "Solving problem $index" | ||||||||||||||||||||||||||||||||||
status = PSI.solve_impl!(subproblem, sys) | ||||||||||||||||||||||||||||||||||
println("yc -- solving problem,",index) | ||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [JuliaFormatter] reported by reviewdog 🐶
Suggested change
|
||||||||||||||||||||||||||||||||||
if status != ISSIM.RunStatus.SUCCESSFULLY_FINALIZED | ||||||||||||||||||||||||||||||||||
return status | ||||||||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||||||||
write_results_to_main_container(container) | ||||||||||||||||||||||||||||||||||
return status | ||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
abstract type DecompositionAlgorithm end | ||
|
||
struct SequentialAlgorithm <: DecompositionAlgorithm end | ||
struct MPIParallelAlgorithm <: DecompositionAlgorithm end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Formulations | ||
|
||
struct SplitAreaPTDFPowerModel <: PSI.AbstractPTDFModel end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
struct StateEstimationInjections <: PSI.VariableValueParameter end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[JuliaFormatter] reported by reviewdog 🐶