Skip to content

Commit a6e7a0c

Browse files
committed
adds NonlinearizeBridge for objectives
1 parent 0e52dcb commit a6e7a0c

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/Bridges/Objective/Objective.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ The coefficient type used is `T`.
2828
function add_all_bridges(model, ::Type{T}) where {T}
2929
MOI.Bridges.add_bridge(model, FunctionizeBridge{T})
3030
MOI.Bridges.add_bridge(model, QuadratizeBridge{T})
31+
MOI.Bridges.add_bridge(model, NonlinearizeBridge{T})
3132
MOI.Bridges.add_bridge(model, SlackBridge{T})
3233
MOI.Bridges.add_bridge(model, VectorFunctionizeBridge{T})
3334
MOI.Bridges.add_bridge(model, VectorSlackBridge{T})

src/Bridges/Objective/bridges/FunctionConversionBridge.jl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,34 @@ const QuadratizeBridge{T,G} =
173173
const Quadratize{T,OT<:MOI.ModelLike} =
174174
SingleBridgeOptimizer{QuadratizeBridge{T},OT}
175175

176+
"""
177+
NonlinearizeBridge{T,G} <: FunctionConversionBridge{T,MOI.ScalarNonlinearFunction,G}
178+
179+
`NonlinearizeBridge` implements the following reformulations:
180+
181+
* ``\\min\\{x^\\top \\mathbf{𝑄} x + a^\\top x + b\\}`` into ``\\min\\{f(x)\\}``
182+
* ``\\max\\{x^\\top \\mathbf{𝑄} x + a^\\top x + b\\}`` into ``\\max\\{f(x)\\}``
183+
184+
where `f(x)` is a `MOI.ScalarNonlinearFunction`.
185+
186+
## Source node
187+
188+
`NonlinearizeBridge` supports:
189+
190+
* [`MOI.ObjectiveFunction{G}`](@ref)
191+
192+
## Target nodes
193+
194+
`NonlinearizeBridge` creates:
195+
196+
* One objective node: [`MOI.ObjectiveFunction{MOI.ScalarNonlinearFunction}`](@ref)
197+
"""
198+
const NonlinearizeBridge{T,G} =
199+
FunctionConversionBridge{T,MOI.ScalarNonlinearFunction,G}
200+
201+
const Nonlinearize{T,OT<:MOI.ModelLike} =
202+
SingleBridgeOptimizer{NonlinearizeBridge{T},OT}
203+
176204
"""
177205
VectorFunctionizeBridge{T,G} <: FunctionConversionBridge{T,MOI.VectorAffineFunction{T},G}
178206

0 commit comments

Comments
 (0)