# Bounding Correlation Coefficients for Multiple Problems with JuMP

Hi this is a very elementary questions but I’m still trying to understand the code from this example for the correlation problem.

The example I am using is the bounding correlation coefficients problem from “Convex Optimization” by Boyd. (See Convex Optimization p.408 Ex. 8.3). Given the Correlation Coefficients of (1,2) , (1,3), (2,4) and (3,4) I am trying to solve for the min/max values of Correlation(1,4) and Correlation(2,3) in R4.

Because I am now solving 4 SDP’s instead of two SDP’s I modified the code from the Jump example. To do this I simply added an objective and ran optimize! two additional times in the following manner:

``````function example4_corr_sdp()
model = Model(SCS.Optimizer)
set_silent(model)
@variable(model, X[1:4, 1:4], PSD)
# Diagonal is 1s
@constraint(model, X[1, 1] == 1)
@constraint(model, X[2, 2] == 1)
@constraint(model, X[3, 3] == 1)
@constraint(model, X[4, 4] == 1)
# Bounds on the known correlations
@constraint(model, X[1, 2] >=  0.6)
@constraint(model, X[1, 2] <=  0.9)
@constraint(model, X[1, 3] >=  0.8)
@constraint(model, X[1, 3] <=  0.9)
@constraint(model, X[2, 4] >=  0.5)
@constraint(model, X[2, 4] <=  0.7)
@constraint(model, X[3, 4] >= -0.8)
@constraint(model, X[3, 4] <= -0.4)
# Find upper bound
@objective(model, Max, X[1, 4])
optimize!(model)
println("An upper bound for X[1, 4] is \$(value(X[1, 4]))")
@objective(model, Max, X[2, 3])
optimize!(model)
println("An upper bound for X[2, 3] is \$(value(X[2, 3]))")
# Find lower bound
@objective(model, Min, X[1, 4])
optimize!(model)
println("A lower bound for X[1, 4] is \$(value(X[1, 4]))")
@objective(model, Min, X[2, 3])
optimize!(model)
println("A lower bound for X[2, 3] is \$(value(X[2, 3]))")
return
end

``````

I receive the following output which is the correct answer for X[1,4] and what I assume to be the correct answer for X[2,3], although X[2,3] has not been verified.

`````` julia> example4_corr_sdp()
An upper bound for X[1, 4] is 0.22990770904303592
An upper bound for X[2, 3] is 0.5937251240363608
A lower bound for X[1, 4] is -0.39281984069804604
A lower bound for X[2, 3] is 7.756695268806519e-11
``````

I am just wondering if this is the correct approach to solving multiple SDP’s with the same constraints? Is there is a more efficient way to go about it? Also if there are any other elementary misunderstandings here I’d appreciate it if anyone could point me in the right direction thanks!

I don’t know what you mean by “added additional SDP,” but if all you are doing is changing the objective and re-solving, then yes, this is the right way to do it.