jump-dev / jump-dev/DiffOpt.jl

Differentiation of conic programs with nonlinear parametric expressions

未关闭
#331 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
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

把新 issue 发到你的邮箱

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