Nested Optimization or Variable x Sizing?

조회 수: 2 (최근 30일)
Kiwi
Kiwi 2013년 2월 12일
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

답변 (1개)

Matt J
Matt J 2013년 2월 12일
편집: Matt J 2013년 2월 12일
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
Kiwi
Kiwi 2013년 2월 14일
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 2013년 2월 14일
편집: Matt J 2013년 2월 14일
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.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Genetic Algorithm에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by