NCTSSOS aims to provide a user-friendly and efficient tool for solving optimization problems with non-commutative/trace/state polynomials, which is based on the structured moment-SOHS hierarchy. To use NCTSSOS in Julia, run
pkg> add https://github.com/wangjie212/NCTSSOS| Documentation |
|---|
NCTSSOS has been tested on Ubuntu and Windows.
Taking the objective
@ncpolyvar x[1:2]
f = 2 - x[1]^2 + x[1]*x[2]^2*x[1] - x[2]^2
ineq = [4 - x[1]^2 - x[2]^2]
eq = [x[1]*x[2] + x[2]*x[1] - 2]
pop = [f; ineq; eq]
d = 2 # set the relaxation order
opt,data = ncpop(pop, x, d, numeq=1, obj="eigen")To solve higher steps of the NCTSSOS hierarchy, repeatedly run
opt,data = ncpop(data)Options:
obj: "eigen" by default (perform eigenvalue minimization), "trace" (perform trace minimization)
CS: "MF" by default, false (invalidating correlative sparsity exploitation)
TS: "block" by default (maximal chordal extension), "MD" (approximately smallest chordal extension), false (invalidating term sparsity iterations)
partition: specify that the first partition variables commute with the remaining variables
comm_var: specify that the first comm_var variables commute each other
constraint: nothing by default or "projection" (satisfying
Check out /examples/traceopt.jl.
Check out /examples/stateopt.jl.
[1] Exploiting Term Sparsity in Noncommutative Polynomial Optimization, 2021.
[2] Sparse polynomial optimization: theory and practice, 2023.
[3] State polynomials: positivity, optimization and nonlinear Bell inequalities, 2023.