필터 지우기
필터 지우기

How to optimize nonlinear multiple input model with multiple constraints

조회 수: 5 (최근 30일)
Max van den Heuvel
Max van den Heuvel 2021년 9월 16일
답변: Alan Weiss 2021년 9월 20일
I'm looking to find optimum parameter values for a bioprocess. Maximise glucose & xylose production, while constraining furfural produced, and make sure glucose & xylose production stay within feasable numbers (function g_glu/g_xyl is in % of aqeaous so it can not be bigger than 1 (100%)).
The model looks something like this.
maximize => f(x1,x2,x3) = 2*f_glu(x1,x2,x3) + f_xyl(x1,x2,x3) (all nonlinear functions)
constraints:
10 < x1 < 50
130 < x2 < 170
11 < x3 < 89
0 < g_glu(x1,x2,x3) < 1
0 < g_xyl(x1,x2,x3) < 1
g_fur(x1,x2,x3) < 3
So far I have tried the live optimisation editor and lagrange but I am not good at writing code and get stuck everytime. I'll dump some of the code that I've writting down below
% LIVE OPTIMISATION EDITOR
function f = objectiveFcn(optimInput)
z1 = optimInput(1);
z2 = optimInput(2);
z3 = optimInput(3);
f = -2*((0.442*z2-0.207*z3-0.367*exp(-z3)*exp(-z1)+1.33*z3*exp(-z3) +0.348) - (0.192*z1 - 0.624*exp(-3*z3)+ 0.507*z2^(1/2)- 0.11* abs(z3)^2*abs(z2)* abs(2*z3 +z1) + 0.66)*(0.916886995261484 - 0.26709662073194) + 0.26709662073194)*1.76 - ((0.192*z1 - 0.624*exp(-3*z3)+ 0.507*z2^(1/2)- 0.11* abs(z3)^2*abs(z2)* abs(2*z3 +z1) + 0.66) * (1.00459544182241 - 0.200345860452685) + 0.200345860452685)*2.958;
end
function [c,ceq] = constraintFcn(optimInput)
% Note, if no inequality constraints, specify c = []
% Note, if no equality constraints, specify ceq = []
z1 = optimInput(1);
z2 = optimInput(2);
z3 = optimInput(3);
c(1) = z1 - 50;
c(2) = 10 - z1;
c(3) = z2 - 170;
c(4) = 130 - z2;
c(5) = z3 - 89;
c(6) = 11 - z3;
ceq = [];
end
% LAGRANGE FORMULA
syms z1 z2 z3 lambda
%conversion rates from normalization to (%)
fur_min = 0.0020923694565838 ;
fur_max = 0.17896582936453 ;
glu_min = 0.26709662073194 ;
glu_max = 0.916886995261484 ;
xyl_min = 0.200345860452685 ;
xyl_max = 1.00459544182241 ;
% functions (normalized)
glu_n = 0.442*z2-0.207*z3-0.367*exp(-z3)*exp(-z1)+1.33*z3*exp(-z3) +0.348 ; % glucose function (normalized)
xyl_n = 0.192*z1 - 0.624*exp(-3*z3)+ 0.507*z2^(1/2)- 0.11* abs(z3)^2*abs(z2)* abs(2*z3 +z1) + 0.66 ; % xylose function (normalized)
fur_n = 0.332*z3*z2^2 - 0.0289*z3 + 0.332*z2*z1^2 + 0.332*z1*z2*z3 + 0.00825 ; % furfural function (normalized)
glu_p = glu_n * (glu_max - glu_min) + glu_min ; % glucose function in (%)
xyl_p = xyl_n * (xyl_max - xyl_min) + xyl_min ; % xylose function in (%)
fur_p = fur_n * (fur_max - fur_min) + fur_min ; % furfural function in (%)
glu = glu_p * 2.958 ; % glucose function in (g)
xyl = xyl_p * 1.584 ; % xylose function in (g)
% constraints
fur = (fur_p * 1.76 / 0.9 * 10) <= 3 ; % furfural CONSTRAINT in (g/l)
% hb_z1 <= 50
% lb_z1 >= 10
% hb_z2 <= 170
% lb_z2 >= 130 % HOW DO I PUT THESE CONSTRAINTS IN?
% hb_z3 <= 89
% lb_z3 >= 11
% lb_glu >= 0
% hb_glu <= 1
% lb_xyl >= 0
% hb_glu <= 1
% lagrange functions
f = 2*glu + xyl % maximazation function
L = f - lambda * lhs(fur) % lagrange formula
% calculations
dL_dz1 = diff(L,z1) == 0; % derivative of L with respect to z1 (time)
dL_dz2 = diff(L,z2) == 0; % derivative of L with respect to z2 (temp)
dL_dz3 = diff(L,z3) == 0; % derivative of L with respect to z3 (conc)
dL_dlambda = diff(L,lambda) == 0; % derivative of L with respect to lambda
% outcome
system = [dL_dz1; dL_dz2; dL_dz3; dL_dlambda]; % build the system of equations
[z1_val_n, z2_val_n, z3_val_n,lambda_val] = solve(system, [z1 z2 z3 lambda], 'Real', true) % solve the system of equations and display the results

답변 (1개)

Alan Weiss
Alan Weiss 2021년 9월 20일
I doubt that you want a symbolic solution. You probably want numbers. So I suggest that you use the Problem-Based Optimization Workflow, using optimization variables instead of symbolic variables.
Alan Weiss
MATLAB mathematical toolbox documentation

카테고리

Help CenterFile Exchange에서 Systems of Nonlinear Equations에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by