# Reading List for my Research Group

In this post I collect a list of books that I recommend for getting up to speed on the most common types of math and optimization used in my research.

The first three sections are most directly related to my research. After that I give some suggestions on general CS, math, and programming background.

## Optimization

The following are my two favorite resources for getting started on various aspects of optimization:

• Introduction to Linear Optimization by Bertsimas and Tsitsiklis. Great starting point. Most other optimization topics rely on linear optimization results covered here. Chapters 1,2, and 4 are most important.
• Convex Optimization by Boyd and Vandenberghe. An excellent book for getting started with more general convex optimization. Chapters 2-5, 9, and 10.

The following are more advanced and/or specialized books:

• Optimization by Vector Space Methods by Luenberger. This book is a classic for a more abstract treatment of optimization. Chapter 8 is my favorite coverage of convex duality in vector spaces.
• A Modern Introduction to Online Learning by Orabona. Excellent coverage of contemporary (circa 2019) online learning.
• Lectures on Modern Convex Optimization by Nemirovski. Comprehensive treatment of topics such as conic programming, SDPs, interior point methods, and mirror descent/mirror prox-type algorithms. I reopen Chapter 5 of these lecture notes on a yearly basis for various papers.
• Fundamentals of Convex Analysis by Hiriart-Urruty and LemarĂ©chal. A nice text for a more mathy treatment of convex analysis.
• First-Order Methods in Optimization by Amir Beck. This is a good source for things like proximal algorithms and ADMM. Only recommended if you’re directly interested in these types of algorithms.

## Game Theory Foundations

The AGT book has excellent introductions to many areas of game theory, targeted at computer scientists.

If one is interested in auction theory, then the following book is a good starting point:

The following are useful but slightly more topical in nature:

## Probability Theory

While not of primary importance in my research, I sometimes find myself needing to use concentration inequalities under various assumptions. When that happens, I consult the below resources.

• Wikipedia This gives a nice overview of quite a few of the most useful concentration inequalities
• Concentration Inequalities by Boucheron, Lugosi, and Bousquet. When Wikipedia fails you, this short text can sometimes be of help.

## Linear Algebra and Other Math

It is a truth universally acknowledged, that a researcher in possession of a good problem, must be in want of linear algebra.

• Numerical Linear Algebra by Trefethen and Bau III. This books is great for building linear algebra intuition. Read and reread parts I, II, and V. Factorizations such as QR and SVD are incredibly helpful in understanding problems in machine learning, optimization, AI, statistics, etc.

• The Cauchy-Schwarz Master Class: An Introduction to the Art of Mathematical Inequalities by J. Michael Steele. This book helps develop problem-solving skills, and having a strong grasp of Cauchy-Schwarz, AM-GM, etc is very valuable. This is my favorite book for seeing the fun side of math. Not as important as other books listed here, from a strict foundations perspective.

## Computer Science Foundations

• Algorithm Design by Kleinberg and Tardos. Being able to recognize when a problem is NP-hard, and proving it, is an important skill when working on combinatorial problems; even if one does applied research! For example, it tells you when you need to think about integer-programming rather than convex optimization.

## Programming Skills

The following pieces of numerical software provide a good foundation that enables most research that I do. It’s all based on a python stack. A reasonable alternative is julia with the incredible JuMP package for mathematical optimization. Just beware that python is more likely to be used in industry.

• numpy A general familiarity with numpy and scipy is extremely useful for running simulations, testing hypotheses, or implementing algorithms. I recommend installing via the anaconda distribution.

• CVXPY. CVXPY is great for easily constructing mathematical programs and solving them with a variety of solvers.

• Gurobi get a free academic license and install this as a backend to CVXPY. It’s the best way to solve linear programs and mixed-integer programs.

• Mosek get a free academic license and install this as a backend to CVXPY. It’s the best way to solve certain conic programs, such as those for computing market equilibria.

It’s also important to be able to do data analysis/plotting. For those purposes Pandas and seaborn are good python packages. That said, the R tidyverse is incredibly good for data analysis. I find it much more enjoyable to work with than python. If you’re willing to learn two languages, I recommend: