Coramin / Coramin

A collection of tools (classes, functions, etc.) for developing MINLP algorithms
https://github.com/coramin/coramin
Other
34 stars 14 forks source link

[CEP] Coramin Enhancement Proposal: Clearly distinguish between piecewise partitioning points and convex OA points #14

Closed michaelbynum closed 5 years ago

michaelbynum commented 5 years ago

As I was implementing a multivariate convex/concave relaxation, I realized that the partitioning points for a piecewise relaxation are fundamentally different from the points defining where outer-approximation cuts for convex constraints occur. The former define intervals, and the latter is simply a set of points - there are no intervals. This becomes important in multivariate relaxations because we don't want an independent list of points for each variable. Consider x**2 + y**2 + z**2 <= q. We may want a cuts at (x=1, y=-1, z=2.2) and (x=0, y=1, z=1). In this case, we just want two cuts. We do not want three lists of points:

x: [0, 1] y: [-1, 1] z: [1, 2.2]

If we store the data this way, then the only way to ensure we get the two cuts specified is to include cuts involving all 8 possible combinations of these points. In the context of piecewise constraints (e.g. McCormick relaxations of bilinear terms), it makes sense to have independent lists of points for each variable because that is how you define intervals.

I would like to completely separate these in BasePWRelaxationData. Currently, BasePWRelaxationData has a private attribute called _partitions which is a component map where the keys are the variables and the values are lists of points defining the piecewise intervals. I would like to add another attribute for tracking the points at which outer-approximation cuts should be defined.

michaelbynum commented 5 years ago

@carldlaird I would like you input on this when you have time.