diff --git a/src/building_blocks.jl b/src/building_blocks.jl index 715092b4a7aaa25bd097087d410daa5438cd9e06..cb23eb78781c7fbf3b6a507ac2fef93780f5e2b1 100644 --- a/src/building_blocks.jl +++ b/src/building_blocks.jl @@ -1,5 +1,5 @@ module BuildingBlocks -import JuMP: has_values, GenericVariableRef, value, Model, @constraint, @objective, owner_model, objective_function +import JuMP: has_values, GenericVariableRef, value, Model, @constraint, @objective, owner_model, objective_function, optimize!, AbstractJuMPScalar import Printf: @sprintf import ..Scanners: Scanner import ..Variables: variables, start_time, duration, end_time, gradient_strength, slew_rate @@ -138,4 +138,20 @@ function match_blocks!(block1::BuildingBlock, block2::BuildingBlock) match_blocks!(block1, block2, property_list) end + +optimize!(bb::BuildingBlock) = optimize!(owner_model(bb)) +function owner_model(bb::BuildingBlock) + if hasproperty(bb, :model) + return bb.model + else + for name in propertynames(bb) + value = getproperty(bb, name) + if value isa AbstractJuMPScalar + return owner_model(value) + end + end + end + error("Cannot find owner model of $bb") +end + end \ No newline at end of file