  A central primitive in quantum tensor network simulations is the problem of
approximating a matrix product state with one of a lower bond dimension. This
problem forms the central bottleneck in algorithms for time evolution and for
contracting projected entangled pair states. We formulate a tangent-space based
variational algorithm to achieve this for uniform (infinite) matrix product
states. The algorithm exhibits a favourable scaling of the computational cost,
and we demonstrate its usefulness by several examples involving the
multiplication of a matrix product state with a matrix product operator.
