This document discusses optimization of objects and systems. It defines optimization as making something as fully perfect by finding alternative solutions to problems. It discusses how optimization is used everyday consciously or subconsciously to reach the best possible outcome with available resources. The document outlines different types of optimization problems including linear and nonlinear, single and multi-objective, constrained and unconstrained. It also discusses analytical and numerical optimization methods, including those with and without derivatives like the complex method, flexible tolerance method, and hillclimb method. Numerical methods are useful for problems that cannot be solved analytically. The document concludes with discussing methods that use first and second derivatives like Newton's method and sequential quadratic programming methods.