Learning to Optimize Combinatorial Functions