New to julia and this discussion group so I’m sorry if this is not a typical discussion topic or if I am breaching any norms here. I will do my best to pick up on things as I go.
In “Convex Optimization” by Boyd there is an example of bounding correlation coefficients. (See Convex Optimization p.408 Ex. 8.3) I tried solving this example with Julia using JuMP and the code provided in The Correlation Problem tutorial.
While the optimizer returns the correct minimum value, the maximum value returned is not the lowest upper bound. The code returns a maximum value of 1, whereas the books lists the maximum value as .23. I think the book is correct because Joelle Skaf posted a solution to the same problem solved with Mosek also received .23 as the sup. Just wondering if anyone had any insights as to why the code is not returning the correct upper bound.
This is the code I used. Again aside from changing the parameters and variables, the code was taken directly from the Correlation Problem tutorial on the Jump website.
function example_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]))")
# Find lower bound
@objective(model, Min, X[1, 4])
optimize!(model)
println("A lower bound for X[1, 4] is $(value(X[1, 4]))")
return
end
example_corr_sdp()
and this is the output I received:
julia> example_corr_sdp()
An upper bound for X[1, 4] is 0.9999999984486035
A lower bound for X[1, 4] is -0.392820503716742
Again the correct upper bound should be around .23. Any thoughts on what I am doing wrong would be very much appreciated. Thank you.