Problemas con fmincon sqp,
Publicado por Miguel (4 intervenciones) el 06/04/2018 22:55:07
tengo un problema al querer optimizar con fmincon un modelo de monod sin embargo no se cual sea la falla solo me sale el siguiente mensaje :
"criteria details
Optimization stopped because the relative changes in all elements of x are less than options.StepTolerance = 1.000000e-20, but the relative maximum constraint violation, 5.973173e-01, exceeds options.ConstraintTolerance = 1.000000e-20.
Optimization Metric Options max(abs(delta_x./x)) = 7.44e-21 StepTolerance = 1e-20 (selected) relative max(constraint violation) = 5.97e-01 ConstraintTolerance = 1e-20 (selected)"
la simulacion de la cual se obtuvieron los datos fue la siguiente:
y la programacion para la optimizacion es esta:
la funcion objetivo
y mis restricciones son estas
adjunto los datos en xls , estoy usando legendre de tercer orden para convertir la ecuaciones diferenciales a algebraicas y poder realizar las restricciones por eso tres puntos que estoy evaluando
"criteria details
Optimization stopped because the relative changes in all elements of x are less than options.StepTolerance = 1.000000e-20, but the relative maximum constraint violation, 5.973173e-01, exceeds options.ConstraintTolerance = 1.000000e-20.
Optimization Metric Options max(abs(delta_x./x)) = 7.44e-21 StepTolerance = 1e-20 (selected) relative max(constraint violation) = 5.97e-01 ConstraintTolerance = 1e-20 (selected)"
la simulacion de la cual se obtuvieron los datos fue la siguiente:
1
2
3
4
5
6
7
function dx =modelo(t,x)
mumax = 1.0;
yxs = 0.5;
ks=0.2;
dx(1)= (mumax*x(1)*x(2))/( ks + x(2));
dx(2) = -(1/yxs)*((mumax*x(1)*x(2))/(ks+x(2)));
dx=dx';
y la programacion para la optimizacion es esta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clear
clc
cin=xlsread('datosalex2','cin','A2:C46');
tie=cin(:,1);
biom=cin(:,2);
glic=cin(:,3);
pt=xlsread('datosalex2','dat','B2:D10');
po=pt(:,1);
lb=pt(:,2);
ub=pt(:,3);
A=[]; b=[]; Aeq=[]; beq=[]; % Matrices y vectores de las restricciones lineales: Vacio
options = optimoptions('fmincon','Algorithm','sqp','Display','iter','TolCon',1e-20,'TolX',1e-20);
[p,fval,exitflag,output,lambda,grad,hessian]=fmincon('funalex',po,A,b,Aeq,beq,lb,...
ub,'resalex',options)
xlswrite('datosalex2',p,'res','B2');
la funcion objetivo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function f=funalex(x)
val=xlsread('datosalex2','valpc','A3:C5');
cin=xlsread('datosalex2','cin','A2:D16');
ab=xlsread('datosalex2','valpc','L2:M2');
tie=cin(:,1);
biom=cin(:,2);
glic=cin(:,3);
pm1=0.55556;
pm2=0.88889;
pm3=0.55556;
mb=max(biom);
mg=max(glic);
a=ab(1);
b=ab(2);
os1=(((((val(1,1)-x(2))/mb )^2)*pm1)+((((val(2,1)-x(3))/mb )^2)*pm2)+...
((((val(3,1)-x(4))/mb )^2)*pm3));
os2=(((((val(1,2)-x(5))/mg )^2)*pm1)+((((val(2,2)-x(6))/mg )^2)*pm2)+...
((((val(3,2)-x(7))/mg )^2)*pm3));
f=(os1+os2)*(b-a)/2;
y mis restricciones son estas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function [c,ceq]=resalex(x)
xo=0.2;
so=10;
dx1=(x(1)*x(2)*x(5))/(x(8)+x(5)); %bio
dx2=(x(1)*x(3)*x(6))/(x(8)+x(6));
dx3=(x(1)*x(4)*x(7))/(x(8)+x(7));
ds1=-(1/x(9))*(x(1)*x(2)*x(5))/(x(8)+x(5));
ds2=-(1/x(9))*(x(1)*x(3)*x(6))/(x(8)+x(6));
ds3=-(1/x(9))*(x(1)*x(4)*x(7))/(x(8)+x(7));
ko=xlsread('datosalex2','cof','A2:D5');
kc=ko(:,1);
k1=ko(:,2);
k2=ko(:,3);
k3=ko(:,4);
c=[];
ceq=[
k1(1)*xo+k1(2)*x(2)+k1(3)*x(3)+k1(4)*x(4)-dx1;
k2(1)*xo+k2(2)*x(2)+k2(3)*x(3)+k2(4)*x(4)-dx2;
k3(1)*xo+k3(2)*x(2)+k3(3)*x(3)+k3(4)*x(4)-dx3;
k1(1)*so+k1(2)*x(5)+k1(3)*x(6)+k1(4)*x(7)-ds1;
k2(1)*so+k2(2)*x(5)+k2(3)*x(6)+k2(4)*x(7)-ds2;
k3(1)*so+k3(2)*x(5)+k3(3)*x(6)+k3(4)*x(7)-ds3;
];
adjunto los datos en xls , estoy usando legendre de tercer orden para convertir la ecuaciones diferenciales a algebraicas y poder realizar las restricciones por eso tres puntos que estoy evaluando
- datosalex2.rar(12,0 KB)
Valora esta pregunta


0