Exemplo n.º 1
0
def nuc_al(I, X, turn, epsilon=.1, quiet=False):

	m,K = np.shape(X)


	if not turn:
		V = cp.variable(m,K, name='V')
		U = X

	else:
		V = X
		U = cp.variable(m,K, name='U')

	f_cost = cp.parameter(name='f_cost')
	f_cost.value = 0

	J = cp.parameter(K,K, name='J')
	J.value = cp.zeros((K,K))


	# define the cost parameter
	for k in range(K):
		# create a list of interferer indeces Ik
		# from the interference set I
		Ik = np.arange(1,K+1)*I[k,:]	# careful about zero indexing...
		Ik = Ik[Ik>0] - 1
		#print 'I_%d = ' % k, Ik
		if len(Ik) > 0:
			for l in Ik:
				l = int(l)
				J[k,l] = U[:,k].T*V[:,l]	# interference terms
			f_cost = f_cost + cp.nuclear_norm(J[k,:])
			#f_cost = f_cost + cp.norm1(J[k,:])

	# create constraints
	constraints = []
	for k in range(K):
		c = cp.geq(U[:,k].T*V[:,k], epsilon)
		#c = cp.geq(cp.lambda_min(U[:,k].T*V[:,k]), epsilon)
		constraints.append(c)

	p = cp.program(cp.minimize(f_cost), constraints)
	print 'minimize: ', p.objective
	print 'subject to:'
	print p.constraints
	p.solve(quiet)

	if not turn:
		return V.value
	else:
		return U.value
Exemplo n.º 2
0
def nuc_al(I, X, turn, epsilon=.1, quiet=False):

    m, K = np.shape(X)

    if not turn:
        V = cp.variable(m, K, name='V')
        U = X

    else:
        V = X
        U = cp.variable(m, K, name='U')

    f_cost = cp.parameter(name='f_cost')
    f_cost.value = 0

    J = cp.parameter(K, K, name='J')
    J.value = cp.zeros((K, K))

    # define the cost parameter
    for k in range(K):
        # create a list of interferer indeces Ik
        # from the interference set I
        Ik = np.arange(1, K + 1) * I[k, :]  # careful about zero indexing...
        Ik = Ik[Ik > 0] - 1
        #print 'I_%d = ' % k, Ik
        if len(Ik) > 0:
            for l in Ik:
                l = int(l)
                J[k, l] = U[:, k].T * V[:, l]  # interference terms
            f_cost = f_cost + cp.nuclear_norm(J[k, :])
            #f_cost = f_cost + cp.norm1(J[k,:])

    # create constraints
    constraints = []
    for k in range(K):
        c = cp.geq(U[:, k].T * V[:, k], epsilon)
        #c = cp.geq(cp.lambda_min(U[:,k].T*V[:,k]), epsilon)
        constraints.append(c)

    p = cp.program(cp.minimize(f_cost), constraints)
    print 'minimize: ', p.objective
    print 'subject to:'
    print p.constraints
    p.solve(quiet)

    if not turn:
        return V.value
    else:
        return U.value
Exemplo n.º 3
0
import cvxpy as cp
import numpy as np

I = np.random.randn(10,10) > .4
I[np.diag_indices_from(I)] = 0
K = np.shape(I)[0]

X = cp.variable(K,K, name='X')
const = []
for i in range(K):
	for j in range(K):
		if I[i,j] > 0:
			c = cp.equals(X[i,j],0)
			const.append(c)
c = cp.equals(cp.diag(X),1)
const.append(c)

p = cp.program(cp.minimize(cp.nuclear_norm(X)), const)
p.solve(quiet=False)
print X.value
Exemplo n.º 4
0
import cvxpy as cp
import numpy as np

I = np.random.randn(10, 10) > .4
I[np.diag_indices_from(I)] = 0
K = np.shape(I)[0]

X = cp.variable(K, K, name='X')
const = []
for i in range(K):
    for j in range(K):
        if I[i, j] > 0:
            c = cp.equals(X[i, j], 0)
            const.append(c)
c = cp.equals(cp.diag(X), 1)
const.append(c)

p = cp.program(cp.minimize(cp.nuclear_norm(X)), const)
p.solve(quiet=False)
print X.value