Mathematical optimization algorithms are used to solve a wide variety of decision-making tasks. The design of optimization algorithms often requires substantial theoretical insights or algorithmic engineering, both of which are manual, tedious tasks. This course introduces automated machine learning approaches for improving optimization algorithms in the presence of a historical dataset or a generator of problem instances from a domain of interest. Topics include automated algorithm configuration, modeling iterative heuristics in the reinforcement learning framework, deep neural networks for modeling combinatorial optimization problems, guiding exact solvers with learned search strategies, learning-theoretic guarantees, and benchmarking/computational considerations. The focus will be on discrete optimization in the integer programming framework, both exact and heuristic. Knowledge of integer programming, algorithm design, machine learning, and programming are required, while knowledge of deep learning is helpful.