def solve(cols, W, penalty, par, parvalue): P = len(cols) N = len(cols[0]) norm = eval("norm" + penalty) normFUN = eval("n" + penalty) normQX = 0.0 SUMDIFF = 0.0 X = matrix([list(x) for x in cols], (N * P, 1)) alpha = optvar("alpha", N * P) PARAM = float(parvalue) for i in range(N): for j in range(i + 1, N): w = W[i][j] q = matrix(0.0, (1, N)) q[i] = 1 q[j] = -1 Qij = getQij(q, P) SUMDIFF += norm(Qij * alpha) * w xidiff = [cols[k][i] - cols[k][j] for k in range(P)] normQX += normFUN(xidiff) * w from cvxmod.atoms import sum, square ## TDH alternate parameterization ##penalty_norm = 1.0/float(N*(N-1)) ##SUMDIFF *= penalty_norm ##normQX *= penalty_norm ##error=(0.5/N)*sum(square(X-alpha)) error = 0.5 * sum(square(X - alpha)) problems = { "lambda": (error + PARAM * SUMDIFF, []), "s": (error, [SUMDIFF * (1 / normQX) <= PARAM]), } tomin, constraint = problems[par] p = problem(minimize(tomin), constraint) p.solve() return alpha
def solve(cols,W,penalty,par,parvalue): P=len(cols) N=len(cols[0]) norm=eval("norm"+penalty) normFUN=eval("n"+penalty) normQX=0.0 SUMDIFF=0.0 X=matrix([list(x) for x in cols],(N*P,1)) alpha=optvar("alpha",N*P) PARAM=float(parvalue) for i in range(N): for j in range(i+1,N): w=W[i][j] q=matrix(0.0,(1,N)) q[i]=1 q[j]=-1 Qij=getQij(q,P) SUMDIFF+= norm(Qij*alpha)*w xidiff=[cols[k][i]-cols[k][j] for k in range(P)] normQX += normFUN(xidiff)*w from cvxmod.atoms import sum,square ## TDH alternate parameterization ##penalty_norm = 1.0/float(N*(N-1)) ##SUMDIFF *= penalty_norm ##normQX *= penalty_norm ##error=(0.5/N)*sum(square(X-alpha)) error=0.5*sum(square(X-alpha)) problems={ "lambda":(error+PARAM*SUMDIFF,[]), "s":(error,[SUMDIFF*(1/normQX) <= PARAM]), } tomin,constraint=problems[par] p=problem(minimize(tomin),constraint) p.solve() return alpha
def n1(V): return sum([abs(x) for x in V])
def sum_squares(V): return sum([x**2 for x in V])