Array input arguments in nonlinear expressions
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
Direzione di ricerca
Iniziare con GenericNonlinearExpr, MOI.(Scalar,Vector)NonlinearFunction, MOI.Nonlinear e le strutture proposte Node ed Expression descritte nell’issue. Esaminare come vengono attualmente rappresentate le espressioni non lineari scalari e le loro derivate, quindi determinare come dovrebbero essere rappresentati e differenziati gli input di tipo array e matrice. Il lavoro è completato quando il design e l’implementazione supportano esempi come norm(x, p) e log_det(X), con test che coprano le relative derivate.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- Julia
- Stelle
- 506
- Fork
- 103
- Merge medio
- 1g 10m
- PR unite (30g)
- 12
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di jump-dev/MathOptInterface.jl
-
[Bridges] MultirowChange in set_map.jl drops zero coefficientsForse già presa @odow l’ha presa 6 giorni fa. Aperta
jump-dev/MathOptInterface.jl#3106 · 2 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Precision loss in Hessian computationForse già presa @blegat l’ha presa 6 giorni fa. Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
jump-dev/MathOptInterface.jl#3104 · 11 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Layer instantiatorAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
jump-dev/MathOptInterface.jl#2986 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
jump-dev/MathOptInterface.jl#2969 · 2 commenti · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Add Batched{S} setApertaType: Set Request
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
jump-dev/MathOptInterface.jl#2904 · 15 commenti · 7 reazioni ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di jump-dev/MathOptInterface.jl
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
OpenSourceAWE/SymbolicAWEModels.jl#431 ·
I maintainer di solito rispondono entro 1 giorno
-
Make PDAQP an optional extraAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
EnzymeAD/Reactant.jl#3549 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
WaterLily-jl/WaterLily-Examples#46 · 1 commento ·