Nested Optimization or Variable x Sizing?

2 views (last 30 days)
Kiwi
Kiwi on 12 Feb 2013
Hi there,
I'm trying to optimize a composite laminate plate and would like to automate the selection process using optimtool functions. I have already created a program that can optimize the strength of the plate with a fixed number of layers, using either fmincon or fminunc. However, I would like the program to be able to minimize the number of layers used while still meeting a minimum strength requirement, but I'm not sure how to do this.
For clarification, I have:
n=number of layers
theta=[ theta_1 theta_2 ... theta_n ] (these are the laminate ply orientations)
I want the program to minimize the number of layers n but still have a safety factor above 2 (this would be a non-linear constraint). What the program does is it uses the genetic algorithm to choose the number of layers (since ga can handle integer optimization) and then it uses fmincon with the non-linear constraint function to maximize the strength of the particular number of layers, where the SF must be over 2 at least. It's kind of strange having the x value for the genetic algorithm also used as the output to minimize (if the SF is met), and that may be causing problems. It has been running for several hours now, but I'm not sure if it's working.
Is this nested optimization strategy the only way to do this or is there another way, for example by varying the number of inputs to the function or having dummy variables that aren't counted towards the theta angles when there are less layers?
Thanks! ~K

Answers (1)

Matt J
Matt J on 12 Feb 2013
Edited: Matt J on 12 Feb 2013
I don't immediately see how you can avoid the nested optimization, but simple bisection should be more efficient than ga(). You know that the maximum SF is a monotonically increasing function of n (I assume that more layers always means more strength and higher SF), so you should be able to use bisection over n to find the threshold n where SF_max(n) crosses 2.
  5 Comments
Kiwi
Kiwi on 14 Feb 2013
Yep, you're absolutely right! So in this case, I would just need to test progressively smaller numbers of layers until the performance criterion isn't met. When you put it that way, I guess I do only need bisection, or a for loop.
Matt J
Matt J on 14 Feb 2013
Edited: Matt J on 14 Feb 2013
I would just need to test progressively smaller numbers of layers until the performance criterion isn't met.
Or progressively larger numbers of layers (starting from n=1). If you do it that way, your problem appears in fact to be a Dynamic Program where the value function V_n is the optimized strength of the first n layers.

Sign in to comment.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!