jump-dev / jump-dev/MathOptInterface.jl

Add Batched{S} set

オープン
#2,904 コメント 15 件 リアクション 7 件 担当者 0 名 GitHub で見る
Type: Set Request
主要言語
Julia
スター
504
フォーク
101
平均マージ
6時間 26分
マージ済み PR(30日)
22

説明

@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
```

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。