Principles of Optimal Design: Modelling and Computation