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
):

whereas in the multivariate case you need (for positive definiteness on a set
):

where
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:
- To what extend is the assumption used in the solver itself?
- 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
Hi,
):

):

are polynomials.
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
whereas in the multivariate case you need (for positive definiteness on a set
where
So you really need the option to add a different number of Y blocks per constraint (
blocks_jcontains more than 2 elements).However, it seems like this is not supported at the moment. In the input format (the files
pvm2sdpgenerates from xml),blocks.iandbilinear_basis.iassume 2 blocks per constraint, and also during the reading of those files it is assumed (the part with parity insdpb/src/sdp_solve/SDP/SDP/read_bilinear_basis.cxxseems 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 fromblock_info; if that's the case, adding support for an arbitrary number of blocks might not be too difficult.This raises a few questions:
pvm2sdpand 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