diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba39cc5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +Manifest.toml diff --git a/.travis.yml b/.travis.yml index 89de129..43ba22b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ os: - linux - osx julia: - - 0.7 - 1.0 + - 1.1 notifications: email: false sudo: false @@ -14,7 +14,5 @@ addons: - liblapack-dev - libgmp-dev - libglpk-dev -before_script: - - julia -e 'using Pkg; Pkg.add(PackageSpec(name="JuMP", rev="master")); Pkg.add(PackageSpec(url="https://github.com/JuliaStochOpt/ParameterJuMP.jl.git"))' after_success: - julia -e 'cd(Pkg.dir("StructJuMP")); Pkg.add("Coverage"); using Coverage; Coveralls.submit(Coveralls.process_folder())' diff --git a/Project.toml b/Project.toml new file mode 100644 index 0000000..71ecaf8 --- /dev/null +++ b/Project.toml @@ -0,0 +1,25 @@ +name = "StructJuMP" +uuid = "34f15cae-5318-50c9-93d3-9feadd34e321" +repo = "https://github.com/StructJuMP/StructJuMP.jl.git" +version = "0.1.0" + +[deps] +JuMP = "4076af6c-e467-56ae-b986-b466b2749572" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" +ParameterJuMP = "774612a8-9878-5177-865a-ca53ae2495f9" + +[compat] +JuMP = "0.19" +MathOptInterface = "0.8" +ParameterJuMP = "0.1" +julia = "1" + +[extras] +ECOS = "e2685f51-7e38-5353-a97d-a921fd2c8199" +GLPK = "60bf3e95-4087-53dc-ae20-288a0d20c6a6" +Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[targets] +test = ["GLPK", "Test", "ECOS", "Ipopt"] diff --git a/REQUIRE b/REQUIRE deleted file mode 100644 index 71f715c..0000000 --- a/REQUIRE +++ /dev/null @@ -1,4 +0,0 @@ -julia 0.7 -MathOptInterface 0.8 -JuMP 0.18.2+ -ParameterJuMP diff --git a/src/BendersBridge.jl b/src/BendersBridge.jl index 7849d7c..cc5eb01 100644 --- a/src/BendersBridge.jl +++ b/src/BendersBridge.jl @@ -8,12 +8,12 @@ function parametrized_function(var::StructuredVariableRef, structured_model::StructuredModel, model::JuMP.Model, variable_map::Dict{Int, JuMP.VariableRef}, - parameter_map::Dict{Int, ParameterJuMP.Parameter}) + parameter_map::Dict{Int, ParameterJuMP.ParameterRef}) if var.model === structured_model return variable_map[var.idx] elseif var.model === structured_model.parent if !haskey(parameter_map, var.idx) - parameter_map[var.idx] = ParameterJuMP.Parameter(model) + parameter_map[var.idx] = ParameterJuMP.add_parameter(model) end return parameter_map[var.idx] else @@ -24,9 +24,9 @@ function parametrized_function(aff::JuMP.GenericAffExpr{C, StructuredVariableRef structured_model::StructuredModel, model::JuMP.Model, variable_map::Dict{Int, JuMP.VariableRef}, - parameter_map::Dict{Int, ParameterJuMP.Parameter}) where C + parameter_map::Dict{Int, ParameterJuMP.ParameterRef}) where C param_aff = ParameterJuMP.PAE{C}(JuMP.GenericAffExpr{C, JuMP.VariableRef}(aff.constant), - JuMP.GenericAffExpr{C, ParameterJuMP.Parameter}(zero(C))) + JuMP.GenericAffExpr{C, ParameterJuMP.ParameterRef}(zero(C))) for (coef, var) in JuMP.linear_terms(aff) JuMP.add_to_expression!(param_aff, coef, @@ -44,15 +44,15 @@ function parametrized_function(quad::JuMP.GenericQuadExpr{C, StructuredVariableR structured_model::StructuredModel, model::JuMP.Model, variable_map::Dict{Int, JuMP.VariableRef}, - parameter_map::Dict{Int, ParameterJuMP.Parameter}) where C + parameter_map::Dict{Int, ParameterJuMP.ParameterRef}) where C param_aff = parametrized_function(quad.aff, structured_model, model, variable_map, parameter_map) if param_aff isa ParameterJuMP.PAE error("parametrized quadratic functions are not supported yet") #quadv = JuMP.GenericQuadExpr{C, JuMP.VariableRef}(param_aff.v) - #quadp = JuMP.GenericQuadExpr{C, ParameterJuMP.Parameter}(param_aff.p) + #quadp = JuMP.GenericQuadExpr{C, ParameterJuMP.ParameterRef}(param_aff.p) else quadv = JuMP.GenericQuadExpr{C, JuMP.VariableRef}(param_aff) - quadp = JuMP.GenericQuadExpr{C, ParameterJuMP.Parameter}(zero(C)) + quadp = JuMP.GenericQuadExpr{C, ParameterJuMP.ParameterRef}(zero(C)) end for (coef, var1, var2) in JuMP.quadterms(quad) if var1.model === structured_model && var2.model == structured_model @@ -77,7 +77,7 @@ struct ParametrizedModel variable_map::Dict{Int, JuMP.VariableRef} # Map between index of structured variable in `structured_model.parent` # and the corresponding parameter in `model`. - parameter_map::Dict{Int, ParameterJuMP.Parameter} + parameter_map::Dict{Int, ParameterJuMP.ParameterRef} # Cost of children θ::Dict{Int, JuMP.VariableRef} end @@ -92,7 +92,7 @@ function ParametrizedModel(structured_model::StructuredModel, args...; kwargs... name = structured_model.varnames[index] variable_map[index] = JuMP.add_variable(model, var, name) end - parameter_map = Dict{Int, ParameterJuMP.Parameter}() + parameter_map = Dict{Int, ParameterJuMP.ParameterRef}() for (index, con) in structured_model.constraints name = structured_model.connames[index] param_fun = parametrized_function(con.func, structured_model, model, diff --git a/src/Benders_pmap.jl b/src/Benders_pmap.jl index a8146f7..f561334 100644 --- a/src/Benders_pmap.jl +++ b/src/Benders_pmap.jl @@ -8,7 +8,7 @@ mutable struct Solution variable_value::Dict{JuMP.VariableRef, Float64} # Map between the parameter # and the dual value - parameter_dual::Dict{Parameter, Float64} + parameter_dual::Dict{ParameterRef, Float64} end function optimize(model::ParametrizedModel) @@ -39,7 +39,7 @@ function optimize(model::ParametrizedModel) variable_value[θ] = JuMP.value(θ) end end - parameter_dual = Dict{Parameter, Float64}() + parameter_dual = Dict{ParameterRef, Float64}() for parameter in values(model.parameter_map) parameter_dual[parameter] = JuMP.dual(parameter) end @@ -50,7 +50,7 @@ function set_parent_solution!(model::ParametrizedModel, parent::ParametrizedMode for (index, parameter) in model.parameter_map vref = parent.variable_map[index] value = parent_solution.variable_value[vref] - ParameterJuMP.setvalue!(parameter, value) + JuMP.fix(parameter, value) end end diff --git a/test/REQUIRE b/test/REQUIRE deleted file mode 100644 index 822c104..0000000 --- a/test/REQUIRE +++ /dev/null @@ -1,3 +0,0 @@ -GLPK -ECOS -Ipopt