Preface

Every engineer who has used an optimizer — typed fmincon into MATLAB, called scipy.optimize.minimize, watched IPOPT grind toward a solution — has encountered the product of roughly three centuries of mathematical labor without knowing it. The algorithm finds the minimum, prints the answer, and moves on. The history behind it stays invisible.

This book is an attempt to make that history visible.

The story of mathematical optimization is not a tidy sequence of breakthroughs. It is a tangle of competing motivations: natural philosophers wondering why light bends the way it does, engineers trying to minimize the weight of a bridge, economists trying to allocate scarce resources, military planners trying to supply an army. The mathematics emerged from all of these pressures at once, and the result — the modern toolkit of gradient descent, linear programming, interior point methods, and constrained nonlinear optimization — is richer for it.

The characters in this story are a strange collection. Joseph-Louis Lagrange, the Italian-born Frenchman who preferred algebra to geometry and gave us the multiplier. Augustin-Louis Cauchy, the most prolific mathematician of the nineteenth century, who invented steepest descent as a throwaway result in 1847 and never followed up on it. George Dantzig, who invented the simplex method on a dare in 1947 and spent decades watching it transform the global economy. Leonid Kantorovich, who independently discovered linear programming in Stalinist Russia, was nearly arrested for the implications, and eventually won the Nobel Prize in Economics. Narendra Karmarkar, a young Indian mathematician at Bell Labs who shocked the operations research world in 1984 with a polynomial-time algorithm for linear programming and became the subject of a legal dispute over intellectual property that would have been unthinkable in any previous mathematical era.

Each of these figures solved a version of the same problem: find the best. Best meaning smallest, or largest, or most efficient, or least costly, depending on who was asking and why. The diversity of applications is part of what makes optimization such a strange and powerful field. The same mathematical idea that tells a soap bubble how to minimize surface area also tells a logistics company how to route ten thousand packages, tells a rocket motor designer how to minimize propellant mass while meeting thrust and pressure constraints, and tells a neural network how to adjust millions of weights to classify images correctly.

The thread connecting all of these is the gradient — the direction of steepest improvement. Follow the gradient down and you find a minimum. Follow it up and you find a maximum. The art of optimization is knowing when following the gradient is enough, and when the terrain is complicated enough that you need something smarter.

This book follows that thread from its origins in seventeenth-century geometry to its present form in the algorithms running on today’s engineering workstations. It is written for engineers and applied mathematicians who use optimization tools and would like to understand where they came from — not as an archaeological curiosity, but because the history illuminates the ideas in ways that textbook derivations often don’t.

Each chapter includes Python demonstrations that show the algorithms working on small problems. In the HTML version, these are folded away by default — click “Show Python” to expand them. In the PDF version, they are omitted to keep the reading experience clean. The code is available in Appendix A.


The title comes from a phrase Leonid Kantorovich used in his Nobel lecture: “In search of the optimum, we find not just a number, but a structure.” He was talking about linear programming. The observation is general.