Description
Key Learnings
- Learn how to apply computational design techniques to design optimal structures
- Learn how to use special techniques in Dynamo to evaluate and evolve your designs
- Understand optimization techniques for structural computational design
- Learn how to perform your own design automation for repetitive structural tasks
Speaker
- Dieter VermeulenWorking as a Solution Engineer AEC at Autodesk, Dieter is specialized in the products of the Computational Design and Engineering portfolio. Within that domain he helps our customers to learn more about new and innovative workflows and solution strategies. With an extensive background of structural engineering he understands our the challenges of structural designers and engineers and uses his experience to come up with new ideas and solutions to achieve better outcomes in structural engineering. As an evangelist he’s a big influencer within the AEC industry within the domain of generative and computational design. You can find him at several conferences worldwide talking about these topics.
DIETER VERMUELLEN: Well, welcome on this Dynamo class about structural optimization. My name is Dieter Vermuellen, to make sure that you pronounce my name right. I live in Belgium, where I am based, in Belgium, and work as a technical specialist at AutoDesk for the Northern European region, so I see some familiar faces. Some people in here, we know each other already.
And in the presentation, you will find some links in here in my profile. And this is something for you for afterwards. When you open up this presentation, you will see it's a PDF. So I will upload the presentation, the PowerPoint presentation itself, on my blog later on next week, so then you will have the videos that they will show you today as well-- plus, also, the data sets, because it's a huge amount of files. So we will find them on my blog later on also. So keep an eye on the blog for the next coming weeks, and then you will have all the material that I'm going to use today so that you can practice yourself with all of this.
It's going to be exciting because I'm going to try to do live demo, so it always goes wrong if you go live. But let's try it so it's fun. And my goal is to give you some more insight and the specific techniques, the specific optimization techniques, that are available with Dynamo or that you can find out to use with Dynamo and understand all those techniques as well. So the goal will be to get a little bits into depths in those techniques, having very complex ways of performing optimization. But you will also see some really nice product that we launched this week, or at least we made it public as a beta. It's called Project Refinery. You might have heard of it already in other sessions. So we are going to go live with a product as well so to see how this can help in structural engineering.
Good morning. So let's just have a quick word on how to describe optimization. So the definition according to Wikipedia is actually that optimization is about selecting. It's about selecting the best elements from some sets of alternatives. So if you perform multiple designs-- if you get multiple designs you might have multiple design options, especially in computational design. So if you perform something by hand, you will have one ID. You might describe only one ID. But with optimization, you will have multiples. You will have thousands of design options. So the trick in here is to find the best one. So you need to define some specific criteria to get into that best solution. So that's what we are going to learn today.
Now, those thousands of design options could be like this book. You could see this as your design space. How will you find the best page in that book? It's not by reading this whole book, because that might take a lot of time. You want to find that as quick as possible. Because you don't have any time when you're performing your job and when you need to optimize structural problems. So we will have a space of optimal solutions. It could be that a few pages in that book are the ideal ones. It's not only about one solution. It could be like three, four, five, 10 solutions out of 10,000 that are the best ones.
And if you would organize all of these solutions in this kind of diagram, you get in what we call the parietal frontier. So a parietal one is actually all the possible optimal solutions in a multi-objective optimization. So multi-objective optimization is then where we are trying to find the best compromise between multiple objectives. Imagine, for instance, you want to have a solution which is as cheap as possible, but which has the best-- let's call it the structure weight or maybe the structure volume. So that's a contradiction you have. Because the more material you have, the more expensive your structure will be. So what is the best solution? You need to find that compromise. That's what we call a parietal.
Now, in a single objective optimization, which is very rare in the AEC world-- it's like saying, OK, I need to find the best solution which is cheapest. But just having something which is cheapest means, yeah, let's have nothing. OK. So that's what we call then the single objective optimization. And you get those two blue points at the end of that diagram. Or it's cheap or it's very heavy.
The methods we are going to see today. There are multiple optimization methods. I'm only going to use two of them. One is called brute-force search. Now, brute-force search is actually going through all the possible design options, evaluate them, give them a score, and then use some techniques like, for instance, Excel or Mandrill ways of working to, for instance, find the optimal solution in a diagram or in a table. So that's actually what brute-force is doing. It also evaluates problems that might be not even optimal. So that means that it takes a lot of time to perform that kind of optimization. But at the other hand, it's very simple to implement. So you need to find a good-- you need to find out what is actually the best method in here for specific structural problems. So I will teach you that today when we are going to use that brute-force, for instance.
Another one is a more complex one. It's about genetic algorithms. Now, genetic algorithms, is a optimization which is search-based, and it's using specific algorithms that are based a little bit on the natural evolution theory. So think about the evolution of species, but in computational design. So it's like survival of the fittest. It means that solutions that are converging to the best score, for instance, for your problem will be taken into account and they will evolve. So they will be like genetically manipulated to get the best solution.
So actually this guy helped us on that. Well, not about programming the algorithm, but his theory is actually used in that kind of optimization technique.
Now if you look at generative design, you always start with setting up your data. So you're initializing your specific problem. You initialize your constraints, your requirements, and you generate the first option. And that first option gets evaluated. Now, evaluating a problem could be, for instance, what is the cost of that structure? What is the maximal stress inside of that structure? What is the deformation? So that is an evaluation. And those results you get, you're comparing them with the constraints you set in there. So for instance, the structure cannot cost more than $100,000, or the structure cannot have a deformation bigger than 5 millimeters, for instance. So that's evaluating. That's giving something a score.
Now, if the score is bad, then it needs to evolve. It means that the parameters that are used to generate your structure need to evolve to some kind of better solution. It will be generated again-- evaluate it, evolve, generate, evaluate, evolve until the loop finds a specific solution which is meeting your requirements. And that's where you stop the optimization routine, and that's where you start selecting the best option in here. So that's where the human interaction comes in.
Now, I'm going to present you for that three workflows that are using specific software in here. So we are going to use Dynamo. But in this case, I'm using Dynamo Sandbox. So Dynamo Sandbox is actually Dynamo for Revit but you open it up as a standalone application. So by just going into the Program Files and then open up DynamoSandbox.exe. Important thing here is that for all the scripts that you will find in the data sets, you need at least Dynamo 2.0-- preferably Dynamo 2.1 in case you are going to test it with Project Refinery. Also, Robot will be used. We are going to perform also some structural analysis and use it to optimize the results. Project Fractal will be used in just one slide, just to show you how we did it in the past. But as you might have heard already in other presentations, we are now replacing Fractal by Project Refinery.
So actually, Project Fractal is more like a private beta. So you need to request access before you can enter it. So probably-- I'm not sure how they will do it right now, but probably if you try to request access for it, you will not get any access anymore because we are closing it down and get it into Refinery instead. Plus, also, this one is using Dynamo Studio as a connector. Not Dynamo Sandbox. There's a big difference. Dynamo Studio can connect with the cloud. Also Dynamo Studio only has until version 1.3, while Dynamo Sandbox goes into 2.0. So also an important thing to know.
The public beta-- at least, it's public since last Monday. Its Refinery. And with Refinery, it's actually generative designed for AEC. It gives you the possibility to optimize your designs, to explore your designs, to perform randomization, even, with your designs. You get thumbnails for it. You get scattered plot diagrams with four dimensions. You will get a table for it, and so on and so on. So really nice stuff you can do with it. I'm going to show you some live pictures-- at least live demos of that.
So the three workflows. The first one is about deformation. It's more a conceptual analysis we are going to perform without using analysis software. We are going to use Dynamo and Project Refinery. And also a package called DynaShape. So I will explain a little bit more about it later on in the presentation. The second workflow is about the shape of a truss. So we are going to optimize-- not really topology, but really about the shape of your truss. We are going to find the best shape for that truss compared to what the specific results in structural analysis. So we are going to use Robot for that. And then finally, the Mars Torus Arena. So people among you that already came to AU last year, for instance, might have seen that project already. It's something I used for other optimization and design automation techniques. So we are going to use that one again today, but then more in a brute-force optimization.
It's fun over there.
So the spatial truss. That's the one we are going to work with. This one here. And the idea in this case is that we need to find the best configuration based on three specific objectives. So the three objectives in here are the platform area. I want to have a platform with the biggest size. But I also need to have a minimal deformation. If we'd look at this from a single objective optimization perspective, and if you would say maximum platform area, then it would be like an infinite, big platform. But then it would not meet your deformation requirements. So I need to have something which finds the best combination of both of these objectives. And besides that, I want to have like a third objective in here. It needs to be as light as possible, so cost effective.
And how are we going to get this solution? Well, you need to tell your software-- you need to tell your script, in this case, what kind of inputs that can change. Because you cannot change everything of a spatial truss. You need to be quite specific on that. So we are going to change the width and the length. That's obvious, because I want to have a bigger area. These are the two drivers for the area. I also am going to start-- to change at least the starts depth of that truss. So it's actually defining how high it will be at the start, and also how high it will be at the end of that spatial truss. Besides that, also the truss divisions. So how many panels are we going to create within that truss? So this will be very effective when we want to have, for instance, the minimal structure weight. So the less divisions, the less weight.
What you will see in all of these data sets is-- normally, they will open up with his blue box centralized on your screen and it gives you some information about a script, and it also gives you some important information about which packages are used. So always make sure when you test it that you install those packages first. I'll explain in a handout as well where to start, where to download them, and so on.
So in this case, we need DynaShape developed by our dear friend Long, who's sitting here as well. And it's an open source plug-in. And it's used actually for form finding and physics simulation. So it's not really defining the deformation of my structure based on, for instance, strength of the material or based on the size of the materials. No, it's giving us more like a conceptual idea on how the truss will deform based on some loads that are put on there. So I will explain you a little bit more in detail when we go live.
The workflow which is used in here, it's starting with defining your geometry. That's obvious. That's always the first ID. So it's generating your initial set of data. Now we are going to perform the analysis. That's actually the evaluation parts together with the results evaluation. So you get results, and then you need to compare them with the constraints. So for instance, deformation can not exceed a specific amount. That's actually your evaluation from it. Or you'll give it a score. That's also something we could do. And finally, we are going to use this whole script to optimize it in Refinery. So Refinery will drive multiple sessions of Dynamo, generate all the possible solutions, and take all those evaluation results into a diagram, and then, there, you can select which is actually the best solution for it.
So the first step, or the first three steps, you need to do for this particular problem is you need to have your roof. The shape of your roof. It could be an SAT file or it could be geometry that you define and Dynamo directly. So in this case, we are going to model everything inside of the Dynamo environment. So no external software used in here to get that roof surface.
So the idea here is, how do we get to that spatial truss? So how do you create all those elements? So you need to think already from that structural perspective, because you need the specific beams, the beam elements, without even thinking about the strength of that structure.
When we perform the analysis, that's where DynaShape comes in. And with DynaShape, we are first going to define what are the anchors. So where is the structure attached to? And give it a specific weight. Not a weight in as, for instance, the mass of your structure, but the weight in, how heavy is this anchor? How strong is this anchor? That's actually the weighted follow for it. Same time, we are also going to define the stiffness. So how stiff is that structure? So we need to give it a weighted value for that as well. So the smaller this value will be, the weaker the structure will be. Define loads. That's obvious. If you want to have deformation, you need to have loads. Not only gravity loads or self weight loads at least from your structure, but superimposed loads, for instance. And then finally, we are going to perform that analysis and you will get results from it.
Now, how do we evaluate the results? Also something very important. In this case, we are going to use a deformation ratio. So it's not like the real deformation. It's the difference between the original points and it's deformed position. You will get a value, but this value is not like the real distance that it will deform in reality. It's more like an indication of how big the deformation will be. A material score, also very important. Because with the material score, this one will indicate how much of material we are going to use for that specific problem. And then finally, it's the platform area. Very obvious. Length times width-- that's your area. In the last step where optimization comes in, that's where Refinery is taking all those inputs, creates a study, and then performs the optimization. It's very simple. It's even more easy to use Refinery than to set up this whole script in Dynamo.
OK, let's show the real part of it. So this is that data set. Or at least that one file. This one file is doing everything. It's performing-- it's doing the initialization, the evaluation, and then after, it's also the optimization. And as you will see-- and I need to take a little bit track on time. OK, perfect. As you will see, we have like five parts in there-- input, geometry, definition, the goals definition for the analysis, then the analysis itself, and the results evaluation. Always try to work in that kind of principle if you build your own script. So that slide where I showed you-- data, generate, evaluate, evolve, select. Try to use the same principle into your own diagrams as well-- into your own Dynamo graphs at least, as well.
Now, the input in here-- we've already defined what the input will be, because the platform size will be defined by the width, it's length, and then also the truss dimensions with it's start depth, end depth, and the truss segments. So these are the values that are the drivers of our new geometry. So I will not go through everything in this script, because we are not going to learn about how to create lines in Dynamo, but more about how to use that to perform your own analysis. Now, what I always use in these kinds of scripts, and which are very handy, is our visualization techniques. Very simple. Just give it a solid volume, give it a color, and then you get these kinds of things.
So in this case, it's not a solid. It's just a surface. But this is already defining how our roof will look like. The roof is very simple. Two lines that are a lot of-- three lines at least, that are lofted together to get a curved surface. There is also a bottom surface. This one. It's our projection surface at least. So this one here. This distance between that point and that point is our roof start depths. And this one is the roof and depths. OK. So these two will vary along this whole optimization until we find the ideal solution. So these are actually defining how much of deformation we will have.
All right. The truss. How is the truss then defined? Well, actually in here, we start with generating quartz panels on there. So you see those rectangles? These are the quartz panels. So it's an equal distribution along this curved surface. So these will actually define the whole structure length. They're also defined by the truss segments indicator in the inputs. So the moment they start increasing that, we will get like more lines along the length of that platform.
And then by using some sorting techniques and projection techniques-- so projecting the lines to the bottom surface-- we will get the bottom part of the spacial truss. And then the next part is just connecting all these points with diagonals. And that's where you get this structure then. Oh, sorry these are the supports. This one. So these black lines, this is actually the structure defined by this full box in here. OK.
Next, part to do in here in our initialization thing is defining which points are actually the supports. So we also using sorting techniques again. Sorting techniques, for instance, by taking all the points that are closest to the original X points, for instance. These are the guys that are supporting this whole structure. Again, use some visualization just for your own reference to see what are the supports, otherwise you need to select all these nodes every time, and then see which points are actually used.
OK. So first step, done. We have our geometry. The next step is actually creating a specific goal, specific requirements for the analysis. So that's where DynaShape comes in, as I told. So our first one is the anchor goal. The anchor goal is actually a specific definition of your points that are fixing your structure to the world. So these are actually the supports. The bigger this value, the stronger these supports will be. But none of the supports in real life-- anchors in real life are never completely fixed. They're always having a little bit of movement possible so they can deform a little bit. So we have some elasticity. The thing is, in here, you have to tweak it a little bit until you find the best solution, at least until you have a reasonable deformation according to your own experience. So this value you have in here is not the best value for every structure. For this one, it's working perfect.
The second thing is the structure stiffness. The structure stiffness is defined by the length goal. And the length goal is-- I'm hoping I'm telling this right, Long. But the length goal is actually defining that your elements, the lines of that truss, can not extend or shorten during or deformation. So you're actually using the elasticity modulus of your structure in here. Again, if you fill in a value which is really high, then it will be a very strong structure, and it will possibly not even deform. If you fill in 0 or 1, then you will have an infinite big deformation from that structure. So we need to find again a good compromise to get a figure that is quite logical.
The third part that we need to include in here are the loads. So the loads for this structure, they are actually defined very simple. So I did a generalization of this whole thing by taking the panels, the surface of the panels, calculate them in some kind of way, and then add a factor that is defining the weight of each of the panels. Then also, take the total structure, all these elements or all the beam elements that are generated in here, take their total length, add a factor to it, and then you have like the total weight divided across all these points at the top of the surface. So it's a very simplified method of loading. You could go more into depth and really write a big part of that script and making sure that every point has a specific load like it would be in real life, but that's not necessary because it's a conceptual evaluation that we are going to do in here.
So this is the part where the analysis starts. Very important-- when we are going to use this script with Refinery, is that you need to use a different package than the one that is available on the forums. So the one that is available on the installation link that I've provided in the handout, it's the package that can be used the moment you just use Dynamo and DynaShape in other specific problem, except for Refinery. The reason for that is because DynaShape needs to run in a silent mode in here. So I provided, also, a link where you can download the specific package of DynaShape to use with Refinery. So read the handout very carefully, and then you will get all the information that you need to use it yourself. OK?
In the meantime, the analysis has been performed, and we see the results in the background. So let's open up. There we have-- this is like, as I told you, it's more like the conceptual deformation of that structure. So this is not like the real distance it will deform. It will not deform 2 meters, this structure. But it's giving you an idea. OK. Now, before we continue, I will just highlight all of these elements. So that we have a good few in here. So this is the analysis results. And again, in here, if you use this If formula, for instance, we can go into the tube results so that you have a more solid representation of this structure. Same here for the supports. And then another one for the roof. There we go. So that's our initial structure. So you know the drill. If you go into the inputs, and if you change, for instance, the platform size to 15 meters of width and 20 meters of length-- there we go. Updates immediately, of course. And then we also get a-- oh, I'm sorry-- the result at the end. That's where the evaluation starts.
So the evaluation of this whole structure-- well, it's going to do, as I told you, three parts-- deformation, structure weight, and also the platform area. Platform area is already obvious. So we just changed it. The deformation of it is actually taking the original structure-- this one-- and also the deformed structure-- this one-- and it calculates the points. So in here, it's using the curve start point. And the curve start point of the original structure. We could also use an alternative method. We could take the node positions in here. So the node positions is actually the points of the deformed structure. So if I show this one-- and let's put this one in a preview method. There we go. If we zoom in a little bit, you see all of these blue dots-- or these black dots, at least-- these are the deformed node positions. And these are the original node positions.
So if I take the deformed ones connected to this point in here-- so then we don't need the lines instead-- calculate the distance, and we get a deformation score, 21.93. Is that the distance, the real distance? No. It's just a ratio. It's just giving an indication. Because the moment I start changing the values of the anchor and the length goals and I use, for instance, a different value, one which is really big, then the deformation score will change as well with it. But rationally, compared with all the other solutions, it will be exactly the same. So this is just a ratio. And the idea behind optimization is that this score of deformation should be as minimal as possible. So the best solution is actually a deformation score of 0. But that's impossible in here. Everything will deform and a cantilevered setup.
The material score in here is defined by just taking the length of every curve. So every element that is designed in there has a specific length. Take that's curve length, put some magic this on it with math.sum, and then you have your material score. And the platform area is just like, as I told you, platform width multiplied by platform length, and that's your area. So these three guys in here are used for optimization purposes.
Now, before we start optimization, we need to define some things. We need to tell Refinery what are actually the inputs and what are the outputs. So seems real as, actually, with Fractal, if any of you has used Fractal in the past. You need to go in here and say, for instance, for the platform width I want to use this one as an input. So right-click on it and say this one as an input. If we click on this one, you will see it's not an input because it's a fixed value. I'm not going to change the shape of that roof. The roof shape is already defined by the architect. It's now up to me to define which structure we will need to support this roof.
OK. At the end, the results. These are the ones that needs to be optimized. So these ones are the outputs. All three of them. OK? So that's how we started it. And let's just switch this one again to the tube volumes so that way our thumbnails will look a little bit better. Switch this one off. And then a view like this. Yeah, that should do it. OK.
Let's start in here. Let's go to View. And in View, we have this one, Refinery. After you have installed Refinery, at least. So it's what we call a View extension. It's a specific plugin that is installed on top of Dynamo. Now, the screen looks empty at this moment. Well, we need to create a new study first. And a new study gives us the possibility to change the generation method. So this is the point where you can choose whether you want to optimize, whether you want to randomize-- so that's brute-force techniques, or whether you just want to use some cross products or like this method. So a cross product means that it will take every possible option, for instance, for every possible value of the platform width and the platform length. So that's actually what the cross product is doing. It means, also, that you will get all the solutions, including the solutions that are not valid. So this is more like for architectural purposes just to have multiple ideas.
So in case, I want to use the optimized method. And the optimized method will find a solution and will try to convert to the best one by using these genetic algorithms. The inputs in here are the truss start depths, the truss end depths, the truss segments, the platform width, and the platform length. So lots of inputs actually that need to change. So if I would do a cross product of these five inputs, we might have thousands of design options, and maybe only 20 are really valid ones. OK? So we are not going to play with these inputs. They are fine already. And then the outputs, these are the ones that need to be evaluated. So in Refinery, we'll evolve the inputs in a specific way until we have a minimized material score, a minimize deformation score, and a maximized platform area. So we have a multi-objective optimization in here, and also with multiple ways of looking at these objectives. So the first would need to be minimized, and the other one needs to be maximized. So that's completely inverse optimization actually in here. OK?
The settings. Settings in here, they are actually telling how many elements we should use when we started the optimization generations. So the initial-- this is what we call initial population. I will explain a little bit more about all of this in the second workflow, where we are going to use genetic algorithms inside of Dynamo. OK? But the thing is in here, it needs to be a multiple of 4. So I would-- in this case, I'm not going to run the full Refinery study in here because it takes some time, but let's say that we are going to start with-- we can start with 4. And we need to have four generations. So it will start with four initial design options, and it will make four generations of them. So it will evaluate those four options, see that, for instance, the input values need to change a little bit, so then it's where we are going to get four new populations in the second generation, the third generation, and then the fourth. Meaning that actually Dynamo will be running 16 times in here to get to that specific result. And then we start generating.
So in a few seconds, you will see it will write the results during the progress of this analysis, because this analysis is actually in here. Here, you can see what it's calculating. You will also see in that black diagram that the results are calculated and what the values are used for it. So this is just to show you that it's really running, that it's really a local service. It's called Refinery Server, a local service that performs all of these calculations inside of Dynamo. So don't close it. And there you go. So on the fly, while we are watching the results already, it's adding your results until it finds the optimal one. So imagine if you set your population list to, for instance, 60 and 10 generations. That's what we actually did for this type of structure. Then we will have multiple solutions and a scattered plot diagram, which is possibly showing you that optimal parietal front one.
So let's go to the real solution in there. So I need to open another version. So this is the version where all the Refinery optimization has already been performed previously. Let's add this one to tube volumes. There we go. So these are the original results.
So what you can do it in Refinery then is we can start to, for instance, change the way how this scattered plot diagram is organized. So for instance, the y-axis should be-- the platform area, for instance, this one will be the material score or the deformation score, at least. That's what we want. The size of the dots should be representative for materials, and then this one could be, for instance, the truss segments. So this way, you get an overview of what are actually the best solutions in here. The best solution is, of course, this one. But this one in here, it might probably look something like this. And besides that, I also want to have the maximum platform area. Not like minimal platform area. So let's take this one then. But this one will have a deformation ratio bigger than 40, or greater than 40. We don't want to have that. So it should be something in here in the middle.
So a next step, what you could do is, for instance, perform multiple optimizations in here, or just do randomization with parameters that are like this. So that's another possibility you could do in here to refine your selection. Or you could just say, no, I'm happy with this one. Or you could go into a tabular view and then have a look in here, oh, this one has 543. Yeah, you can almost see it at the top. Yeah, you can see it there completely above that blue dot in here. This area, this is actually represented by this line in the table. So this is probably the best solution we can find at the moment. OK?
So how does it look like in Dynamo then? How does our structure look like? Let's go in here. Very simple. We just click on this. Click and just wait a few seconds, and Dynamo will update it. There we go. So that's the solution that we want to have. Instead of just recording what is actually the real platform with according to optimization and so on, no, it's synchronizing from Refinery straight into your Dynamo environment. Make sense to you? Yeah? People among you that already were common with the use of Fractal liked this sorting of elements or solutions with the parallel coordinates, so we still have this in Refinery. So again, in here, we can go to the solution, for instance, with the maximum platform area. And we can select it from here to change your specific thing in Dynamo. But as we see in here, the deformation score is also too big, so it needs to be something that goes down here, and then goes up again. So that's the line that we need to follow to find our best solution.
OK. So far so good. So that was the first optimization technique. The easiest one, actually. Easy, why? Because you just have to set up your Dynamo script, and then run it through Refinery. Just make sure you have the right evaluation scores for it. Now, it's not always working like this, because sometimes you need other software to perform your optimization. And that's actually what we are going to do in the second part.
The second workflow is about truss shapes. And a truss shape in here is defined by this problem. So traditionally, if we calculate a two-dimensional truss, you might use a rectangular truss. Now, probably the best solution for this is a truss which has a little bit of a deformed shape below. Maybe like an arc. It depends a little bit on the loading system that you're applying on your truss. To find this best solution manually, it's really hard work. You need to change the shape of that bottom rule constantly then, and then compare your results.
So what you are going to do in here is we are going to use a brute-force technique to define the best shape. And the best shape, how is it evaluated? Well, I need to have a shape which has a minimal stress score. A minimal stress score, and that way the structure is not over-designed, but it cannot also-- we also need to avoid over stressing of that structure. So something in the middle. Also the weight of the structure needs to be minimal-- again, so cost effective. And again, in this case, deformation is important. So the bar displacement needs to be as minimal as possible.
Now, what are the drivers for that optimization? Well, we have those Z values. Z1 until Z5. These five values will be actually driven by the optimization.
And here, we are going to use multiple packages. The most important one in here is the structure analysis for Dynamo package. It's an older package. We used it already in a class in here. I think three years ago I presented that, about structural optimization with robots. So it's still the same package. It's still the same handout that you can use to understand how the package works. And also, we are going to use Optimo for the optimization. So it's a genetic optimization, but then with Dynamo and inside of Dynamo. So no Refinery is used in here. Very simple, because Refinery and Robot, they don't like each other. So they don't collaborate with each other. And the reason for that is Refinery opens up, for instance, I think four or five simultaneously running sessions of Dynamo. And Robot cannot handle that. Robot is opening only one session at a time. So that's why Refinery is not used in here. So Optimo is used in there.
Another package is Mandrill. And with Mandrill from Archi-Lab, so from [? Konrad ?] [? Sobel, ?] we are going to evaluate our results into a scattered plot diagram. So with the optimiza-- sorry, with the structure analysis package for Dynamo, that's where we are going to connect the geometry from Dynamo to Robot. So Robot will take that geometry, and within Dynamo, we are going to evaluate what are the supports, what are the bar end releases. And which type of loads are we going to apply to that structure.
Now, three methods are used in here. So three optimization methods. The first optimization method is more design exploration. And with the design exploration, we are going to set up a single data-- a single model, at least-- analyze the model, evaluate it, and then use the results to see what kind of stress we have in that specific structure, what kind of structure weight we have. So it's more like manual operation of it. It's a very important step before you get into the real optimization, because you need to know if your script is working in a manual method.
The second one. The second method is brute-force. Now, with brute-force we are going to generate multiple IDs and evaluate them. But multiple IDs within a range of variables. So for instance, calculate everything for Z1 value between 0.5 and 1.5 meter, and take 100 steps for it. And it will do that specific cross product calculation of it. So you will have thousands of design options in there.
And the third one is genetic algorithm optimization. So this one will be the shortest version, because it will only consider the values that are relevant for my optimization.
OK. So the first, the design exploration. This one is important for the other two methods as well, because this one is going to define how our analysis should run in the optimization with brute-force or genetic algorithms. Now, at least you need to have your truss shape. So you need to start defining the points and the lines that are generating your truss.
The second step is to configure your analysis model. So we take that full structure, we get it into Robot, pull on some loads, releases, and so on. Then perform the analysis within Robot. All of that is driven by Dynamo, so you don't need to go into Robot and click Calculate. No, Dynamo will perform the analysis, and then, at the end, we are going to read the results from it and evaluate those results.
So how do we define? Well, again, with those five typical values for Z-- Z1 until Z5-- they will be the specific number sliders, at least, that will pull that truss up or down. Second step is the truss skeleton. So we need to create a skeleton from the truss and then maybe, optionally, like I told you in the previous example, you're going to visualize them by adding some solids and some colors so that you can at least see how the structure behaves and with all the specific parts within that.
Second part in the workflow is where we define Robot. So first you need to define your analytical bars. You need to define what boundary conditions. So where are the supports and where are the bar end releases. Second step is assign the sections, because in here, we are going to use the real material. So you need to have a set of sections. In this case, we are going to use the circular hollow sections. For instance, are we going to take a diameter of 90 millimeter or 114 millimeter, 170 millimeter, and so on and so on-- so this one is also important. It can be even used as a driver for the optimization. So not only the Z values, but also which kind of section are we going to use. So that's actually broadening our optimization problem in this way.
And then the third step is where are we going to apply the loads? When we perform the analysis, we need to collect all of the information inside of Dynamo. So we need to collect the analytical model, you need to collect the supports, and you need to collect the loads. So the ones that you can see in here. All of this information will then be used by Robot. It will be consumed by Robot. And it will perform the analysis on it, and it will return as the results of those stresses, deformation, and the weight of that structure.
So in this case, I want to use the actual stress. I also want to get to the structure weight based by taking the reaction forces on my supports and the load case self weight, and this placement is also calculated in here just by taking the values for all of the loads together. But the stresses in here, if you say, I want to have a minimal stress score, a structure with, for instance, a stress equal to 1 Newton per square millimeter will be the most huge structure ever seen. You will have like cubes of maybe 1 meter to have it done in this way. So that's what we call over-designing, of course. So we need to define some limits and that actual stress objective. Because we don't want to have too heavy structures. It needs to be something reasonable.
So the evaluation of those results is done in a specific way. You need to give it a score. That's typical for optimization problems. Don't use the actual stress value just like this and say, minimize until you find the optimization-- or until you find the solution with minimal stress-- no, with minimal stress score. So how is this stress score working?
Well, we have three types of elements. There are elements that are over-designs, elements that are too heavy. Stresses, for instance, less than only 10% of the maximum allowable stress value for an element. Then we have the red ones, the ones that are overstressed. They are using more than 100% of the capacity of that structure. So they are not OK as well. And then within the stress ratio, these are the green ones. These are the perfect ones. These are the elements that have a stress ratio of something between 0.5 and 1. It's up to you how to define this. You could even narrow this down and say, for instance, I only want to have members with a stress ratio between 0.7 and 0.8. And then probably your loop will go forever because it really needs to find that specific solution. That might slow down your whole calculation as well a bit.
The score you give to it is the one that you see in the second column of that table. So the ones that are over-designs, we are going to give it a score with a low value. Not 0, but with a low value, because over-designing of a structure, it will influence the total score of that stress. The middle ones are the perfect ones. So they get a score 0. So which would mean, imagine that you have a structure of 30 elements, and each of these elements has a stress ratio between 0.5 and 1, then our stress score would be 0. 30 times 0 score is 0, so this would be our best solution that we could find if we only look at the actual force, for instance, or at the actual stress. But we're never going to find that kind of solution. There will always be, especially in trusses, there are always elements that are a little bit over-designed and we cannot have any overstressed of course.
So to avoid to have overstressed solutions, we give every element that is overstressed-- we give it like a really big score. In this case, we use the value 1,000. You can use more or different values, at least. If you want to use, for instance, 10,000, sure, fine. It will influence your score. That's what you have to find out yourself a little bit, depending on the problem you're working on. You're with me on that? Because this is a really important part.
OK. Let's go live. Before you start running that script, you need to open Dynamo and also you need to open Robot for this. So in this case, what you will see-- within the data set you will find a template. The Truss Shape Optimization Template. The reason why I'm using this is because it's containing already the loads-- no, sorry, the sections. And it's also containing the support definitions, because I'm using specific support definitions in here. So if you don't use that, the script will not run. So you need to use the template for it. Or if you want to use your own templates, then make sure you have defined, for instance, here your supports. I'm going to use this one, UY, and this specific support is used for lateral stability of that truss, because we are in a 3D environment. OK? So that's actually the only thing which is added in here in this template.
OK. Let's first start with the design exploration one, because that's the most important in here. There we go.
Five parts again. Input, geometry definition, analytical model, analysis, results. So it's the same as we had in the previous example. Five different steps you have in here to perform that analysis. So the input, as I told you, so we have these Z values 1 until 5. We also have the truss length, the truss height, and then this one here, section index. This is telling us which type of section to use. A little bit further on in the script, I'm going to load five different sections, and the index will tell us which one of those sections I need to use. So this is more like driving the size of each of the elements rather than driving the shape of your truss. Another one which is important is the directory path. This one is telling us where all the Robot models will be stored. So make sure you referred to the right folder in there.
Now, I'm not going to show you how to create the geometry for that truss because that's very simple, so we don't need to we don't need to go too much into depth for that. So when all of these lines are created-- so the typical lines within that truss-- we need to send them to Robot by the analytical bar nodes. So make sure that-- in this case, for this type of truss, that each segment represents a line, represents a bar. So what I mean with that is, if you have the truss, the horizontal members, you might define them as, for instance, an element from the starting point of the truss until the end point. What I did in this case here, I took all the segments in between the panels. So this way, you can evaluate parts of that beam instead of only having the maximum stress on the full length of the beam. No, I want to have the several parts of that beam-- especially, also, for the bottom chords of that truss, because the bottom chord, it needs to reshape. It will not be a straight line. At the end, we will have a curved line OK? So it needs to be segments as well.
All of these lines are then taken into the set release nodes. And this set release will define the bar end releases. The supports will be defined in here. The loads will be defined in there. So again, I'm not going to go too much in depth on that, because we explained it three years ago. The principle stayed exactly the same. So if you go to my AU online profile, you will find a recording of that class. Go into that class, listen to it, read the handout. It's only 125 pages, so it's really a nice lecture. And then you will find out how all of these nodes are actually working.
OK. Let's start. Put those two next to each other and run. There we go. Very simple truss at this moment. It's not deformed yet. There is no reshaping of this truss. And the results for it are this. So there is a stress score of 1,250. Meaning that we have zero overstressed elements. We have 25 over-designed elements. So our score is 25 times our scoring system for over-designing. And which value did we use for that? Let's have look. 50. So 50 times-- how many? 25. Should be the 1,250.
OK. The structure weight, it's taken from the self weight of that truss coming from Robot. So it's taking the specific sections, not just a material score like we did in the previous example-- it's taking the real weight of that structure-- and then the displacement. In this case, we have a displacement of 16 millimeters. So that's quite OK, you would say. But maybe-- yeah, as we see, it's over-designed. We have 25 elements that are over-designed, so we should change the shape a little bit until this value is as low as possible.
But if we do it in a design exploration method, it means that they have to change all of these values in here. So let's try this with 0.50, 0.80, 0.2, 1.5, whatever. Run. And we will get a new result. So this structure will change over there in Robot. Changes here in Dynamo, or at least it should change here. Well it doesn't. OK. Graphical issues. [COUGH] And we get our stress score. Oh, yeah-- 24. But that's only one element. So you can go on forever to find your best solution. So this is not the way how we optimize. But this is our backbone for the whole optimization routines that we are going to use further on-- the brute-force and the genetic algorithm. So this is an important step to take. Make this part of the script so that you are sure every thing of your analysis is working.
At the same time, all of these options are stored into this folder. So each time I'm running a new one-- you can see it in here. So date modified. So that's the time today. So each of these elements, or each of these models, at least, are stored into that folder. So this way it helps you to actually look for your solution that you generated and open it up in Robot and perform some different analysis on it, maybe.
OK. Next one. The brute-force-- how does that work? Actually, this brute-force method is similar to what we've done, but instead of-- let me go into this part here. Instead of taking everything into one long process in a Dynamo script, we are making a custom node of it. So this whole analysis that has been done in the design exploration, all of these nodes have been taken into one compact, custom node.
Now, you need to do it like that. And why is that? Because we are going to perform multiple runs of that same script. So what we are going to do is set up the first initial geometry and then generate, evaluate, evolve, generate, evaluate, evolve, and so on. The only thing with brute-force is that you're not evaluating, or evolving, at least, your input parameters by converting them to the best solution. No, it will generate multiple solutions within the range of the variables you assign to it. And that's why you need a custom node. Because, for instance, for that value of Z1, we will generate all kinds of solutions for Z1 equals something between 0 and 0.5. With a division of maybe 20 elements. The same will be done for Z2 and so on and so on. So that's actually what a brute-force will do in here. [COUGH]
So the defining, or the definition of our variables are depending on that. Especially the one in here. Number of design options. So in here, in that part of the script, we are going to tell Robot how many options it should generate. But it will generate it in a randomized way, because, as you can see here in the green part, the application domain of those variables, is randomized. I'm not just saying to Robot that it's to take values of Z1 of, for instance, 0, 0.1, 0.3, 0.4, and so on and so on and so on. No, it will randomize. Otherwise, we will get a really huge matrix of possible options. And with randomization, you will have all kinds of possible solutions in there. So you will narrow it down a little bit more. Otherwise, I would need 10,000 of solutions. And now, I only will need 100 because of that randomization. You will immediately see in the results what randomization actually has as an effect and this.
So this guy in here, truss shape analysis, this is the most important node, custom node, that we will need for this whole optimization routine, because this is containing everything that we just did in the manual design exploration. It's containing every node from that. It's containing the geometry definition. It's containing the analysis constrains definition, and also the analysis results extraction. So the analysis results are coming in the outputs box, or the output port as we call it in Dynamo protocol. OK?
So all the steps that are done, or ones we have defined, at least, that's part of the script with the custom nodes. And where we have the randomized values, if we start running the script, it will start generating all the possible solutions in Dynamo, and also all the possible solutions in Robot.
Afterwards, we need to extract or evaluate, at least, all the data. So all the data that came out of that full run of that script, 100 of design options, they need to be evaluated. So these are actually 100 options, and they have a specific score. And the values for Z1 until Z5, they are randomized. OK? That's how you get that scattered plot diagram. Because otherwise, you would have probably narrow it to only one part of your diagram, which could be solutions at the top right of it. And what I want to have are solutions very close to my origin of the diagram. So the structure weight which is as low as possible, and a displacement, which is as low as possible, or a stress score which is as low as possible.
Another method to analyze or visualize, at least, these results is using a package called Mandrill. And with Mandrill, we can visualize all of these results into that scatter plot diagram in four dimensions. So we have-- again, you have the x-axis, y-axis, the size of your dots, and the color of your dots telling you how good your solution is and here. And again, in here, every option, every design option, is stored into a specific dedicated folder on your disk. So this way, once you have explored the best option by using Excel or Mandrill, then you can find it in that folder, and then open up that Robot file and perform further analysis on it.
OK. Let's go live. As I told you, when you do live demo, it always goes wrong. So-- Brute-force searching. OK. Here we go.
So the sections that needs to be loaded in here-- and we also did that in the design exploration methods-- are defined like this. So we need to use string values for it. Make sure that these things, that these sections, at least, they exist in your Robot catalog. So don't just imagine some names for it. It needs to exist into your catalogs inside of Robot. And then first, you also need to load them into your project. Because if they are not loaded, then the analysis will not be performed. So that's a very important part also when you use Robot for it. And then the rest of this is exactly the same as we used in the design exploration. I just played a little bit more with these values. The score for a minimum stress and the score for a maximum stress so to evaluate the over-designed and the overstressed elements. And overstressing in here is, for instance-- or over-designed, for instance, ratio is less than 0.5. Let's say maybe for this one, 0.6. OK. Need to make sure.
Now, if we start running the script like this, it will not work with Robot yet. So this is just seeing around a little bit on how the values will be generated. So what we will have in here is 15 numbers, 15 design options. And these 15 design options are actually driving the randomization. So we need to randomize what section is going to be used. So for each of the elements in here, the first design option will use section 0, then another one will use section 1. This one in here, option number 13, will use section 3. OK? So that's purely randomization.
And in here, we do exactly the same. From 0 until 4. These values are representing, what kind of value we are using for Z1 until Z5. So index 0 is actually telling us that Z1 will be 1.8 meters. So at that part, the truss will be very, very small at that part, OK? So these are all the options. So we will have a list of 15 times those 5 values. OK? So that's the reason why you need to have a custom node. Because each design option will run now in a loop. So it will run 15 times. It will make 15 Robot models, calculate them, and give me results for 15 design options. That's actually what this is going to do by using randomization. OK?
OK, let's start. And to give you an idea on how this works-- let's delete these ones here. OK. And now start running. So each of the options is saved in there. So that might take some time. I thought for this part, it took like three minutes. So in the meantime-- yeah, we still have some time. 20 minutes. Perfect.
What you will see as well is, when it starts running, the first 20 until 30 design options, they go quite fast. But the moment you start working with 200 design options, you will see at the end the time between, for instance, generation or design option, let's say, 400 and design option 401, it might take a little bit longer. So towards the end, it takes a little bit more time to generate all of these options. That's something specifically happening in the connection between Dynamo and Robot. So don't worry if it takes longer than you would expect it, because this method takes-- it takes a lot of time when you're using brute-force. So make sure that you don't use irrelevant values for it. So think around it. Use your engineering capacity, your engineering brain, to define what would be actually the best range of values to use.
So in the meantime, we have those 15 design options. And those 15 design options generated a lot of geometries. Or a lot of data, at least. So we will have like 15 elements in here. So 0, 1, 2, until 14. So the first design option is a design option with this geometry. And I show it to you immediately. And these are the results for the design option. So we get a stress score of this 10 overstressed elements, 16 over-designed elements, 731 kilograms of structure. And then we have a deformation of 131 millimeters. So we already see in this case that design option 0, it's not a good one. Let's see how it looks like design, option 0. Or at least 1. Let's run. Zoom in.
Now, so that's actually what you get with randomization. So you cannot control that. So another way of generating your design options could have been by already forcing the analysis towards specific values. Or you create your randomization within a narrowed list. That's also a possibility. So that's why you need more than 15 design options. But probably in one of them, we will find like a good result. So let's see, for instance, design option 7. Looks a bit better already. If you look at the results, we get a stress score of 81. That's a bit better. But we have 27 over-designed elements, so this one is still too strong. It's not a relevant structure.
So to find your best solution, we are not going to explore them manually again, because then it wouldn't make sense. We just have automated the design, or the generation, at least, of the options. And in this case, I want to find the best solution. So one method is to export it to Excel. Again, if you play with it yourself, make sure that you refer to the right Excel file. And then run. And there we go. So these are the 15 options. You get a diagram with all the possible solutions organized depending on what type of evaluation you want to do. But for instance, if we take the structure weight displacement diagram, then we can see that this option might be a good one, for instance. The only pity about this is that in Excel, I could not-- I don't know. Maybe it's me, but I could not find a way to see the name of that design option in here. Because this is text it's not values. It's text. And then it gives some problems in Excel to find that option.
So for that particular reason, I actually started using Mandrill instead. And with Mandrill, we are going to take the same results and organize them in a new window. And sometimes this one is not working. In that case, you just copy/paste the nodes, and then it's working again. So there is a little bug in there that needs to be fixed. Here we have the same diagram, but now, in this case, I can see design option 12, for instance. Let's zoom in a little bit. This one. Design option 12. That's actually the best solution in here. So go back to your design options selection there and say run. So according to my analysis in here, evaluating 15 options, this should be the best solution. But only on these 15 options. It's not the best one. So imagine that you use this method for 200 options or 300 options and you will find a structure with a bottom chord which is a little bit an arc shape.
Now, you might have seen that I'm closing everything every time I've run the script. That's to really break the connection between Dynamo and Robot. So if you would open up a new script and run again, that script on the same session of Robot, it will mess up that whole connection. So the best way is to kill both of the processes and restart them once you start with a new project. OK? So again, the truss optimization template, and now, in this case, we are going into the last method, which is the genetic algorithms.
Now, with genetic algorithms in here, it's the same space. It's the same design space we are working on. And in this case, the truss shape fitness function is going to be created. And what is a fitness function? Well, it's actually the same analysis function, the same analysis custom node that we are using, but it needs to be adapted a little bit to work with Optimo. Again, it's explained in the handout of that class two or three years ago, so go into that and you will find out more how to make your own fitness function.
With the genetic algorithm optimization, we are not using that brute-force technique anymore. It will also use randomization, but only at the first parts of your script. So it will randomize the initial sets of values, and then it will convert by using mutation and crossover methods until it finds the best solution. And actually, you can use some terms for it. So the shape of your structure is what we call the phenotype. The parameters is actually the genotype. So these are actually the genes of my whole analysis. So these genes, they need to be modified in that way until we have an element, which is the fittest. That's why a fitness function is needed in here. The fitness function is evaluating the fitness score of your whole design.
So the objectives in here are exactly the same-- minimal stress, minimal structure weight, and minimal displacement. That's what we want to have by driving, again, the values for Delta-Z. So actually the whole process in here, the optimization process, it starts with a generation of an initial population. So the initial population are these randomized the values for Z1 until Z5. So these are the, in this case, a population of five elements. And the Optimo package will select two of the elements which are closest to the best solution. So you get a daddy and a mommy, they fall in love, they do some crossover and mutation, and then you get a baby truss. So that baby truss is getting back into the evolution. So it's the new generation. So you get a new generation of trusses until it stops. Until you say, for instance, I only want to have five generations. So that baby will find someone else and they will make a baby again until you have the evolved structure. The only thing in here is that, if we were to use this in real life with humans, it would be a bit scary because we will find the ideal persons and probably we would all look the same in here in this room. So let's not do that.
So at the end, within the results dialogues, you will get the optimal truss. It will give you what is the ideal section to use, and what are the ideal Delta-Z values to use. So this could be the solution for that truss. It's not an arc yet, but we will get there if we use way more of values. And maybe it doesn't need to be an arc because we might have used a very asymmetric loading as well. So that's also important to know. So how does this look like? So Robot is open. OK. Perfect.
It's starting by generating that initial population list. As I said, this is like randomizing. So we get here a list of values. let me show it to you. The first part is actually the section index, and then all the others are actually defining how Delta-Z should look like. So these are randomized. And now these values will evolve until that best solution by running that Optimo in here. So we are not going to run Optimo today because the reason for it is-- it's 10 to 10 already-- it takes five minutes to have 15 generations of two populations. And in this case, we need at least a population of 50 or 60 and use it with 8 generations. So that takes a little bit of time. So like 45 minutes until you get your solution. But at the end, if you run the script yourself, you will get these results in here, in those windows, like I just showed you into the presentation over there. So we will get these values at the back end of that structure.
Now, it's a very difficult method to use. I prefer-- if I work with Robot, I prefer using the brute-force technique instead, and then using Mandrill to find your best solution. Because with this part with Optimo, you really need to make sure that your fitness function is working well. So don't just use it like, OK, I have a solution with one click on a button, and then I will have my optimal result. No, you really have to know what you're working on. OK?
This last part, I'm not going to show anything live anymore in here. I'm going to use videos for that. It's the structure that we used last year, the Mars Torus Arena, and that thing from the Dynamo Design Slam. And it's, again, the same way of working. You configure a [? dire ?] grid. So you configure a geometry, you evaluate that structure, and then we are running some techniques on it. So in this case, we could use two techniques. One is called Fractal. That is a brute-force search optimization. Or we are using Refinery to perform genetic optimization in there.
Now, the evaluation of this structure is not about analysis. This one is about fabrication. So it's a conceptual analysis again. We want to define what the cost will we need-- or what-- excuse me. What will be the total cost of this structure to get to an ideal one? The cost is, for instance, something like the beam cuts, the connections. There will be three types of connections used in there, so what are the cost of that? But also-- and this is more important for these type of problems-- is the waste. If we start cutting all of these elements of the [? dire ?] grid from stock lengths-- so for instance, 12 meter, we always will end up with specific parts. We will have a rest. That's actually the waste. So Dynamo will define in here which part of the structure needs to be cut from which stock length. So that's actually the optimization technique used in here. And it's an algorithm which we call the FFD bin packing.
So bin packing, what does it do? Well, for instance, imagine that these are my beam lengths. I have one of 5 meter, for instance, 1 meter, 8 meter, and so on and so on. So the first part of the algorithm, it will sort of them in a decreased order. And then it will just-- very simple. It will pack them into the right bin. That's actually how this algorithm works. So it will do exactly the same inside of Dynamo to find the best cutting procedures. So it will make you a cut list. Beam number 1 needs to be taken from stock length number 3. Beam number two 2 to be taken from stock length to number 15. Until you have a minimal waste. So the waste in here is 3. So that's the rest. If you would sort it in a manual method, try it out yourself. Try to get to that solution without using decreased ordering. You will never get to that solution. You will have a waste of probably 8 maybe.
So with Fractal, we could take this whole script in here and then bring it to the cloud to perform that specific analysis and evaluate it. And I'm going a little bit fast forward in here because we're running over time a little bit. So this is what Fractal did. It generated all of the options in the cloud the same way as we are doing in the Refinery. But with Refinery, we do it local. In here, it's doing it in the cloud, but you only had the possibility of using that parallel coordinates diagram to find your best solution. So you get to a solution set of maybe nine specific configurations within the requirements. We have the very low waste percentage. They have a very low material cost. So this might be the ideal structure to use.
And Refinery. How does that one look like? Let's open it up. So here we have the structure with some nice colors. This is actually the part where that evaluation is performed. So where we are calculating what is the beam cut price, what will be the optimization for it according to the bin packing algorithm as I just told you, and then what is the cost of each of the steel connections. OK? So actually, when you need to run this in an optimization procedure with, for instance, Refinery, it's just as simple as this. You just need this script. You don't need to create any fitness function or need to create what we did with the shape analysis one to perform brute-force on it. No, you take your full script, and bring it to Refinery with a view extension in here. So which I did already, in this case. So I did a run already. So that's also something which is really nice about it. It's keeping your results stored. Its stored next to your script onto your disk. So this is helping you then afterwards to perform some more evaluations afterwards, maybe. While with the optimization I did and the second method, with the truss shape analysis, in there the results are saved into Excel, but if I want to see the results back into Dynamo, I have to run the script again.
So in here, again, we can change, for instance, the y-axis. So what is the waste? What is the material cost? Or maybe just waste percentage instead and a material cost? What is, for instance, the total cost? And what is the structure weight? So this way we can explore this whole thing and then find the ideal solution for it. So this might be the best one, I would say. Let's see. Material cost is very low. The waste percentage is very low. The size of the dot is also very small one. So we have a very low-cost structure in here. So I'm curious about which one it will be. So let's click it. This one is set to automatic, so the moment I click this dot, it will synchronize inside of Dynamo. Let's give it some time to update. OK. Let's give it some time. [LAUGH] It doesn't work. Seems like it didn't do anything. Let's click it again. Well.
[INAUDIBLE]
Excuse me?
[INAUDIBLE]
Yeah, that could be-- that it's more like a graphical issue. Yeah, you're right. And go back. No, it doesn't update. Well, like I told you, that's the fun part about live demos, it never works. That's why I recorded a video of it. And the video is also stored into that presentation. So I should have shown that video, but anyway. You know how the drill works. So you understood how this is working. As I told you, also have a way of working into tables so we could find the same results inside of this table in here. Maybe I could click on this one and it will update. Yeah. Now it's updating in here. So it's probably an issue between the connection of this diagram and the Dynamo script. So actually, that's why it's a beta. OK? Plus, also, I'm using 0.3.55, and on Monday, we released 0.4. I didn't want to use it yet because this was working already, so we didn't have time to change this whole thing.
Anyway, final part in here. So the data sets, where can you find them? I gave the link in here in the presentation. So you can just click on that link and then enjoy the data sets. Download them. Reach out to me if you notice any problems in that. So don't be scared to reach out. I will try to help if I can. Now, if you want to learn more about optimization, these are the classes I was referring to. So the first one in 2015, this is explaining Optimo more into detail, how to use it with Robot. And then last year, "Dynam(o)ite Your Steel Design" was about this Mars Torus Arena, the one we just saw. So it's explaining also way more how this part is working, how this optimization is working for the waste bin packing, and then also, on my blog, "Revit Beyond BIM," you can find all the data sets and presentations I gave on those two other sessions as well-- so that you can play with them as well.
And also, a very interesting link to refer to is a thesis by Jonathan from Denmark. And he created a whole thesis around optimization with genetic algorithms, and he also used Robot for it. And it's a very nice lecture, so I would definitely advise to go into that and read more, to learn more really, about the theory from this optimization and genetic optimization.
Downloads
Tags
Product | |
Industries | |
Topics |