Differentiation of conic programs with nonlinear parametric expressions
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Beginne damit, das Julia-MWE mit Clarabel auszuführen und es mit der Ipopt-Version zu vergleichen. Lies anschließend den über diff_model und optimize! erreichten Pfad zur Paramet differenzierung in DiffOpt. Als abgeschlossen gilt die Aufgabe, wenn nichtlineare Parameterausdrücke wie sin(θ) * x für konische Programme unterstützt werden und das bereitgestellte Beispiel erfolgreich differenziert werden kann.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
DiffOpt does not support differentiating a conic program if the problem's data depends nonlinearly from the parameters (e.g. if A(theta) x <= b(theta) with A(.) and b(.) given by nonlinear expressions).
Here is a simple MWE:
using JuMP
using Clarabel
using DiffOpt
model = DiffOpt.diff_model(Clarabel.Optimizer)
@variable(model, x >= 0)
@variable(model, θ ∈ MOI.Parameter(1.0))
@objective(model, Min, x)
@constraint(model, sin(θ) * x >= 1.0)
JuMP.optimize!(model)
If we replace Clarabel by Ipopt, the code works like a charm. But Clarabel works much better than Ipopt if the problem is conic.
We can use the chain-rule to differentiate the problem w.r.t. A instead of theta. However, I think it would be more intuitive to support nonlinear expressions depending on the parameters in DiffOpt. What do you think?
- Vorherrschende Sprache
- Julia
- Sterne
- 146
- Forks
- 21
- Ø Merge
- 1 Std. 25 Min.
- Gemergte PRs (30 T.)
- 2
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus jump-dev/DiffOpt.jl
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
jump-dev/DiffOpt.jl#362 · 1 Kommentar ·
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
jump-dev/DiffOpt.jl#358 · 2 Kommentare ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
jump-dev/DiffOpt.jl#348 ·
-
good first issue
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
jump-dev/DiffOpt.jl#336 · 4 Kommentare ·
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
jump-dev/DiffOpt.jl#318 · 1 Kommentar ·
Alle Issues in jump-dev/DiffOpt.jl
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
OpenSourceAWE/SymbolicAWEModels.jl#431 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
EnzymeAD/Reactant.jl#3549 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
WaterLily-jl/WaterLily-Examples#46 · 1 Kommentar ·