Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ jobs:
- version: '1'
os: ubuntu-latest
arch: x64
- version: '1.0'
- version: '1.6'
os: ubuntu-latest
arch: x64
- version: '1.0'
- version: '1.6'
os: ubuntu-latest
arch: x86
steps:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ jobs:
- uses: actions/checkout@v2
- uses: julia-actions/setup-julia@latest
with:
# Build documentation on Julia 1.0
version: '1.0'
# Build documentation on Julia 1.6
version: '1.6'
- name: Install dependencies
run: julia --project=docs/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()'
- name: Build and deploy
Expand Down
6 changes: 1 addition & 5 deletions benchmark/benchmark.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,7 @@ MOI.Benchmarks.@add_benchmark function add_constraint_svf(new_model)
model = new_model()
x = MOI.add_variables(model, 10_000)
for i in 1:10_000
MOI.add_constraint(
model,
x[i],
MOI.GreaterThan(1.0),
)
MOI.add_constraint(model, x[i], MOI.GreaterThan(1.0))
end
return
end
Expand Down
16 changes: 12 additions & 4 deletions src/duals.jl
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,12 @@ end
function update_duals_with_affine_constraint_cache!(
param_dual_cum_sum::Vector{Float64},
optimizer::OT,
affine_constraint_cache_inner::MOI.Utilities.DoubleDicts.DoubleDictInner{F, S, V}
) where {OT, F, S, V}
affine_constraint_cache_inner::MOI.Utilities.DoubleDicts.DoubleDictInner{
F,
S,
V,
},
) where {OT,F,S,V}
for (ci, param_array) in affine_constraint_cache_inner
calculate_parameters_in_ci!(
param_dual_cum_sum,
Expand Down Expand Up @@ -76,8 +80,12 @@ end
function update_duals_with_quadratic_constraint_cache!(
param_dual_cum_sum::Vector{Float64},
model::Optimizer,
quadratic_constraint_cache_pc_inner::MOI.Utilities.DoubleDicts.DoubleDictInner{F, S, V}
) where {F, S, V}
quadratic_constraint_cache_pc_inner::MOI.Utilities.DoubleDicts.DoubleDictInner{
F,
S,
V,
},
) where {F,S,V}
for (poi_ci, param_array) in quadratic_constraint_cache_pc_inner
moi_ci = model.quadratic_added_cache[poi_ci]
calculate_parameters_in_ci!(
Expand Down
24 changes: 14 additions & 10 deletions src/update_parameters.jl
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,11 @@ function update_parameter_in_affine_constraints!(
optimizer::OT,
parameters::Dict{MOI.VariableIndex,T},
updated_parameters::Dict{MOI.VariableIndex,T},
affine_constraint_cache_inner::MOI.Utilities.DoubleDicts.DoubleDictInner{F, S, V},
affine_constraint_cache_inner::MOI.Utilities.DoubleDicts.DoubleDictInner{
F,
S,
V,
},
) where {OT,T,F,S,V}
for (ci, param_array) in affine_constraint_cache_inner
update_parameter_in_affine_constraints!(
Expand All @@ -56,10 +60,8 @@ function update_parameter_in_affine_constraints!(
for term in param_array
if haskey(updated_parameters, term.variable) # TODO This haskey can be slow
param_constant +=
term.coefficient * (
updated_parameters[term.variable] -
parameters[term.variable]
)
term.coefficient *
(updated_parameters[term.variable] - parameters[term.variable])
end
end
if param_constant != 0
Expand Down Expand Up @@ -268,7 +270,11 @@ function update_parameter_in_vector_affine_constraints!(
optimizer::OT,
parameters::Dict{MOI.VariableIndex,T},
updated_parameters::Dict{MOI.VariableIndex,T},
vector_constraint_cache_inner::MOI.Utilities.DoubleDicts.DoubleDictInner{F,S,V},
vector_constraint_cache_inner::MOI.Utilities.DoubleDicts.DoubleDictInner{
F,
S,
V,
},
) where {OT,T,F,S,V}
for (ci, param_array) in vector_constraint_cache_inner
update_parameter_in_vector_affine_constraints!(
Expand Down Expand Up @@ -334,11 +340,9 @@ function update_parameters!(model::Optimizer)
coef = j.coefficient
param_new = model.updated_parameters[j.variable_1]
if haskey(constraint_aux_dict, (ci, j.variable_2))
constraint_aux_dict[(ci, j.variable_2)] +=
param_new * coef
constraint_aux_dict[(ci, j.variable_2)] += param_new * coef
else
constraint_aux_dict[(ci, j.variable_2)] =
param_new * coef
constraint_aux_dict[(ci, j.variable_2)] = param_new * coef
end
end
end
Expand Down
6 changes: 2 additions & 4 deletions src/utils.jl
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,7 @@ function separate_possible_terms_and_calculate_parameter_constant(
push!(vars, term)
elseif is_parameter_in_model(model, term.variable)
push!(params, term)
param_constant +=
term.coefficient * model.parameters[term.variable]
param_constant += term.coefficient * model.parameters[term.variable]
else
error("Constraint uses a variable that is not in the model")
end
Expand All @@ -131,8 +130,7 @@ function separate_possible_terms_and_calculate_parameter_constant(
end
elseif is_parameter_in_model(model, term.variable)
push!(params, term)
param_constant +=
term.coefficient * model.parameters[term.variable]
param_constant += term.coefficient * model.parameters[term.variable]
else
error("Constraint uses a variable that is not in the model")
end
Expand Down
7 changes: 3 additions & 4 deletions test/MOI_wrapper.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ const CONFIG = MOIT.Config()
MOIT.runtests(
OPTIMIZER_GLPK,
CONFIG;
exclude =
[
exclude = [
"test_attribute_SolverVersion",
"test_linear_Interval_inactive",
"test_linear_add_constraints",
Expand All @@ -28,8 +27,8 @@ const CONFIG = MOIT.Config()
"test_model_ModelFilter_ListOfConstraintIndices",
"test_model_ModelFilter_ListOfConstraintTypesPresent",
"test_constraint_ZeroOne_bounds_3",
"test_linear_integration_2"
]
"test_linear_integration_2",
],
)
end

Expand Down
12 changes: 2 additions & 10 deletions test/basic_tests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@
cz = MOI.ConstraintIndex{MOI.VariableIndex,POI.Parameter}(4)

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

@test_throws ErrorException("Cannot constrain a parameter") MOI.add_constraint(
Expand Down Expand Up @@ -107,11 +103,7 @@ end
x = MOI.add_variables(optimizer, 2)

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

y, cy = MOI.add_constrained_variable(optimizer, POI.Parameter(0))
Expand Down
12 changes: 2 additions & 10 deletions test/production_problem_test.jl
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,7 @@
@test MOI.get(optimizer, MOI.VariablePrimal(), w) == 0

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

cons1 = MOI.ScalarAffineFunction(
Expand Down Expand Up @@ -165,11 +161,7 @@ end
@test MOI.get(optimizer, MOI.VariablePrimal(), w) == 0

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

cons1 = MOI.ScalarAffineFunction(
Expand Down
60 changes: 14 additions & 46 deletions test/quad_tests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,8 @@ end
x = MOI.add_variables(optimizer, 2)

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(1.0),
)
MOI.add_constraint(
optimizer,
x_i,
MOI.LessThan(5.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(1.0))
MOI.add_constraint(optimizer, x_i, MOI.LessThan(5.0))
end

quad_terms = MOI.ScalarQuadraticTerm{Float64}[]
Expand Down Expand Up @@ -297,11 +289,7 @@ end
x = MOI.add_variables(optimizer, 2)

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

y, cy = MOI.add_constrained_variable(optimizer, POI.Parameter(0))
Expand Down Expand Up @@ -376,11 +364,7 @@ end
x = MOI.add_variables(optimizer, 2)

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

y, cy = MOI.add_constrained_variable(optimizer, POI.Parameter(0))
Expand Down Expand Up @@ -456,11 +440,7 @@ end
x = MOI.add_variables(optimizer, 2)

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

MOI.add_constraint(optimizer, x[1], MOI.LessThan(20.0))
Expand Down Expand Up @@ -523,11 +503,7 @@ end
x = MOI.add_variables(optimizer, 2)

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

MOI.add_constraint(optimizer, x[1], MOI.LessThan(20.0))
Expand Down Expand Up @@ -590,11 +566,7 @@ end
x = MOI.add_variables(optimizer, 2)

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

MOI.add_constraint(optimizer, x[1], MOI.LessThan(20.0))
Expand Down Expand Up @@ -739,11 +711,7 @@ end
x = MOI.add_variables(optimizer, 2)

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

y, cy = MOI.add_constrained_variable(optimizer, POI.Parameter(1))
Expand All @@ -768,7 +736,11 @@ end
MOI.optimize!(optimizer)

@test isapprox(MOI.get(optimizer, MOI.ObjectiveValue()), 1.0, atol = ATOL)
@test isapprox(MOI.get(optimizer, MOI.VariablePrimal(), x[1]), 0.0, atol = ATOL)
@test isapprox(
MOI.get(optimizer, MOI.VariablePrimal(), x[1]),
0.0,
atol = ATOL,
)

@test_throws ErrorException(
"Cannot calculate the dual of a multiplicative parameter",
Expand Down Expand Up @@ -809,11 +781,7 @@ end
x = MOI.add_variables(optimizer, 2)

for x_i in x
MOI.add_constraint(
optimizer,
x_i,
MOI.GreaterThan(0.0),
)
MOI.add_constraint(optimizer, x_i, MOI.GreaterThan(0.0))
end

y, cy = MOI.add_constrained_variable(optimizer, POI.Parameter(1))
Expand Down