jump-dev / jump-dev/MathOptInterface.jl
Add Batched{S} set
- Dominant language
- Julia
- Stars
- 504
- Forks
- 101
- Avg merge
- 6h 26m
- Merged PRs (30d)
- 22
Description
@amontoison wants this. There are also some folks in the GPU/cvxpy domain sniffing around this (https://github.com/cvxpy/cvxpy/issues/2485).
We have almost everything we need. There's just a choice between two approaches.
First, we could set the value of `Parameter` to a vector of sets:
```julia
MOI.set(
::Optimizer,
::MOI.ConstraintSet,
::MOI.ConstraintIndex{MOI.VariableIndex,MOI.Parameter{T}},
::Vector{MOI.Parameter{T}},
)
```
But this might be hard to get through the various MOI layers.
The easier alternative is to add a new `Batched{S<:MOI.AbstractSet}` set.
If there are multiple batched sets, they all must have the same length. Then the results are returned via `result_count` and we don't support returning multiple solutions within a batch.
Then a solver could choose to natively support batched parameters. And we could have a fallback optimizer like:
```Julia
using JuMP
import Ipopt
import MathOptBatchOptimizer as MOBO
model = Model(() -> MOBO.Optimizer(Ipopt.Optimizer))
@variable(model, x)
@variable(model, p in Parameter(1))
set_parameter_value(p, 1:100) # <-- set as a vector, not a scalar
@objective(model, Min, x)
@constraint(model, x >= p)
optimize!(model)
@assert result_count(model) == 100
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with the MOI.set ConstraintSet and ConstraintIndex entry points described in the issue, then review how Parameter values and result_count are represented. The work is done when the project has agreed on and implemented a batched-set approach with consistent batch lengths and the stated result behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- backend-api-design
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100