-
Notifications
You must be signed in to change notification settings - Fork 98
Description
There is a bug in Bridges/Constraints/soc_to_psd.jl at line 19: https://github.com/JuliaOpt/MathOptInterface.jl/blob/f5a10367c70aad3ff26adc062462498d0da41cec/src/Bridges/Constraint/soc_to_psd.jl#L19
Here the constant vector for the resultant VAF was not filled in correctly. It seems that the constants from input VAF f was directly written into the beginning of this vector, rather than going into the entries corresponding to the vectorised matrix using trimap. For this part the code perhaps should be
constant = zeros(T, n)
for i in 1:dim
constant[trimap(i,1)] = f.constants[i]
endA non-working example would be
using SCS
using MathOptInterface
MOI = MathOptInterface
MOIU = MathOptInterface.Utilities
MOIU.@model(ModelData, (), (),
(MOI.Zeros, MOI.Nonnegatives, MOI.SecondOrderCone,
MOI.ExponentialCone, MOI.PositiveSemidefiniteConeTriangle),
(), (), (), (), (MOI.VectorAffineFunction,));
x = MOI.add_variables(MOIU.CachingOptimizer(MOIU.UniversalFallback(ModelData{Float64}()), SCS.Optimizer()), 3);
Fterms = MOI.ScalarAffineTerm.([0., 0., 0.], x);
F = MOI.VectorAffineFunction(MOI.VectorAffineTerm.([1, 2, 3], Fterms), [1., 2., 3.]);
g = MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([0., 0., 0.], x), 4.);
psd_constr = MOI.Bridges._SOCtoPSDaff(F, g);
psd_constr.constantsSo the constants in the output VAF should be a vector representation of the upper triangular part of
when every entry is labelled vertically. However, the output VAF has a constant vector [1.0, 2.0, 4.0, 0.0, 0.0, 4.0] where the expected return would be [1.0, 2.0, 4.0, 3.0, 0.0, 4.0]. In fact the original code would be correct if trimap labelled the entries horizontally instead.