Intro video transcript

Intro video transcript

Hello all, John Jasa here presenting a practical MDO course. This course is made to help you perform multi-disciplinary design optimization. Throughout this course we will cover three main categories of topics including model construction, differentiation of that model, and optimization. By piecing these together you will be able to perform efficient gradient-based design optimization of large and complicated systems. This is helpful for researchers like us at NASA and many other places in industry and in academia.

I’ll be guiding you through this course - this is my face, hi - and you won’t see much of me but you’ll hear a lot of my voice.

Our main goals for this course are to provide a resource and a set of lectures and a set of code to help bridge the gap between the theoretical and the the implementation. So on the theoretical side of things we have Engineering Design Optimization by Andrew Ning and Joaquim Martins. It’s a fantastic book. It’s very exhaustive and it talks about multidisciplinary design optimization, especially with a focus on the theoretical, but it also has a lot of really good examples.

Also on the left hand side, the theoretical side, here we have any sort of journal articles or research papers. These would be research works that are focused on being novel and introducing new techniques to the literature. On the far right hand side we have the OpenMDAO documentation. This is all focused on the actual code, the API, what you would actually call in Python to obtain your results. It doesn’t tell you that the why or the what you’re really doing, it just tells you how you’re doing it.

So the whole goal is that this course fits between the theoretical and the implementation. It actually connects them.

You’ll be using lectures from this course along with code snippets and they’ll touch on ideas both from these books and different papers as well as referencing the API documentation for OpenMDAO. To further motivate this, part of the idea is that we have many years of knowledge of performing multidisciplinary design optimization and it’s challenging to share this with the world if it’s not necessarily a new or novel technique that wouldn’t really be worthy of a journal paper. And if it’s not really about OpenMDAO code then it wouldn’t live in the documentation. The goal of this course is to be general enough that you don’t have to be using OpenMDAO to benefit from this course. Of course most of the examples do use OpenMDAO code and Python code and that would be a very helpful thing for you to understand to get the most out of this course. But the goal is that if you just care about one lecture, one specific topic, you can jump right in and get something out of it.

Before we get into the nuts and bolts of the course and talk about the formatting there’s a bit of foundational knowledge. Before this course starts I’m assuming that you have knowledge of Python, kind of undergraduate level calculus, and also undergraduate level numerical methods. When I say numerical methods I’m talking about some computational methods like maybe solvers of some sort of maybe optimization methods. But I don’t expect much knowledge there, just enough to understand how to take something from a textbook or a piece of paper and implement it in the computer.

Now with these three topics down as the foundation the the next building block is an understanding of OpenMDAO. I’ll reference a lot of different kind of methods and functions in OpenMDAO and assume that you either have knowledge of it or can go to the docs to look it up and understand what’s going on. The goal of this course is not to teach you OpenMDAO. This is not an OpenMDAO course - I cannot stress that enough - but we simply use this as a tool to help us get across some practical MDO ideas in a very realistic and practical way.

So with these building blocks down of course here’s the course right. It spans across all these different ideas, it’s a little bit thicker than just the Python or calculus and numerical methods because there’s a lot to cover in here. You can choose to go into specific areas or take the entire course in all its breadth. Here’s the really neat thing. The neat thing is that you can choose what comes next. With these blocks down as a foundation you have a lot of different options available. You can work on a small project, maybe it’s a personal project, maybe it’s something for your work. Or you can contribute to the next generation systems engineering project. This could be designing floating offshore wind turbines, this could be designing electric aircraft, it could be looking at nuclear power plants and plasma reactors. These are all projects that use MDO in some way. These are all projects that are also using OpenMDAO. The goal of this course again is to get you onboarded quickly to understand what’s going on when you see something that’s happening in MDO. I don’t want this to be daunting but I just want a clear expectation of some of the prerequisite and suggested knowledge for this course.

So how does this course look? Let’s talk about it. I want it to be something that’s accessible to many different people through many different media. Maybe the first and most prominent is a series of lectures. These lectures would be focused on many different ideas including optimization, differentiation, and model construction. These video lectures are put together by me and narrated as well and the goal is to have them be 8 to 15 minutes, a pretty digestible length, and something where if you have a question or you want to learn more about a topic this would go into just that topic. You would have one main takeaway per lecture and then go into more detail about maybe the background of this or how to implement it in code and what that means. Along with each one of these lectures there is an accompanying Python or Jupyter notebook. This allows for interactive code snippets and a little bit more exposition than what’s available in the lectures. So these go into more detail they have links to relevant resources. They also allow you to play around with the code, kind of modify it, and see what it means for your models. I could imagine that you could watch the lectures as a first pass, get a basic understanding of what’s going on, dig deep into the Jupyter notebooks, look at some of the theoretical side by examining some of the book contents or some papers, and then also check in with the OpenMDAO API as well to figure out how to do this for your own problems.

So I really picture a nonlinear kind of path through this course. Again, maybe the lecture is the first starting point but even in the description of the lecture you’ll have links to many different things that are relevant to your knowledge.

I want to introduce a graphic here and this graphic is something that we’ll revisit throughout the course. It’s a really neat kind of three-part Venn diagram and the idea here is that there are three main categories of ideas that we need to understand to do practical MDO. One is optimization, of course, as you might have guessed. Another is modeling, and the last is differentiation. Of course I’ll go into extreme detail on each one of these topics and kind of delve deep into them but the main idea here is that to perform good multidisciplinary design optimization you should probably be using gradient-based optimization methods. You have to know about optimization. You also have to know about multidisciplinary modeling and how to create a model of a system that you care about and then also understand differentiation, how to obtain derivatives of your model, so that you can perform gradient-based optimization well. For each individual lecture I will show this Venn diagram and show which circles the current topic falls into. I hope this to be kind of a touchstone to help remind us of the point of this course and the three main topics that this course covers.

Here we have a graphical view of all of the topics covered in this course. We have three broad categories including model construction, differentiation, and optimization. Additionally each one of these subtopics is linked to each other. For example if we take a look at 0 to optimization in 10 steps and zoom in here we need to understand basic optimization problem formulation, when to use different optimizers, as well as how to construct different models. There are many different things that are interconnected here and there’s no clear path through all of these ideas. I wish there was a linear and clear path but to understand why we need derivatives we need to understand optimization. To understand how to create our model and construct it in a good way for gradient-based optimization we need to understand - you might have guessed - gradients and optimization as well. So all of these topics are linked together.

One thing I really want to drive home during this course is how they are linked and why we need to care about what they mean. This view might be helpful for you or might not be helpful because it looks pretty busy and some of the text is overlapping. But for me it’s helpful to say okay if I know about implicit versus explicit components I need to care about computing the derivatives of implicit functions right up here. I also need to care about nested linear solvers and examples of nonlinear systems. This is one way to kind of graphically see how all of these topics are related together and what they mean. Each one of these lessons that is related to another has links in the video description and in the Python notebook to the other relevant lessons.

Thank you for listening to this introductory lecture. I’m glad you’re here and I’m excited to share more about Practical MDO, how to do it, and what it means for your projects. Thank you!