Matlab - fmincon matlab

   
Vista:

fmincon matlab

Publicado por chicago (1 intervención) el 13/03/2011 00:31:48
Hola ! estoy tratando de que el codigo que os adjunto a continuacion funcione, es una optimizacion de un problema no lineal con restricciones no lineales, no se que mas hacer!!!

muchas gracias a todos de antemano!!


function ex1
x0 = [-1.71;1.59;1.82;-0.763;-0.763];
options=optimset('display','iter')
options.MaxFunEvals = 10000;
options.MaxIter=10000;
[x,fval]=fmincon('Objfun',x0,[],[],[],[],[],[],'const',options)

function [c,ceq]=Const(x)
c(1)=x(1)^2+x(2)^2+x(3)^2+x(4)^2+x(5)^2-10;
c(2)=x(2)*x(3)-5*x(4)*x(5);
c(3)=x(1)^3+x(2)^3+1;
ceq=[];

function f=Objfun (x)
f= exp(x(1)*x(2)*x(3)*x(4)*x(5))-0.5*(x(1)^3+x(2)^3+1)^2;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO

fmincon matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 13/03/2011 19:26:41
Hola Chicago, revisé tu programa e hice unos arreglos, y ahora si se ejecutando el programa.
pasos para la ejecución.
1. Copia desde la palabra function ex1 hasta ceq=[]; y luego pegalo en el editor de matlab y guardalo con el nombre de ex1.m
2. Luego en la ventana de comandos de matlab, escribe ex1 y leugo haz enter y se ejecutará el programa.

%___________________________________________________________

function ex1
clc
x0=[-1.71;1.59;1.82;-0.763;-0.763];
options=optimset('display','iter')
options.MaxFunEvals = 10000;
options.MaxIter=10000;
[x,fval]=fmincon(@Objfun,x0,[],[],[],[],[],[],@const,options)

function [c,ceq]=const(x);
c(1)=x(1)^2+x(2)^2+x(3)^2+x(4)^2+x(5)^2-10;
c(2)=x(2)*x(3)-5*x(4)*x(5);
c(3)=x(1)^3+x(2)^3+1;
ceq=[];

function f=Objfun(x);
f= exp(x(1)*x(2)*x(3)*x(4)*x(5))-0.5*(x(1)^3+x(2)^3+1)^2;

%_____________________________________________________________


ejecucion en la ventana de comandos, escribir ex1 en la ventana de comandos y hacer enter y te saldrá lo siguiente

>> ex1

options =

Display: 'iter'
MaxFunEvals: []
MaxIter: []
TolFun: []
TolX: []
FunValCheck: []
OutputFcn: []
PlotFcns: []
ActiveConstrTol: []
Algorithm: []
AlwaysHonorConstraints: []
BranchStrategy: []
DerivativeCheck: []
Diagnostics: []
DiffMaxChange: []
DiffMinChange: []
FinDiffType: []
GoalsExactAchieve: []
GradConstr: []
GradObj: []
HessFcn: []
Hessian: []
HessMult: []
HessPattern: []
HessUpdate: []
InitialHessType: []
InitialHessMatrix: []
InitBarrierParam: []
InitTrustRegionRadius: []
Jacobian: []
JacobMult: []
JacobPattern: []
LargeScale: []
LevenbergMarquardt: []
LineSearchType: []
MaxNodes: []
MaxPCGIter: []
MaxProjCGIter: []
MaxRLPIter: []
MaxSQPIter: []
MaxTime: []
MeritFunction: []
MinAbsMax: []
NodeDisplayInterval: []
NodeSearchStrategy: []
NonlEqnAlgorithm: []
NoStopIfFlatInfeas: []
ObjectiveLimit: []
PhaseOneTotalScaling: []
Preconditioner: []
PrecondBandWidth: []
RelLineSrchBnd: []
RelLineSrchBndDuration: []
ScaleProblem: []
Simplex: []
SubproblemAlgorithm: []
TolCon: []
TolConSQP: []
TolGradCon: []
TolPCG: []
TolProjCG: []
TolProjCGAbs: []
TolRLPFun: []
TolXInteger: []
TypicalX: []
UseParallel: []

Warning: Trust-region-reflective algorithm does not solve this type of problem, using active-set
algorithm. You could also try the interior-point or sqp algorithms: set the Algorithm option to
'interior-point' or 'sqp' and rerun. For more help, see Choosing the Algorithm in the documentation.
> In fmincon at 472
In ex1 at 10

Max Line search Directional First-order
Iter F-count f(x) constraint steplength derivative optimality Procedure
0 6 0.0559002 0.01947 Infeasible start point
1 12 0.0207445 0.05098 1 -0.236 0.21
2 18 -0.325335 0.06856 1 -0.0638 6.99
3 24 -1.54376e+012 7.565e+004 1 -2.58 7.67e+010 Hessian modified
4 30 -3.6816e+060 4.28e+020 1 -5.17e+010 1.59e+051 Hessian modified
5 50 -6.07985e+070 3.487e+035 -6.1e-005 -1.15e+051 5.19e+059 Hessian modified; unbounded
6 56 -Inf 2.1e+179 1 2.09e+055 Inf Hessian modified; unbounded

No feasible solution found.

fmincon stopped because the size of the current search direction is less than
twice the default value of the step size tolerance but constraints were not
satisfied to within the default value of the constraint tolerance.

<stopping criteria details>


x =

1.0e+059 *

5.9441
-0.0649
0.0540
-0.5386
-0.5386


fval =

-Inf
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

fmincon matlab

Publicado por camilo García (52 intervenciones) el 29/09/2011 17:13:35
Estimado Jose:

junto con saludarte y agradeciendo toda la ayuda que aportas a traves de esta pagina, queria hacerte un par de consultas con respecto al uso de fmincon

existe la posibilidad de enviarte correos con mis consultas?

saludos

y de antemano gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

fmincon matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 30/09/2011 01:56:31
hola Camilo.
Puedes hacer tu pregunta via este enlace en este foro.

Claro que puedes enviar tu consultas a mi correo, pero esperas a tu turno para q conteste, no vayas a pensar q te voy a contestar rapido, muchas personas q envian a mi correo, quieren q le conteste al toque y eso no se puede. Porque hay dias q estoy completo en la univ o estoy ocupado, enseñando.

http://www.lawebdelprogramador.com/foros/agregar.php?id=132

saludos
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR MATLAB
jjcc94@hotmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

fmincon matlab

Publicado por camilo garcía camilo.garcia.g@gmail.com (52 intervenciones) el 30/09/2011 02:29:01
Estimado Jose:

mira, mi problema es el siguiente:

tengo que optimizar una serie de elementos por separado y guardar las variables de cada optimización. 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>=(f'c)^(1/2)/(4*4200)

Ast>=1.4*b*h/(4200)

2.5/100*b*d>=Ast

b>=min{0.3*h, 25}

mis variables son:

b x(1)
h x(2)
as1 x(3)
as2 x(4)
Ast x(5)

Mu1 y Mu2 son parametros, no entran en el problema de optimizacion.

copiando el ejemplo que tienes en el inicio realice el siguiente algoritmo:

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

saludos y de antemano gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

fmincon matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 30/09/2011 17:29:14
hola Camilo
haz tus preguntas en este link del foro.
http://www.lawebdelprogramador.com/foros/agregar.php?id=132

y gustoso te contestare. Estas haciendo tus preguntas en una pregunta abierta ya hace mucho tiempo y estas preguntas no llegan a mi correo, y por lo tanto en ocaciones te puedes quedar sin respuesta a tus pregunta, poruqe simplemente no sabre q estas pregutando en el foro.

saludos
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR MATLAB
jjcc94@hotmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar