如何优化具有多约束的非线性多输入模型

7次浏览(最近30天)
马克斯·范登·霍伊维尔
回答: 艾伦·韦斯 2021年9月20日
我在寻找生物过程的最佳参数值。最大限度地提高葡萄糖和木糖产量,同时限制糠醛的产量,并确保葡萄糖和木糖产量保持在可行的数量内(功能g_glu/g_xyl占含水率的百分比,因此不能大于1(100%))。
模型是这样的。
f(x1,x2,x3) = 2*f_glu(x1,x2,x3) + f_xyl(x1,x2,x3)(所有非线性函数)
约束:
10 < x1 < 50
130 < x2 < 170
11 < x3 < 89
1 . g_glu(x1,x2,x3) = 1
1 . g_xyl(x1,x2,x3) < 1
g_fur (x1, x2, x3) < 3
到目前为止,我已经尝试了实时优化编辑器和拉格朗日,但我不擅长编写代码,每次都卡住。我将把我写的一些代码写在下面
%实时优化编辑器
函数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;
结束
函数测查[c] = constraintFcn (optimInput)
%注意,如果没有不等式约束,指定c = []
%注意,如果没有相等约束,请指定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;
测查= [];
结束
%拉格朗日公式
信谊Z1 z2 z3
从正规化到(%)的转化率
Fur_min = 0.0020923694565838;
Fur_max = 0.17896582936453;
Glu_min = 0.26709662073194;
Glu_max = 0.916886995261484;
Xyl_min = 0.200345860452685;
Xyl_max = 1.00459544182241;
%函数(归一化)
glu_n = 0.442 * z2 - 0.207 * z3 - 0.367 * exp (z3) * exp (z1) + 1.33 * z3 * exp (z3) + 0.348;%葡萄糖功能(标准化)
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;木糖函数%(标准化)
Fur_n = 0.332*z3*z2^2 - 0.0289*z3 + 0.332*z2*z1^2 + 0.332*z1*z2*z3 + 0.00825;糠醛函数(归一化)
Glu_p = glu_n * (glu_max - glu_min) + glu_min;%葡萄糖功能在(%)
Xyl_p = xyl_n * (xyl_max - xyl_min) + xyl_min;木糖功能百分比(%)
Fur_p = fur_n * (fur_max - fur_min) + fur_min;糠醛函数在(%)
Glu = glu_p * 2.958;%葡萄糖功能(g)
Xyl = xyl_p * 1.5;木糖功能百分比(g)
%的约束
毛皮= (fur_p * 1.76/0.9 * 10) < = 3;(g/l)
% hb_z1 <= 50
% lb_z1 >= 10
% hb_z2 <= 170
% lb_z2 >= 130%如何设置这些约束?
% hb_z3 <= 89
% lb_z3 >= 11
% lb_glu >= 0
% hb_glu <= 1
% lb_xyl >= 0
% hb_glu <= 1
%的拉格朗日函数
F = 2*glu + xyl% maximazation函数
L = f - * lhs(fur)%拉格朗日公式
%计算
dL_dz1 = diff(L,z1) == 0;% L对z1的导数(时间)
dL_dz2 = diff(L,z2) == 0;L对z2的导数(温度)
dL_dz3 = diff(L,z3) == 0;L对z3的导数(conc)
dL_dlambda = diff(L,lambda) == 0;% L对的导数
%的结果
系统= [dL_dz1;dL_dz2;dL_dz3;dL_dlambda];建立方程组
[z1_val_n, z2_val_n, z3_val_n,lambda_val] = solve(system, [z1 z2 z3 lambda],“真实”的,真正的)解方程组并显示结果

答案(1)

艾伦·韦斯
艾伦·韦斯 2021年9月20日
我不认为你想要象征性的解决方案。你可能想要数字。所以我建议你用 具体问题具体分析优化工作流程 ,使用优化变量代替符号变量。
艾伦·韦斯
MATLAB数学工具箱文档

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!

翻译的