Julia modeling interface to parallel decomposition solver DSP
MIT License
DSPopt.jl is an interface to a parallel decomposition mixed-integer programming solver DSP.
This package allows users to define block structures in optimization model written in StructJuMP
and solve the block-structured problem using the parallle solver DSP
.
This package can model and solve (by interfacing DSP
) the following optimization problems:
NOTE: You need to install solver DSP first. This package provides an interface only.
] add DSPopt
This is one simple example of stochastic
form.
Please find more examples in ./examples
particularly for block
form.
using MPI
using StructJuMP
using DSPopt
# Comment out this line if you want to run in serial
MPI.Init()
# Initialize DSPopt.jl with the communicator.
DSPopt.parallelize(MPI.COMM_WORLD)
xi = [[7,7] [11,11] [13,13]]
# create StructuredModel with number of scenarios
m = StructuredModel(num_scenarios = 3)
@variable(m, 0 <= x[i=1:2] <= 5, Int)
@objective(m, Min, -1.5 * x[1] - 4 * x[2])
for s = 1:3
# create a StructuredModel linked to m with id s and probability 1/3
blk = StructuredModel(parent = m, id = s, prob = 1/3)
@variable(blk, y[j=1:4], Bin)
@objective(blk, Min, -16 * y[1] + 19 * y[2] + 23 * y[3] + 28 * y[4])
@constraint(blk, 2 * y[1] + 3 * y[2] + 4 * y[3] + 5 * y[4] <= xi[1,s] - x[1])
@constraint(blk, 6 * y[1] + y[2] + 3 * y[3] + 2 * y[4] <= xi[2,s] - x[2])
# Quadratic constraints supported from DSP version 2.0.0 or higher
@constraint(blk, const_quad, w[1]^2 <= 1600)
if s == 1
@constraint(blk, const_quad2, 2 * w[1]^2 + 2 * w[2]^2 <= 400)
elseif s == 2
@constraint(blk, const_quad2, 5 * w[1] - w[2]^2 -2 * w[3]^2 >= -100)
end
end
# The Wasserstein ambiguity set of order-2 can be imposed with the size limit of 1.0.
DSPopt.set(WassersteinSet, 2, 1.0)
status = optimize!(m,
is_stochastic = true, # Needs to indicate that the model is a stochastic program.
solve_type = DSPopt.DW, # see instances(DSPopt.Methods) for other methods
)
# Comment out this line if you want to run in serial
MPI.Finalize()
This material is based upon work supported by the U.S. Department of Energy, Office of Science, under contract number DE-AC02-06CH11357.