set programming with jump · benoît legat*, in collaboration with: raphaël m. jungers*, pablo a....

19
Set Programming with JuMP Benoît Legat * , In collaboration with: Raphaël M. Jungers * , Pablo A. Parrilo and Paulo Tabuada * UCLouvain, MIT, UCLA

Upload: others

Post on 16-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Set Programming with JuMP

Benoît Legat∗, In collaboration with: Raphaël M. Jungers∗, Pablo A.Parrilo† and Paulo Tabuada‡

∗ UCLouvain, † MIT, ‡ UCLA

Page 2: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Set program

Set inclusionConsider two sets S ⊆ Rn,T ⊆ Rm, matrices A ∈ Rr×n,B ∈ Rr×m:

AS ⊆ BT .

Set programGiven fixed sets Ti , find sets Si :

maxSi ,xi

f (vol(S1), . . . , vol(Sn))

AjSaj ⊆ BjSbj

Si ⊆ Ti

xcj ∈ Sdj

1

Page 3: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Stability of Hybrid Systems

Instability may be certified using a low-rank infeasibility certificate.

See presentation at 19th ACM International Conference on HybridSystems: Computation and Control, (HSCC), 2016. 2

Page 4: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Information Theory

See presentation at 37rd Symposium on Information Theory in theBenelux, 2016.

3

Page 5: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Safe Model Predictive Control

v0 v1 v2

d1 d215.6

See presentation at IFAC Conference on Analysis and Design ofHybrid Systems (ADHS), 2018.

4

Page 6: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Safe Stochastic Programming

See presentation at 23rd International Symposium on MathematicalProgramming (ISMP), 2018.

5

Page 7: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Example with ellipsoids: Model

Maximal volume ellipsoid (determinant):

Maximal sum of the squares of the semi-axes of the ellipsoid(trace):

@objective(model, Max,L1_heuristic(volume(S), [1.0, 1.0]))

6

Page 8: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Example with ellipsoids: Primal Solution

7

Page 9: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Example with ellipsoids: Polar Solution

8

Page 10: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Example with polynomial sublevel set: Model

@variable(model, S, PolySet(degree=d, convex=true,symmetric=true))

Use L1 norm as volume heuristic.

9

Page 11: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Example with polynomial sublevel set: Primal Solution

10

Page 12: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Example with polynomial sublevel set: Polar Solution

11

Page 13: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Set variables

function JuMP.build_variable(_error, info::JuMP.VariableInfo, set::AbstractSetVariable)if !info.has_lb && !info.has_ub && !info.has_fix &&

!info.binary && !info.integer && !info.has_start_error(...)

endreturn set

endfunction JuMP.add_variable(

model::JuMP.AbstractModel, set::AbstractSetVariable,name::String)vref = SetVariableRef(...)push!(data(model).variables, vref)return vref

end 12

Page 14: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Parsing set constraints

13

Page 15: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Store set constraints

function JuMP.build_constraint(_error::Function, subset, sup_powerset::PowerSet;kws...)InclusionConstraint(subset, sup_powerset.set, kws)

endfunction JuMP.add_constraint(

model::JuMP.Model, constraint::SetConstraint,name::String="")d = data(model)index = ConstraintIndex(d.last_index += 1)d.constraints[index] = constraintd.names[index] = namereturn JuMP.ConstraintRef(model, index, SetShape())

end14

Page 16: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Optimize hook

create_spaces: Find dimensions and representation (e.g.polar/dual or not)

function optimize_hook(model::JuMP.AbstractModel)d = data(model)clear_spaces(d)create_spaces(d)load(model, d)JuMP.optimize!(model, ignore_optimize_hook = true)

end

15

Page 17: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Load set constraints

S-procedure:

Q ⊆ P

x>Qx ≤ 1⇒ x>Px ≤ 1

x>Px ≤ x>Qx ∀xQ − P is PSD

function JuMP.build_constraint(_error::Function, subset::Ellipsoid,sup_powerset::PowerSet{<:Ellipsoid})Q = subset.QP = sup_powerset.set.QJuMP.build_constraint(_error, Symmetric(Q - P),

PSDCone())end

16

Page 18: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Polar inclusion

function JuMP.build_constraint(_error::Function, subset::Sets.Polar,sup_powerset::PowerSet{<:Sets.Polar})S = subsetT = sup_powerset.setJuMP.build_constraint(

_error, Sets.polar(T), PowerSet(Sets.polar(S)))end

function JuMP.build_constraint(_error::Function, subset::Sets.Polar,sup_powerset::PowerSet{<:Polyhedra.HalfSpace})point = sup_powerset.set.a / sup_powerset.set.bJuMP.build_constraint(_error, point, Sets.polar(subset))

end 17

Page 19: Set Programming with JuMP · Benoît Legat*, In collaboration with: Raphaël M. Jungers*, Pablo A. Parrilo and Paulo Tabuada Created Date: 3/28/2019 3:24:43 PM

Future work

• Rely on MathematicalSets to represent sets.

• Polyhedra solver (CDD, LazySets, ...)

• Direction objective: Ellipsoid (SDP), polynomial (SOS),polyhedra (SDDP).

18