Matlab Pso算法

问题描述

我正在尝试使用MATLAB中的PSO优化器解决符号优化问题。变量r x a c n thez z是符号性的,并且CD通过积分r计算。 CD是具有自由变量a,n,theta和lb和ub的目标函数。完整代码如下:

    syms r x a c n theta z
    assume(n,'positive');
    D=0.24; 
    L=2;   
    f=L/D;  
    b=.8;   
    a0=0.02; 
    db=0.05;  
    V=1;    
    Re=(V*(D/2))/0.000001; 
    Cf=(0.075/(((log10(Re))-2)^2))+0.00025;
    
    % Define r(x) 
    c=L-a-b-a0;

    r1=0.5*D*(2*x/a)^(1/n);
    I1=simplify(int(2*pi*r1,x,a0,a));
    r2=D/2;
    I2=simplify(int(2*pi*r2,a,a+b));
    r3=(0.5*D)-((((3*D)/(2*(c)^2))-(tan(theta)/c))*(x-a-b)^2)+(((D/c^3 ... 
    (tand(theta)/c^2))*(x-a-b)^3); 
    I3=simplify(int(2*pi*r3,a+b,L));
    A=simplify(I1+I2+I3);
    Sn=pi*(D^2/4);
    Cdstar=Cf*(1+(60*f^-3 )+(0.0025*f))*(A/(L^2));
    Cdb=0.029*((db/D)^3)*(Cdstar^-0.5)*(Sn/(L^2));
    CD=simplify(Cdstar+Cdb);

    %optimization problem

    objective=matlabFunction(CD,'Vars',[a,n,theta])
    nVar=3;
    
    lb = [deg2rad(5),0.25,a0];
    ub = [deg2rad(60),5,L/2];


    options = 
    optimoptions('particleswarm','SwarmSize',100,'HybridFcn',@fmincon);

    [z,fval,exitflag,output] = particleswarm(objective,nVar,lb,ub,options)

这是我得到的错误:

@((a,n,theta)pi。* 4.404634153141517e-4 + pi。* 1.0。/ sqrt(pi。 4.404634153141517e-4-pi。(a。* 5.0-6.0 )。*1.0./(a.5.0e+1-5.9e+1).^3.(a.*2.32335e+6+tan((θ*p​​i)./1.8 e + 2)。* 4.779e +6-tanθ。* 6.2658e + 6-a。^ 2. *tanθ。* 2.655125e + 7 + a。^ 3. *tanθ。 * 1.4875e + 7-a。^ 4. * tan(θ)。* 3.125e + 6-a。* tan((θ* pi)./ 1.8e + 2)。* 1.59975e + 7 + a。 * tan(theta)。* 2.1063e + 7 + a。^ 2. * tan((theta.pi)./ 1.8e + 2)。* 2.008125e + 7-a。^ 3. * tan((theta 。* pi)./ 1.8e + 2)。* 1.1203125e + 7 + a。^ 4. * tan((theta.pi)./ 1.8e + 2)。* 2.34375e + 6-a。^ 2 。* 1.98e + 6 + a。^ 3. * 5.625e + 5-9.08811e + 5)。* 1.223509486983755e-5-(n。 pi。((a。* 2.5e + 1)。^(-1.0./n)-2.0。^(1.0./n+1.0)。* a。* 2.5e + 1)。* 1.101158538285379e-5)./(n + 1.0))。 9.440104166666668e-7-pi。(a。* 5.0-6.0)。* 1.0 ./(a。 5.0e + 1-5.9e + 1)。^ 3。 (a。* 2.32335e + 6 + tan((theta.pi)./ 1.8e + 2)。* 4.779e + 6-tan(theta)。* 6.2658e + 6-a。^ 2. * tan( * 2.655125e + 7 + a。^ 3. *tanθ。* 1.4875e + 7-a。^ 4. *tanθ。* 3.125e + 6-a。* tan((theta) 。* pi)./ 1.8e + 2)。* 1.59975e + 7 + a。*tanθ。* 2.1063e + 7 + a。^ 2. * tan((theta.pi)./ 1.8e +2)。* 2.0081 25e + 7-a。^ 3. * tan((theta.pi)./ 1.8e + 2)。* 1.1203125e + 7 + a。^ 4. * tan((theta.pi)./ 1.8e +2)。* 2.34375e + 6-a。^ 2. * 1.98e + 6 + a。^ 3. * 5.625e + 5-5-9.08811e + 5)。* 1.223509486983755e-5-(n。 pi。(((a。* 2.5e + 1)。^(-1.0./n)-2.0.^(1.0./n+1.0).*a.*2.5e+1).*1.101158538285379 e-5)./(n + 1.0)

输入参数不足。

错误 symengine> @(a,n,θ)pi。* 4.404634153141517e-4 + pi。* 1.0。/ sqrt(pi。 4.404634153141517e-4-pi。(a。* 5.0-6.0) 。* 1.0 ./(a。 5.0e + 1-5.9e + 1)。^ 3。(a。* 2.32335e + 6 + tan((theta.pi)./ 1.8e +2)。* 4.779e +6-tanθ。* 6.2658e + 6-a。^ 2. *tanθ。* 2.655125e + 7 + a。^ 3. *tanθ。* 1.4875e + 7-a。^ 4. * tan(θ)。* 3.125e + 6-a。* tan((theta.pi)./ 1.8e + 2)。* 1.59975e + 7 + a。* tan(θ)。* 2.1063e + 7 + a。^ 2. * tan((θ* pi)./ 1.8e + 2)。* 2.008125e + 7-a。^ 3. * tan((θ。 * pi)./ 1.8e + 2)。* 1.1203125e + 7 + a。^ 4. * tan((θ* pi)./ 1.8e + 2)。* 2.34375e + 6-a。^ 2。 * 1.98e + 6 + a。^ 3. * 5.625e + 5-9.08811e + 5)。* 1.223509486983755e-5-(n。 pi。((a。* 2.5e + 1 )。^(-1.0./n)-2.0.^(1.0./n+1.0).*a.*2.5e+1).*1.101158538285379e-5)./(n+1.0)). 9.440104166666668e-7-pi。(a。* 5.0-6.0)。* 1.0 ./(a。 5.0e + 1-5.9e + 1)。^ 3。( a。* 2.32335e + 6 + tan((theta.pi)./ 1.8e + 2)。* 4.779e + 6-tantthe。* 6.2658e + 6-a。^ 2. * tan(theta) * 2.655125e + 7 + a。^ 3. *tanθ。* 1.4875e + 7-a。^ 4. *tanθ。* 3.125e + 6-a。* tan((θ。 * pi)./ 1.8e + 2)。* 1.59975e + 7 + a。*tanθ。* 2.1063e + 7 + a。^ 2. * tan((θ* pi)./ 1.8e + 2)。 * 2.008125e + 7-a。^ 3. * tan((theta.pi)./ 1.8e + 2)。* 1.1203125e + 7 + a。^ 4. * tan((theta.pi)./ 1.8e + 2)。* 2.34375e + 6-a。^ 2. * 1.98e + 6 + a。^ 3. * 5.625e + 5-9.08811e + 5)。* 1.223509486983755e-5-(n。 pi。(((a。* 2.5e + 1)。^(-1.0./n)-2.0.^(1.0./n+1.0).*a.*2.5e+1)。 * 1.101158538285379e-5)./(n + 1.0)

particleswarm> makeState中的错误(第694行) firstFval = objFcn(state.Positions(1,:));

particleswarm中的错误> pswcore(第169行)状态= makeState(nvars,lbMatrix,ubMatrix,objFcn,options);

Particleswarm中的错误(第151行)[x,fval,exitFlag,output] = pswcore(objFcn,nvars,lbRow,ubRow,output,options);

MYRING_SYMS_optimisation_K错误(第56行)[z,fval,exitflag,output] =粒子温暖(目标,nVar,磅,ub,选项)

原因: 初始目标函数评估失败。 PARTICLESWARM无法继续。

解决方法

fun仅接受一个参数,它是带有nvars元素的向量。来自particleswarm doc

x = particleswarm(fun,nvars)试图找到一个向量x,该向量x达到局部最小值funnvarsfun尺寸(设计变量的数量)。

因此,您需要声明一个仅包含1个参数的新目标函数:

[z,fval,exitflag,output] = particleswarm( ...
    @(x) objective(x(1),x(2),x(3)),...
    nVar,lb,ub,options)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...