Hello everybody! Today we are talking about multi-objective optimization. First let's discuss some context for multi-objective optimization. The goal of multi-objective optimization is to optimize multiple objective functions simultaneously. This falls firmly under the optimization umbrella for the topics covered in this course. First I'll introduce the weighted sum method. Imagine that you're trying to optimize a function here f_objective of x. In one case we could just have a single objective function where f is equal to g of x. However, we could also have a kind of combination or a summation of two different objective functions. In this case we care both about the performance of g and the performance of h. The simplest and most naïve way to combine these two objective functions into one is to simply add them together into a single objective function, in this case f, which we then optimize over. However, we may care more about one objective or the other. So here I will introduce the weighted sum aspect. The weighted aspect of this means that we have scalars on each of the objective functions, in this case alpha and beta. Additionally we have some notion of g_0 and h_0 or some scalars that are relevant for each one of the objective functions. These scalars are necessary, especially if each objective function has wildly different magnitudes. One example would be in the case of aircraft design. We might care about the structural weight and the coefficient of drag of an aircraft. So if we're trying to minimize the structural weight and the coefficient of drag and simply add these two functions together we could get an answer. But the answer will probably be not what we're looking for. This is because the structural weight is often on the order of thousands of kilograms whereas the coefficient of drag is on the order of 0.025. Thus we need to scale each one of these objectives using this g_0 and h_0 values. There's some kind of nominal scaling value based on realistic physical quantities associated with each one of them. Additionally the alpha and beta values say how much we care about each one of the objective functions. We could simply split them 50/50 so that alpha and beta are equal. Or if we care more about the structural weight as compared to the coefficient of drag we can have 0.9 and 0.1. Or we could also have 0.1 and 0.9 or any other values. Commonly we see alpha and beta add up to one but you can use any kind of scaling values you want. Additionally for these examples we're only talking about bi-objective optimization however this can be extended to n objective optimization in the multi-objective optimization sense. Now that we've established the weighted sum method let's go on to the Pareto fronts or Pareto Frontiers. They help show trade-offs between optimal designs for multiple objectives. Again for all examples here we'll just look at two objectives but this can be extended into hyperdimensional space. Here is a plot of fuel burn versus zero fuel weight for an aircraft design problem. We might be trying to minimize both of these things simultaneously in a multi-objective setup. This means that we want to minimize the fuel burn for a given aircraft for a given mission but also want to minimize the weight of the aircraft when there is no fuel inside of it. The whole idea here is to get operating costs or fuel burn down and capital costs or zero fuel weight down. Shown on the scatter plot here are multiple different designs. These designs do not necessarily come from an optimizer. Each design here has some value associated with both of the objective functions. However, if we want to look at the best designs we want to examine the Pareto front. This is the set of designs that cannot be improved in one objective without sacrificing performance in the other objective. This green line here shows all of the designs that are "Pareto optimal." Let's take a look at one design here shown in white. If we try to move left by optimizing the zero fuel weight to be lower we can improve on it based on what we see in the Pareto front. Additionally we can also improve by moving down to minimize fuel burn even further. That means that design is "dominated" by designs along the Pareto front. One way to construct a Pareto front is by sweeping through different scalars on a bi-objective optimization setup. This is an example for one paper from Tim Brooks et al in 2020. Here they are looking to minimize both the fuel burn and the zero fuel weight and they did this by performing six different optimization problems. These six different optimization problems were scaled differently by using different beta scalar values. This constructs a Pareto front by connecting the dots between them. Another way to construct a Pareto front is through the Epsilon constraint method. The goal here is to minimize just one objective value - not a summation of them - while constraining another objective value. You can think of this by constructing the same axis that we had before then drawing vertical lines. These vertical lines represent the constraint on one of the objective functions. Then the optimizer essentially has a one objective optimization problem but it is constrained by this additional constraint based on the other objective. Each one of these points then moves to their optimal design by performing an optimization at each given point and we can construct a Pareto front this way. This Epsilon constraint method is the preferred way of constructing Pareto fronts. It often results in a more robust curve and in the case of a non-convex Pareto front it can accurately capture the real physical trends. It also allows for even spacing in a plot. So the main takeaways concerning multi-objective optimization is that it's somewhat of a misnomer. If you actually care about multiple objectives simultaneously you need to have some predefined weightings or treat them as constraints. A Pareto front is a good way to examine trade-offs between objectives and the Epsilon constraint method is the preferred way to construct the front. The notebook activities associated with this lecture will help you construct your own Pareto fronts for any given design or model that you're looking to examine in more detail. Thank you for watching!