Skip to content

Using a varying number of blocks per constraint #47

Description

@nanleij

Hi,
I'm working on extending the (univariate) PMP to the multivariate setting, hopefully with SDPB as solver. A lot stays similar, the most important change is that you need more blocks per constraint, and the number of blocks can vary between constraints.
I.e, in the univariate case you have (for positve definiteness on a set equation):
equation
whereas in the multivariate case you need (for positive definiteness on a set equation):
equation
where equation are polynomials.
So you really need the option to add a different number of Y blocks per constraint (blocks_j contains more than 2 elements).

However, it seems like this is not supported at the moment. In the input format (the files pvm2sdp generates from xml), blocks.i and bilinear_basis.i assume 2 blocks per constraint, and also during the reading of those files it is assumed (the part with parity in sdpb/src/sdp_solve/SDP/SDP/read_bilinear_basis.cxx seems to have to do with whether it is the first or second block of a constraint). In most computations, it looks like the information about the blocks comes from block_info; if that's the case, adding support for an arbitrary number of blocks might not be too difficult.

This raises a few questions:

  1. To what extend is the assumption used in the solver itself?
  2. Can it be implemented in the (near) future? A problem might be the input format. Not only the reading would have to change, but also writing the input by pvm2sdp and so on, as well as the wrappers. An idea would be to add an extra option for a slightly different input format, allowing for multiple blocks, while keeping 2 blocks per constraint as the default. Or an extra input file specifying the number of blocks per constraint, with 2 blocks per constraint as the default when that file is not found.

If it will be low on your priority list and the assumption is not very wide spread, I might give it a try myself. In that case, any advice would be appreciated (also because I only know the basics of programming in C++)!

EDIT: added the ^n for the multivariate setting

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions