duda con optimizacion en matlab
Publicado por Camilo García (52 intervenciones) el 30/09/2011 18:07:24
Estimados:
tengo que optimizar una serie de elementos por separado y guardar las variables de cada optimización a traves de la herramienta matlab. Esto es en especifico para optimizar la sección transversal de vigas y pilares de hormigón armado. en este momento me encuentro programando el algoritmo para optimizar vigas, primero quiero optimizar una viga, para luego hacer un bucle y optimizar todas las vigas. el problema que tengo que al realizar el algoritmo me dan cosas incoherentes, se que puedo tener errores en el ingreso de datos, por lo que me gustaria ver si puedes apoyarme en la creacion del algoritmo de un elemento, para luego hacerlo para todos.
escribire a continuacion la funcion objetivo y restricciones del problema( para un elemento):
funcion objetivo:
f=(b*h*(1-ast)*0.0024+ast*0.00785)*500
restricciones:
as1+as2=Ast
0.9*as1*(4200)*(h)*(1-(0.59)*as1*(4200)/(b*h*(300)))>=Mu1
0.9*as2*(4200)*(h)*(1-(0.59)*as1*(4200)/(b*h*(300)))>=Mu2
Ast>=(30)^(1/2)/(4*4200)
Ast>=1.4*b*h/(4200)
2.5/100*b*d>=Ast
b>=min{0.3*h, 25}
mis variables del problema de optimización son:
b x(1)
d x(2)
as1 x(3)
as2 x(4)
Ast x(5)
Mu1 y Mu2 son parametros, no entran en el problema de optimizacion (son numeros fijos).
haciendo una analogia a un codigo que encontre e esta misma pagina (http://www.lawebdelprogramador.com/foros/Matlab/1256322-fmincon_matlab.html) y acondicionando a mi problema propongo lo siguiente:
function vigas
clc
x0=[10;20;2;2;4];
options=optimset('display','iter')
options.MaxFunEvals = 10000;
options.MaxIter=10000;
[x,fval]=fmincon(@Optvigas,x0,[],[],[],[],[],[],@const,options)
function [c,ceq]=const(x);
c(1)=Mu1-(0.9)*x(3)*(420)*x(2)*(1-(0.59)*x(3)*420/(x(1)*x(2)*30));
c(2)=Mu2-(0.9)*x(4)*(420)*x(2)*(1-(0.59)*x(4)*420/(x(1)*x(2)*30));
c(3)=(30)^(1/2)/(4*420)-x(5);
c(4)=1.4*x(1)*x(2)/(420)-x(5)
c(5)=x(5)-2.5/100*x(1)*x(2);
c(6)=0.3*x(2)-x(1);
c(7)=25-x(1);
ceq(1)=x(3)+x(4)-x(5);
function f=Optvigas(x);
f= (x(1)*x(2)*(1-x(5))*0.0024+x(5)*0.00785)*500
si alguien me puede echar una mano seria espectacular
saludos y gracias
tengo que optimizar una serie de elementos por separado y guardar las variables de cada optimización a traves de la herramienta matlab. Esto es en especifico para optimizar la sección transversal de vigas y pilares de hormigón armado. en este momento me encuentro programando el algoritmo para optimizar vigas, primero quiero optimizar una viga, para luego hacer un bucle y optimizar todas las vigas. el problema que tengo que al realizar el algoritmo me dan cosas incoherentes, se que puedo tener errores en el ingreso de datos, por lo que me gustaria ver si puedes apoyarme en la creacion del algoritmo de un elemento, para luego hacerlo para todos.
escribire a continuacion la funcion objetivo y restricciones del problema( para un elemento):
funcion objetivo:
f=(b*h*(1-ast)*0.0024+ast*0.00785)*500
restricciones:
as1+as2=Ast
0.9*as1*(4200)*(h)*(1-(0.59)*as1*(4200)/(b*h*(300)))>=Mu1
0.9*as2*(4200)*(h)*(1-(0.59)*as1*(4200)/(b*h*(300)))>=Mu2
Ast>=(30)^(1/2)/(4*4200)
Ast>=1.4*b*h/(4200)
2.5/100*b*d>=Ast
b>=min{0.3*h, 25}
mis variables del problema de optimización son:
b x(1)
d x(2)
as1 x(3)
as2 x(4)
Ast x(5)
Mu1 y Mu2 son parametros, no entran en el problema de optimizacion (son numeros fijos).
haciendo una analogia a un codigo que encontre e esta misma pagina (http://www.lawebdelprogramador.com/foros/Matlab/1256322-fmincon_matlab.html) y acondicionando a mi problema propongo lo siguiente:
function vigas
clc
x0=[10;20;2;2;4];
options=optimset('display','iter')
options.MaxFunEvals = 10000;
options.MaxIter=10000;
[x,fval]=fmincon(@Optvigas,x0,[],[],[],[],[],[],@const,options)
function [c,ceq]=const(x);
c(1)=Mu1-(0.9)*x(3)*(420)*x(2)*(1-(0.59)*x(3)*420/(x(1)*x(2)*30));
c(2)=Mu2-(0.9)*x(4)*(420)*x(2)*(1-(0.59)*x(4)*420/(x(1)*x(2)*30));
c(3)=(30)^(1/2)/(4*420)-x(5);
c(4)=1.4*x(1)*x(2)/(420)-x(5)
c(5)=x(5)-2.5/100*x(1)*x(2);
c(6)=0.3*x(2)-x(1);
c(7)=25-x(1);
ceq(1)=x(3)+x(4)-x(5);
function f=Optvigas(x);
f= (x(1)*x(2)*(1-x(5))*0.0024+x(5)*0.00785)*500
si alguien me puede echar una mano seria espectacular
saludos y gracias
Valora esta pregunta
0