A
and b
are not scaled in-place in IndAffine
master
(or merged) then one of the Travis processes writes the compiled docs on the gh-pages
branch upon test completion
master
This means that we have to multiply all off-diagonal elements by 1/sqrt(2) before we treat the elements as elements of a matrix, i.e. in prox_naive
the line
X, v = prox_naive(f, Symmetric(X), gamma)
should be replaced by
#scale off-diagonal by 1/sqrt(2)
X, v = prox_naive(f, Symmetric(X), gamma)
#scale off-diagonal by sqrt(2)
or equivalently (more efficient), working with sqrt(2)*X and scaling back
for i = 1:n
X[i,i] .*= sqrt(2)
end
X, v = prox_naive(f, Symmetric(X), gamma)
for i = 1:n
X[i,i] ./= sqrt(2)
end
f
and input x
, compute f(x)
, y = prox(f, x)
(and gfx = gradient(f, x)
if defined) and verify that they satisfy some prescribed propertiesy
being equal to some point, f(x)
or f(y)
having some value
y
satisfying some optimality condition (approximately)
prox_test
and etc
f(prox(f,c)) == Inf
which is not good
I have used the following code for the ADMM lasso:
#Line search
c = 0.5
lr = 1.0
loss(z) = 0.5*norm(A*z-b)^2
grad = A'*(A*x-b)
while loss(z) > (loss(x) + grad'*(-x) + (1.0/(2.0*lr))*norm(-x)^2)
lr = lr * c
println(lr)
end
It seems to work, but I don't know if it is theoretically correct. It is based on the Armijo rule for projected gradient ideas in Bertsekas (2016).