diff --git a/src/Orbit-wise.jl b/src/Orbit-wise.jl index cfbe766..91b83a7 100644 --- a/src/Orbit-wise.jl +++ b/src/Orbit-wise.jl @@ -127,24 +127,30 @@ function constrLHS(m::JuMP.Model, cnstr, Us, Ust, dims, vars, eps=100*eps(1.0)) return @expression(m, sum(vecdot(M[π], vars[π]) for π in 1:endof(Us))) end -function addconstraints!(m::JuMP.Model, data::OrbitData, l::Int=length(data.laplacian); var::Symbol = :λ) - λ = m[var] - Ust = [U' for U in data.Us] - for t in 1:l - # lhs = constrLHS(m, data, t) - lhs = constrLHS(m, data.cnstr[t], data.Us, Ust, data.dims, data.Ps) +function addconstraints!(m::JuMP.Model, data::OrbitData, l::Int=length(data.laplacian); var::Symbol=:λ) + λ = m[var] + Ust = [U' for U in data.Us] + idx = [π for π in 1:endof(data.Us) if size(data.Us[π],2) != 0] - d, d² = data.laplacian[t], data.laplacianSq[t] - if lhs == zero(lhs) - if d == 0 && d² == 0 - info("Detected empty constraint") - continue - else - warn("Adding unsatisfiable constraint!") - end - end - JuMP.@constraint(m, lhs == d² - λ*d) - end + for t in 1:l + if t % 100 == 0 + print(t, ", ") + end + # lhs = constrLHS(m, data, t) + lhs = constrLHS(m, data.cnstr[t], data.Us[idx], Ust[idx], data.dims[idx], data.Ps[idx]) + + d, d² = data.laplacian[t], data.laplacianSq[t] + # if lhs == zero(lhs) + # if d == 0 && d² == 0 + # info("Detected empty constraint") + # continue + # else + # warn("Adding unsatisfiable constraint!") + # end + # end + JuMP.@constraint(m, lhs == d² - λ*d) + end + println("") end function init_model(Uπs)