我做发酵,现在已确定好了发酵过程的微分方程组变化轨迹,想用遗传算法优化补料过程,
即将补料作为17个等时间隔,流量作为变量,补料浓度固定。
采用gatool,但报告Ft变量未定义,苦思数日,虑不得脱,恳请各位大贤指导
编程如下:
function f=GA_addin(Ft)
Ft=zeros(17,1);
ts=0; tf=64;
[t,y]=ode45('fun',[ts,tf],[394,80000,2453]);
[t,y]=ode45('fun',[0:8:64],[394,80000,2453]);
y0=y(9,
;
y01=[y0,50];
n=0;
if n<200
for i=1:1:17
ts=64+8*(i-1); tf=64+8*i; v=Ft(i);n=n+v;
[t,y]=ode45('monod2',[ts,tf],y01);
y01=y(length(y));%标记最终的数值作为下次初值
end
f=y01(:,4);
f=-f;%最小值的定义
else
f=1000;
end
-------------------------------
function dy=fun(t,y) %菌营养生长
dy=zeros(3,1);
dy(1)=0.256*y(1)*(y(2)/(85978+y(2)))*(y(3)/(995.76+y(3)))*(1-(y(2)/y(3)/925.5)^0.9639)-0.00031*y(1);
dy(2)=-((0.256*(y(2)/(85978+y(2)))*(y(3)/(995.76+y(3)))*(1-(y(2)/y(3)/925.5)^0.9639)/1.382)+0.0426)*y(1);
dy(3)=-((0.256*(y(2)/(85978+y(2)))*(y(3)/(995.76+y(3)))*(1-(y(2)/y(3)/925.5)^0.9639)/12.38)+0.000000288)*y(1);
------------------------------------------------------------------
function dy=monod2(t,y) %菌产素情况
dy=zeros(5,1);
if y(2)<0
y(2)=0; dy(1)=0;dy(2)=0;
else
dy(1)=0.98*y(1)*(y(2)/(163960+y(2)))*(y(3)/(22083+y(3)))-0.0000589*y(1)-Ft/2500*y(1);
dy(2)=y(5)*(100000-y(2))-(0.98*(y(2)/(163960+y(2)))*(y(3)/(22083+y(3)))/0.7286+(0.000484*0.98*(y(2)/(163960+y(2)))*(y(3)/(22083+y(3)))+0.000394*y(1))/176950+0.0037)*y(1);
dy(3)=-(0.98*(y(2)/(163960+y(2)))*(y(3)/(22083+y(3)))/14.124+0.000000155288)*y(1);
dy(4)=0.000484*0.98*y(1)*(y(2)/(163960+y(2)))*(y(3)/(22083+y(3)))+0.000424*y(1)-0.000802*y(4);
dy(5)=v;
end
dy=[dy(1);dy(2);dy(3);dy(4);dy(5)];