Two Approaches to Combinational and Sequential Optimization
"Bottom Up": Given a fully-encoded (Boolean) description of the problem, iteratively re-encode the machine to achieve the best result possible.
"Top Down": Given an unencoded ("high-level", behavioral) description of the machine, find an encoding that achieves the best possible result.