Skip to content

Commit 00f7f4f

Browse files
authored
More minor fixes (#228)
* minor fixes found * more fixes
1 parent 20a1bed commit 00f7f4f

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed

src/MOI_wrapper.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,8 @@ function MOI.get(
746746
elseif haskey(model.affine_outer_to_inner, ci)
747747
inner_ci = model.affine_outer_to_inner[ci]
748748
return _original_function(model.affine_constraint_cache[inner_ci])
749+
elseif haskey(model.vector_affine_constraint_cache, ci)
750+
return _original_function(model.vector_affine_constraint_cache[ci])
749751
else
750752
MOI.throw_if_not_valid(model, ci)
751753
return MOI.get(model.optimizer, attr, ci)

src/parametric_functions.jl

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ function ParametricQuadraticFunction(
6262
affine_data = Dict{MOI.VariableIndex,T}()
6363
sizehint!(affine_data, length(v_in_pv))
6464
affine_data_np = Dict{MOI.VariableIndex,T}()
65-
sizehint!(affine_data, length(v))
65+
sizehint!(affine_data_np, length(v))
6666
for term in v
6767
if term.variable in v_in_pv
6868
base = get(affine_data, term.variable, zero(T))
@@ -276,12 +276,11 @@ function _delta_parametric_affine_terms(
276276
# remember a variable may appear more than once in pv
277277
for term in quadratic_parameter_variable_terms(f)
278278
p = p_idx(term.variable_1)
279-
if !isnan(model.updated_parameters[p])
279+
new_p = model.updated_parameters[p]
280+
if !isnan(new_p)
280281
base = get(delta_terms_dict, term.variable_2, zero(T))
281282
delta_terms_dict[term.variable_2] =
282-
base +
283-
term.coefficient *
284-
(model.updated_parameters[p] - model.parameters[p])
283+
base + term.coefficient * (new_p - model.parameters[p])
285284
end
286285
end
287286
return delta_terms_dict
@@ -725,9 +724,9 @@ function _delta_parametric_constant(
725724
p_idx_val = p_idx(term.scalar_term.variable)
726725
output_idx = term.output_index
727726

728-
if !isnan(model.updated_parameters[p_idx_val])
727+
new_param_val = model.updated_parameters[p_idx_val]
728+
if !isnan(new_param_val)
729729
old_param_val = model.parameters[p_idx_val]
730-
new_param_val = model.updated_parameters[p_idx_val]
731730
delta_constants[output_idx] +=
732731
term.scalar_term.coefficient * (new_param_val - old_param_val)
733732
end
@@ -772,10 +771,9 @@ function _delta_parametric_affine_terms(
772771
p_idx_val = p_idx(term.scalar_term.variable_1)
773772
var = term.scalar_term.variable_2
774773
output_idx = term.output_index
775-
if haskey(model.updated_parameters, p_idx_val) &&
776-
!isnan(model.updated_parameters[p_idx_val])
774+
new_param_val = model.updated_parameters[p_idx_val]
775+
if !isnan(new_param_val)
777776
old_param_val = model.parameters[p_idx_val]
778-
new_param_val = model.updated_parameters[p_idx_val]
779777
delta_coef =
780778
term.scalar_term.coefficient * (new_param_val - old_param_val)
781779
base = get(delta_terms_dict, (var, output_idx), zero(T))

test/test_MathOptInterface.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2276,6 +2276,25 @@ function test_get_constraint_function_vector()
22762276
return
22772277
end
22782278

2279+
function test_get_constraint_function_vector_affine()
2280+
# MOI.get(ConstraintFunction) for a parametric
2281+
# VectorAffineFunction constraint must return the original function
2282+
# (with parameter VariableIndex terms), not the solver-side function
2283+
# (with parameters already substituted into constants).
2284+
model = POI.Optimizer(MOI.Utilities.Model{Float64}())
2285+
x = MOI.add_variable(model)
2286+
p, pc = MOI.add_constrained_variable(model, MOI.Parameter(3.0))
2287+
terms = [
2288+
MOI.VectorAffineTerm(1, MOI.ScalarAffineTerm(2.0, x)),
2289+
MOI.VectorAffineTerm(1, MOI.ScalarAffineTerm(5.0, p)),
2290+
]
2291+
f = MOI.VectorAffineFunction(terms, [0.0])
2292+
ci = MOI.add_constraint(model, f, MOI.Zeros(1))
2293+
f2 = MOI.get(model, MOI.ConstraintFunction(), ci)
2294+
@test canonical_compare(f, f2)
2295+
return
2296+
end
2297+
22792298
function test_multiplicative_dual_error()
22802299
model = POI.Optimizer(MOI.Utilities.Model{Float64}())
22812300
x = MOI.add_variable(model)

0 commit comments

Comments
 (0)