1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
# The equality constrained analytical centering example of section 9.1
# (Problems with nonlinear objectives).
from cvxopt import matrix, spmatrix, spdiag, log, normal, uniform
from cvxopt import blas, solvers
def acent(A, b):
# Returns the solution of
#
# minimize -sum log(x)
# subject to A*x = b
m, n = A.size
def F(x=None, z=None):
if x is None: return 0, matrix(1.0, (n,1))
if min(x) <= 0.0: return None
f = -sum(log(x))
Df = -(x**-1).T
if z is None: return matrix(f), Df
H = spdiag(z[0] * x**-2)
return f, Df, H
return solvers.cp(F, A=A, b=b)['x']
# Randomly generate a feasible problem
m, n = 50, 500
y = normal(m,1)
# Random A with A'*y > 0.
s = uniform(n,1)
A = normal(m,n)
r = s - A.T * y
# A = A - (1/y'*y) * y*r'
blas.ger(y, r, A, alpha = 1.0/blas.dot(y,y))
# Random feasible x > 0.
x = uniform(n,1)
b = A*x
x = acent(A,b)
|