algorithms for optimization mykel kochenderfer