# 0 to optimization in 10 steps

This guide serves as a medium-length approach to developing an understanding of how to perform multidisciplinary design optimization (MDO) assuming no prior knowledge of MDO.
We assume that you have college-level training in engineering concepts, including differential equations, Python programming, and basic numerical methods.
Additionally, most all of the examples use OpenMDAO, so having experience with it or going through the documentation is beneficial.

Also, step 10 could arguably come first as it might inform how you set up the filesystem for these models and optimizations.


1) Building uncoupled feed forward models
	1) [](../ModelConstruction/understanding_xdsm_diagrams)
	2) [](../ModelConstruction/using_groups_to_organize_models)
	3) [](../ModelConstruction/connecting_vs_promoting)
	4) [](../ModelConstruction/using_n2)
2) Problem formulation
	1) [](../Optimization/basic_opt_problem_formulation)
	2) [](../Optimization/multiobjective)
3) Simple gradient-free opt
	1) [](../Optimization/when_to_use_gradient_free_methods)
	2) [](../Optimization/types_of_gradient_free_methods)
4) Get partial derivatives
	1) [](../Differentiation/brief_intro_to_derivs)
	2) [](../Differentiation/common_ways_to_compute_derivatives)
5) Gradient-based opt
	1) [[Why to use gradient-based optimizers]]
	2) [[Types of gradient-based optimizers]]
6) Building coupled models
	1) [](../ModelConstruction/explicit_vs_implicit)
	2) [[Fixed point iterators vs Newton]]
7) [[Gradient-free multidisciplinary optimization]]
8) Total derivatives for coupled models
	1) [](../ModelConstruction/nonlinear_and_linear_systems_and_solvers)
	1) [](../Differentiation/totals_vs_partials)
9) [](../Optimization/gradient_based_mdo)
10) [[Relevant software engineering topics]]
	1) [[Git]]
	2) [[Folder and package structure]]
	3) [[Tests]]
	4) [[Continuous integration]]