Skip to content

Commit 1175bef

Browse files
authored
Merge pull request #65 from JuliaStochOpt/bl/jumpv0.21
Update to JuMP v0.21
2 parents c165e0f + 9f655b6 commit 1175bef

File tree

9 files changed

+34
-77
lines changed

9 files changed

+34
-77
lines changed

Project.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ version = "0.1.2"
66
[deps]
77
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
88
MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
9+
MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0"
910
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
1011

1112
[compat]
12-
JuMP = "0.20"
13+
JuMP = "0.21.1"
1314
MathOptInterface = "0.9.1"
15+
MutableArithmetics = "0.2.2"
1416
julia = "1"
1517

1618
[extras]

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ We can also solve it for different values of `a`.
8484

8585
```julia
8686
# Create a JuMP model able to handle parameters
87-
model = ModelWithParams(with_optimizer(SOME_SOLVER.Optimizer))
87+
model = ModelWithParams(SOME_SOLVER.Optimizer)
8888

8989
# Create a regular JuMP variable
9090
@variable(model, x)
@@ -147,7 +147,7 @@ One example in pure JuMP goes as follows:
147147

148148
```julia
149149
# create a regular JuMP Model
150-
model_pure = Model(with_optimizer(SOME_SOLVER.Optimizer))
150+
model_pure = Model(SOME_SOLVER.Optimizer)
151151

152152
# add optimization variables
153153
@variable(model_pure, x[1:N] >= 0)
@@ -191,7 +191,7 @@ The same example of the motivation can be written with **parameters**:
191191

192192
```julia
193193
# create a regular JuMP Model
194-
model_pure = Model(with_optimizer(SOME_SOLVER.Optimizer))
194+
model_pure = Model(SOME_SOLVER.Optimizer)
195195

196196
# add optimization variables
197197
@variable(model_pure, x[1:N] >= 0)

benchmarks/bench.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ using Profile
88
using ProfileView
99

1010
function bench1_p(N::Int, M::Int)
11-
m_slave = ModelWithParams(with_optimizer(GLPK.Optimizer))
11+
m_slave = ModelWithParams(GLPK.Optimizer)
1212

1313
x = add_parameters(m_slave, 4.0*ones(M))
1414
@variable(m_slave, y[1:N])
@@ -20,7 +20,7 @@ function bench1_p(N::Int, M::Int)
2020
end
2121
end
2222
function bench1_v(N::Int, M::Int)
23-
m_slave = Model(with_optimizer(GLPK.Optimizer))
23+
m_slave = Model(GLPK.Optimizer)
2424

2525
@variable(m_slave, x[1:M] == 4.0)
2626
@variable(m_slave, y[1:N])
@@ -32,7 +32,7 @@ function bench1_v(N::Int, M::Int)
3232
end
3333
end
3434
function bench2_p(N::Int)
35-
m_slave = ModelWithParams(with_optimizer(GLPK.Optimizer))
35+
m_slave = ModelWithParams(GLPK.Optimizer)
3636

3737
x = add_parameters(m_slave, 4.0*ones(N))
3838
@variable(m_slave, y[1:N])
@@ -44,7 +44,7 @@ function bench2_p(N::Int)
4444
end
4545
end
4646
function bench2_v(N::Int)
47-
m_slave = Model(with_optimizer(GLPK.Optimizer))
47+
m_slave = Model(GLPK.Optimizer)
4848

4949
@variable(m_slave, x[1:N] == 4.0)
5050
@variable(m_slave, y[1:N])

benchmarks/bench2.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ end
7070
=#
7171

7272
function bench_create_param(N_Parameters::Int, N_Variables::Int, N_Constraints::Int)
73-
model = ModelWithParams(with_optimizer(GLPK.Optimizer))
73+
model = ModelWithParams(GLPK.Optimizer)
7474
@timeit to "create params" x = add_parameters2(model, N_Parameters)
7575
@timeit to "create vars" y = add_variables(model, N_Variables)
7676

@@ -104,4 +104,4 @@ reset_timer!(to)
104104
bench_create_param(1000, 1000, 1000)
105105

106106

107-
show(to)
107+
show(to)

src/ParameterJuMP.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ module ParameterJuMP
22

33
using SparseArrays
44

5+
import MutableArithmetics
6+
const MA = MutableArithmetics
7+
58
using JuMP
69
export index
710
using MathOptInterface
@@ -259,7 +262,7 @@ to the regular `Model` constructor.
259262
Example using GLPK solver:
260263
261264
```julia
262-
model = ModelWithParams(with_optimizer(GLPK.Optimizer))
265+
model = ModelWithParams(GLPK.Optimizer)
263266
```
264267
"""
265268
function ModelWithParams(args...; kwargs...)

src/mutable_arithmetics.jl

Lines changed: 14 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,23 @@
1-
2-
# destructive_add!
3-
# ------------------------------------------------------------------------------
4-
5-
# destructive_add!{C}(ex::Number, c::Number, x::Number) = ex + c*x
6-
7-
#=
8-
Number
9-
=#
10-
11-
JuMP.destructive_add!(ex::Number, c::C, x::ParameterRef) where C<:Number = PAE{C}(GAEv{C}(ex),GAEp{C}(zero(C), x => c))
12-
JuMP.destructive_add!(ex::Number, x::ParameterRef, c::C) where C<:Number = JuMP.destructive_add!(ex, c, x)
13-
JuMP.destructive_add!(ex::Number, c::C, x::PAE) where C<:Number = PAE{C}(JuMP.destructive_add!(ex, c, x.v), JuMP.destructive_add!(0.0, c, x.p))
14-
15-
#=
16-
VariableRef
17-
=#
18-
19-
JuMP.destructive_add!(ex::JuMP.VariableRef, c::C, x::ParameterRef) where C<:Number = PAE{C}(GAEv{C}(zero(C), ex => one(C)), GAEp{C}(zero(C), x => c))
20-
JuMP.destructive_add!(ex::JuMP.VariableRef, x::ParameterRef, c::C) where C<:Number = JuMP.destructive_add!(ex, c, x)
21-
22-
#=
23-
Parameter
24-
=#
25-
26-
JuMP.destructive_add!(ex::ParameterRef, c::Number, x::Number) = c * x + ex
27-
28-
JuMP.destructive_add!(ex::ParameterRef, c::C, x::JuMP.VariableRef) where C<:Number = PAE{C}(GAEv{C}(zero(C), x => c), GAEp{C}(zero(C), ex => one(C)))
29-
JuMP.destructive_add!(ex::ParameterRef, x::JuMP.VariableRef, c::Number) = JuMP.destructive_add!(ex, c, x)
30-
31-
JuMP.destructive_add!(ex::ParameterRef, c::C, x::ParameterRef) where {C<:Number} = PAE{C}(zero(GAEv{C}), GAEp{C}(zero(C), ex => one(C), x => c))
32-
JuMP.destructive_add!(ex::ParameterRef, x::ParameterRef, c::C) where {C<:Number} = JuMP.destructive_add!(ex, x, c)
33-
34-
#=
35-
GAEp
36-
=#
37-
38-
JuMP.destructive_add!(aff::GAEp{C}, c::Number, x::Number) where {C} = PAE{C}(GAEv{C}(c*x), aff)
39-
40-
JuMP.destructive_add!(aff::GAEp{C}, x::Union{JuMP.VariableRef, GAEv{C}}, c::Number) where C = JuMP.destructive_add!(aff, c, x)
41-
JuMP.destructive_add!(aff::GAEp{C}, c::Number, x::Union{JuMP.VariableRef, GAEv{C}}) where C = PAE{C}(GAEv{C}(zero(C), x => convert(C, c)), aff)
42-
43-
#=
44-
GAEv
45-
=#
46-
47-
JuMP.destructive_add!(aff::GAEv{C}, x::Union{ParameterRef, GAEp{C}}, c::Number) where C = JuMP.destructive_add!(aff, c, x)
48-
JuMP.destructive_add!(aff::GAEv{C}, c::Number, x::Union{ParameterRef, GAEp{C}}) where C = PAE{C}(aff, GAEp{C}(zero(C), x => convert(C, c)))
49-
50-
#=
51-
PAE
52-
=#
53-
54-
JuMP.destructive_add!(aff::PAE, x::Union{JuMP.VariableRef, GAEv, ParameterRef, GAEp}, c::Number) = JuMP.destructive_add!(aff, c, x)
55-
function JuMP.destructive_add!(aff::PAE, c::Number, x::Union{JuMP.VariableRef, GAEv})
1+
function MA.mutable_operate!(op::MA.AddSubMul, aff::PAE, x::Union{JuMP.VariableRef, GAEv, ParameterRef, GAEp}, c::Number)
2+
return MA.mutable_operate!(op, aff, c, x)
3+
end
4+
function MA.mutable_operate!(op::MA.AddSubMul, aff::PAE, c::Number, x::Union{JuMP.VariableRef, GAEv})
565
if !iszero(c)
57-
aff.v = JuMP.destructive_add!(aff.v, c, x)
6+
MA.mutable_operate!(op, aff.v, c, x)
587
end
59-
aff
8+
return aff
609
end
61-
function JuMP.destructive_add!(aff::PAE, c::Number, x::Union{ParameterRef, GAEp})
10+
function MA.mutable_operate!(op::MA.AddSubMul, aff::PAE, c::Number, x::Union{ParameterRef, GAEp})
6211
if !iszero(c)
63-
aff.p = JuMP.destructive_add!(aff.p, c, x)
12+
MA.mutable_operate!(op, aff.p, c, x)
6413
end
65-
aff
14+
return aff
6615
end
67-
function JuMP.destructive_add!(aff::PAE, c::Number, x::Number)
68-
if !iszero(c)
69-
aff.v = JuMP.destructive_add!(aff.v, c, x)
16+
function MA.mutable_operate!(op::MA.AddSubMul, aff::PAE, c::Number, x::Number)
17+
if !iszero(c) && !iszero(x)
18+
aff.v = MA.mutable_operate!(op, aff.v, c, x)
7019
end
71-
aff
20+
return aff
7221
end
7322

7423
function JuMP.add_to_expression!(aff::PAE, other::Number)
@@ -95,4 +44,4 @@ end
9544
function JuMP.add_to_expression!(lhs_aff::PAE, rhs_aff::PAE)
9645
JuMP.add_to_expression!(lhs_aff.p, rhs_aff.p)
9746
JuMP.add_to_expression!(lhs_aff.v, rhs_aff.v)
98-
end
47+
end

src/operators.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ Base.:(-)(lhs::GAEp{C}, rhs::GAEv{C}) where {C} = (+)(-rhs,lhs)
100100
# DONE in JuMP
101101

102102
# GenericAffExpr{C,ParameterRef}--PAE{C}
103+
Base.:(+)(lhs::GAEp{C}, rhs::PAE{C}) where {C} = PAE{C}(rhs.v, lhs + rhs.p)
103104

104105
#=
105106
PAE{C}

test/runtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ using JuMP
66
using ParameterJuMP
77

88
using GLPK
9-
factory = with_optimizer(GLPK.Optimizer)
9+
factory = GLPK.Optimizer
1010

1111
include("tests.jl")
1212

test/tests.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,8 @@ function test14(args...)
442442
@test_expression_with_string b - a - 1.2 "b - a - 1.2"
443443
# var + par + num
444444
@test_expression_with_string x + a + 1.2 "x + a + 1.2"
445+
# var + par + num * num
446+
@test_expression_with_string x + a + 1.2 * 2.0 "x + a + 2.4"
445447
# var + var + par + num
446448
@test_expression_with_string x + y + a + 1.2 "x + y + a + 1.2"
447449
# var + var - par + num

0 commit comments

Comments
 (0)