jump-dev / jump-dev/MathOptInterface.jl

Speculative: MathOptInterface 2.0

未关闭
#2,180 1 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Julia
星标
504
派生
101
平均合并
6 小时 26 分钟
30 天内合并 PR
22

描述

The purpose of this issue is to track things that we could consider changing if we release MathOptInterface v2.0. To be clear for readers, we currently have no plans to release MOI v2. This issue is just to make a note of things so we don't forget them.

Even if we do release MOI v2, we might not implement every item on this list. They're just up for discussion at some point in the process.

## [Major] Make all variables belong to a set

We currently have `add_variable` and `add_constrained_variable`, and it's complicated to work out how to add a variable when copying to a new solver. Every variable should have a domain, defaulting to `x in Reals(1)`, to distinguish constrained variables from variable-in-set constraints.

This should also help https://github.com/jump-dev/MathOptInterface.jl/issues/1993, because a solver might support an attribute for variable-in-set but not constrained-variable (or vice versa).

It would also help https://github.com/jump-dev/MathOptInterface.jl/issues/1402 because we'd know the set of each variable when writing a CBF file.

## [Major] Remove the 0.5 in QuadraticFunction

The `0.5` factor in ScalarQuadraticFunction and VectorQuadraticFunction is a pain. It makes manually constructing functions error-prone, and writing interfaces is a guess/check of do I need a 2 or a 0.5 factor in front of the diagonals. If `Vector{ScalarQuadraticTerm}` was literally just a list of terms and not a sparse representation of `Q`, then we could shift the complexity into the solvers who would know whether they needed the factor.

Examples of bugs because of this: https://github.com/jump-dev/MathOptInterface.jl/pull/2182

## [Major] reconsider function structure

x-ref https://github.com/jump-dev/MathOptInterface.jl/issues/863

## [Major] reconsider vector funnctions

As discussed on today's (2023-06-15) nonlinear call, why not just make
```Julia
struct VectorFunction{F<:AbstractScalarFunction} <: AbstractVectorFunction
rows::Vector{F}
end
```
The only special case are `VectorAffineFunction` and `VectorQuadraticFunction`, and their structure doesn't add much at present, besides complexity.

## [Major] make all indices unique and non-decreasing

x-ref https://github.com/jump-dev/MathOptInterface.jl/issues/2236

Currently different constraint types are allowed to use same index values, which means we don't know the order in which constraints were added. Having a unique non-decreasing index would allow us to copy constraints by creation order , or by groups of similar constraints.

## [Minor] Remove NLPBlock

We should entirely remove NLPBlock and use ScalarNonlinearFunction instead.

## [Minor] Restrict supports for bridges

Bridges are too permissive: https://github.com/jump-dev/MathOptInterface.jl/pull/2179#discussion_r1209561760.

For example, `VectorizeBridge` supports any scalar function:
https://github.com/jump-dev/MathOptInterface.jl/blob/a189a892cabb64f9dfb6e890e333ee73337b3338/src/Bridges/Constraint/bridges/vectorize.jl#L59-L65
but this can't be true unless each scalar function has an equivalent vector function. Currently, new scalar functions will trigger a method error for this `operate(vcat, ...)`:
https://github.com/jump-dev/MathOptInterface.jl/blob/a189a892cabb64f9dfb6e890e333ee73337b3338/src/Bridges/Constraint/bridges/vectorize.jl#L82-L83

## [Minor] Remove this method

https://github.com/jump-dev/MathOptInterface.jl/blob/494933f3a1fc54a83a994aa662ad6eba93126b67/src/constraints.jl#L215-L222

## [Minor] Rename `Utilities.operate!` to `Utilities.operate!!`

x-ref https://github.com/jump-dev/MathOptInterface.jl/pull/2207

## [Minor] remove various deprecated methods

https://github.com/jump-dev/MathOptInterface.jl/blob/95036fb34e5db297fb8ba70033bc55fa3ba29298/src/Utilities/operate.jl#L1413-L1434

https://github.com/jump-dev/MathOptInterface.jl/blob/95036fb34e5db297fb8ba70033bc55fa3ba29298/src/Utilities/operate.jl#L1574-L1592

https://github.com/jump-dev/MathOptInterface.jl/blob/95036fb34e5db297fb8ba70033bc55fa3ba29298/src/Utilities/functions.jl#L2260-L2285

## [Minor] Change substitute_variables

https://github.com/jump-dev/MathOptInterface.jl/pull/2250

## [Minor] Fix default values of attributes

`get` for attributes like `TimeLimitSec` could return the solver's default if unset. The `nothing` business is confusing.

## [Minor] Fix test naming

Fix inconsistent naming of tests like `_infeasible_` or `_INFEASIBLE_`\

## [Minor] don't skip unsupported attributes

See https://github.com/jump-dev/MathOptInterface.jl/issues/3032

贡献指南

这个仓库没有索引到贡献指南

调研方向

This is a speculative MathOptInterface v2 planning tracker rather than a scoped task. Start by reading the relevant linked issues and the named files under src/Bridges, src/constraints.jl, and src/Utilities; select a specific proposal with maintainer agreement before working. Done is not defined until one proposal has an agreed scope and acceptance criteria.

由索引模型根据 Issue 内容生成。

评估

技术栈
julia
领域
backend-api-design
Issue 类型
重构
难度
5/5
预计耗时
一周以上
活跃度
停滞
描述清晰度
需要澄清
新手友好度
15/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。