Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
odow committed Jun 28, 2023
1 parent aa3744d commit d652b48
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 8 deletions.
28 changes: 22 additions & 6 deletions src/core/objective.jl
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,22 @@ function objective_min_fuel_and_flow_cost_polynomial(pm::AbstractPowerModel; kwa
end
end

"""
_pow(x, d::Int)
Compute `x^d` with special case handling for `d == 0` and `d == 1` to avoid
JuMP's default implementation which returns a quadratic for `d in {0, 1, 2}`.
"""
function _pow(x, d::Int)
if d == 0
return 1.0
elseif d == 1
return x
else
return x^d
end
end

""
function _objective_min_fuel_and_flow_cost_polynomial_linquad(pm::AbstractPowerModel; report::Bool=true)
gen_cost = Dict()
Expand All @@ -133,7 +149,7 @@ function _objective_min_fuel_and_flow_cost_polynomial_linquad(pm::AbstractPowerM
pg = sum( var(pm, n, :pg, i)[c] for c in conductor_ids(pm, n) )
gen_cost[(n, i)] = JuMP.@expression(
pm.model,
sum(v * pg^(d-1) for (d, v) in enumerate(reverse(gen["cost"]))),
sum(v * _pow(pg, d-1) for (d, v) in enumerate(reverse(gen["cost"]))),
)
end

Expand All @@ -142,7 +158,7 @@ function _objective_min_fuel_and_flow_cost_polynomial_linquad(pm::AbstractPowerM
p_dc = sum( var(pm, n, :p_dc, from_idx[i])[c] for c in conductor_ids(pm, n) )
dcline_cost[(n, i)] = JuMP.@expression(
pm.model,
sum(v * p_dc^(d-1) for (d, v) in enumerate(reverse(dcline["cost"]))),
sum(v * _pow(p_dc, d-1) for (d, v) in enumerate(reverse(dcline["cost"]))),
)
end
end
Expand Down Expand Up @@ -263,7 +279,7 @@ function _objective_min_fuel_and_flow_cost_polynomial_nl(pm::AbstractPowerModel;
pg = sum( var(pm, n, :pg, i)[c] for c in conductor_ids(pm, n))
gen_cost[(n,i)] = JuMP.@expression(
pm.model,
sum(v * pg^(d-1) for (d, v) in enumerate(reverse(gen["cost"]))),
sum(v * _pow(pg, d-1) for (d, v) in enumerate(reverse(gen["cost"]))),
)
end

Expand All @@ -273,7 +289,7 @@ function _objective_min_fuel_and_flow_cost_polynomial_nl(pm::AbstractPowerModel;
p_dc = sum( var(pm, n, :p_dc, from_idx[i])[c] for c in conductor_ids(pm, n))
dcline_cost[(n,i)] = JuMP.@expression(
pm.model,
sum(v * p_dc^(d-1) for (d, v) in enumerate(reverse(dcline["cost"]))),
sum(v * _pow(p_dc, d-1) for (d, v) in enumerate(reverse(dcline["cost"]))),
)
end
end
Expand Down Expand Up @@ -306,7 +322,7 @@ function _objective_min_fuel_cost_polynomial_linquad(pm::AbstractPowerModel; rep
pg = sum( var(pm, n, :pg, i)[c] for c in conductor_ids(pm, n) )
gen_cost[(n, i)] = JuMP.@expression(
pm.model,
sum(v * pg^(d-1) for (d, v) in enumerate(reverse(gen["cost"]))),
sum(v * _pow(pg, d-1) for (d, v) in enumerate(reverse(gen["cost"]))),
)
end
end
Expand All @@ -327,7 +343,7 @@ function _objective_min_fuel_cost_polynomial_nl(pm::AbstractPowerModel; report::
pg = sum( var(pm, n, :pg, i)[c] for c in conductor_ids(pm, n))
gen_cost[(n,i)] = JuMP.@expression(
pm.model,
sum(v * pg^(d-1) for (d, v) in enumerate(reverse(gen["cost"]))),
sum(v * _pow(pg, d-1) for (d, v) in enumerate(reverse(gen["cost"]))),
)
end
end
Expand Down
2 changes: 1 addition & 1 deletion test/docs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
#print(pm.model)

@test JuMP.num_nonlinear_constraints(pm.model) == 0
@test JuMP.num_constraints(pm.model, JuMP.NonlinearExpr{VariableRef}, JuMP.MOI.EqualTo{Float64}) == 12
@test JuMP.num_constraints(pm.model, JuMP.NonlinearExpr{JuMP.VariableRef}, JuMP.MOI.EqualTo{Float64}) == 12
@test JuMP.num_variables(pm.model) == 28

result = optimize_model!(pm, optimizer=JuMP.optimizer_with_attributes(Ipopt.Optimizer, "print_level"=>0))
Expand Down
2 changes: 1 addition & 1 deletion test/model.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
pm = instantiate_model("../test/data/matpower/case5.m", ACPPowerModel, PowerModels.build_opf, jump_model=m)

@test JuMP.num_nonlinear_constraints(pm.model) == 0
@test JuMP.num_constraints(pm.model, JuMP.NonlinearExpr{VariableRef}, JuMP.MOI.EqualTo{Float64}) == 28
@test JuMP.num_constraints(pm.model, JuMP.NonlinearExpr{JuMP.VariableRef}, JuMP.MOI.EqualTo{Float64}) == 28
@test JuMP.num_variables(pm.model) == 49

@test pm.model[:my_var] == x
Expand Down

0 comments on commit d652b48

Please sign in to comment.