Balancing bike sharing systems with constraint programming