Array input arguments in nonlinear expressions
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
GenericNonlinearExpr、MOI.(Scalar,Vector)NonlinearFunction、MOI.Nonlinear、および issue で説明されている提案中の Node 構造体と Expression 構造体から始めます。現在、スカラー非線形式とその微分がどのように表現されているかを追跡し、その後、配列および行列の入力をどのように表現し、微分すべきかを決定します。norm(x, p) や log_det(X) のような例を設計と実装がサポートし、それらの微分を対象とするテストが含まれていれば完了です。
索引モデルが issue の本文から書いたものです。
説明
Context: Yesterday I had a chat to @rluce about nonlinear expressions, particularly as they relate to Gurobi's upcoming nonlinear interface. We broadly agree on scalar nonlinear functions, and he had some preliminary ideas for vector-inputs.
cc @ccoffrin and @chriscoey for thoughts.
Our ultimate goal is to support examples like the following:
using JuMP, Ipopt
model = Model(Ipopt.Optimizer)
@variable(model, x[1:2, 1:2])
@objective(model, Max, log(det(X)))
# or perhaps the easier to manage;
@objective(model, Max, log_det(X))
using JuMP, Ipopt
model = Model(Ipopt.Optimizer)
@variable(model, x[1:3] >= 1)
p = 2
@objective(model, Min, norm(x, p))
Another key consumer of this would be https://github.com/jump-dev/MiniZinc.jl.
Changes required in JuMP
- We'd need to support
ArrayinGenericNonlinearExprand their mapping tomoi_function. This seems pretty easy.
Changes required in MOI
- We'd need to support
ArrayinMOI.(Scalar,Vector)NonlinearFunction. This seems pretty easy. - We'd need to support
ArrayinMOI.Nonlinearand be able to compute derivatives, etc.
The tricky part is all in 2.
We'd likely need some sort of Node(NODE_VECTOR, parent, n).
But matrices are a bit more complicated. We'd need to encode (rows, cols). One option would be to store the size as a packed value::Int64. That'd mean that we couldn't have matrices with side dimension greater than typemax(Int32)... but that seems okay.
encode(m::Int64, n::Int64) = encode(Int32(m), Int32(n))
encode(m::Int32, n::Int32) = reinterpret(Int64, (m, n))
decode(x::Int64) = Int64.(reinterpret(Tuple{Int32,Int32}, x))
norm(x) would look something like:
expr = Expression(
[
Node(NODE_CALL_MULTIVARIATE, -1, OP_NORM ),
Node(NODE_ARRAY, 1, 3 #= encode(3, 0) =#),
Node(NODE_VARIABLE, 2, 1 #= x1 =# ),
Node(NODE_VARIABLE, 2, 2 #= x2 =# ),
Node(NODE_VARIABLE, 2, 3 #= x3 =# ),
],
[],
);
log_det(X) would then look something like:
expr = Expression(
[
Node(NODE_CALL_MULTIVARIATE, -1, OP_LOGDET ),
Node(NODE_ARRAY, 1, 8589934594 #= encode(2, 2) =#),
Node(NODE_VARIABLE, 2, 1 #= x11 =# ),
Node(NODE_VARIABLE, 2, 2 #= x21 =# ),
Node(NODE_VARIABLE, 2, 2 #= x12 =# ),
Node(NODE_VARIABLE, 2, 3 #= x22 =# ),
],
[],
);
Once you have the data structure, it seems to me that the AD should follow fairly well.
Output arguments
Still absolutely no idea.
- 主要言語
- Julia
- スター
- 506
- フォーク
- 103
- 平均マージ
- 1日 1時間
- マージ済み PR(30日)
- 9
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
jump-dev/MathOptInterface.jl のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
jump-dev/MathOptInterface.jl#3113 ·
メンテナーはふだん 1 日以内に返信
-
[Bridges] MultirowChange in set_map.jl drops zero coefficients対応中かも @odow が 7 日前に担当しました。 オープン
jump-dev/MathOptInterface.jl#3106 · コメント 2 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
Precision loss in Hessian computation対応中かも @blegat が 7 日前に担当しました。 オープン
難易度 5/5 1週間以上 初心者へのやさしさ 15/100
jump-dev/MathOptInterface.jl#3104 · コメント 11 件 ·
メンテナーはふだん 1 日以内に返信
-
Layer instantiatorオープン
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
jump-dev/MathOptInterface.jl#2986 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
jump-dev/MathOptInterface.jl#2969 · コメント 2 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
jump-dev/MathOptInterface.jl の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 76/100
-
documentation model-weights
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
FluxML/Metalhead.jl#311 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 83/100
JuliaMath/Polynomials.jl#647 ·
-
reactant ☣
難易度 2/5 1〜3時間 初心者へのやさしさ 79/100
NumericalEarth/Breeze.jl#1110 ·
メンテナーはふだん 1 日以内に返信