The Citi Bike system in New York City has approximately 466 stations, 6074 bikes, and 15777 docks. We wish to optimize both bike and dock allocations for each station at the beginning of the day, so that the expected number of customers who cannot find a bike, or cannot find a dock to return a bike, is minimized. With a system of this scale, traditional simulation optimization methods such as stochastic gradient-search and random search are inefficient. We propose a variety of more efficient gradient-like heuristic methods that can improve any given allocation based on a discrete-event simulation model of the system. The methods are tested on data from December 2015 with different starting solutions obtained from other models. We further explore the relationship between the system behaviors during the morning and afternoon rush hours by comparing optimal solutions when the problem is restricted to these two periods.