jump-dev / jump-dev/DiffOpt.jl
Differentiation of conic programs with nonlinear parametric expressions
- 主要语言
- Julia
- 星标
- 145
- 派生
- 21
- PR 合并指标
- 30 天内没有已合并 PR
描述
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:
```julia
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?
贡献指南
这个仓库没有索引到贡献指南
调研方向
Start by running the Julia MWE with Clarabel and compare it with the Ipopt version, then read the DiffOpt parameter-differentiation path reached through diff_model and optimize!. Done means nonlinear parameter expressions such as sin(θ) * x are supported for conic programs and the supplied example differentiates successfully.
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- julia
- 领域
- backend
- Issue 类型
- 功能
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100