在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3039|回复: 1

求大神改写MATLAB程序

[复制链接]
发表于 2016-1-4 15:57:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
下图是算法的约束条件和目标函数以及我自己改的代码,求各位大神改正!!!谢谢啦
QQ图片20160104155820.jpg




错误为:

Error in ==> beteone>pso_mincon at 59
    fval=Fun(fhandle,fnonlin,best(i,);

Error in ==> beteone at 10
[gbest,fmin]=pso_mincon(@cost,@constraint,Lb,Ub,para);




% 改进的快速粒子群优化算法 (APSO):
function apso

Lb=[1 1 1 1 1 1 1 1 1 1 1 1 0.000015 1*10^12]; %下边界
Ub=[257 257 257 257 257 257 3.65 3.65 3.65 3.65 3.65 3.65 0.00003 25.6*10^12]; %上边界
% 默认参数
para=[25 150 0.95]; %[粒子数,迭代次数,gama参数]

% APSO 优化求解函数
[gbest,fmin]=pso_mincon(@cost,@constraint,Lb,Ub,para);

% 输出结果
Bestsolution=gbest % 全局最优个体
fmin

%% 目标函数
function f=cost(x)
f=(1-(2^(1/log(2)))^(2*sqtr((3.45*10^-6*x(1)*x(4)*x(6)^2*x(9)*x(11))/(1.024*x(3)*x(5)*x(7)*x(10)*x(12)^2*x(13)^2))/60))*(1-(2^(1/log(2)))^(sqrt((115*10^-6*x(1)*x(3)*x(12)*x(13))/(x(14)^2*4*pi^2*x(6)*x(7)*x(9)))/50*10^6))*(1-(2^(1/log(2)))^(5*10^-3/(x(3)*x(12)/x(6)*x(9)+x(5)*x(12)/x(6)*x(11)+1)*x(13)*2.5));

% 非线性约束
function [g,geq]=constraint(x)
% 不等式限制条件
Gain=2*sqtr((3.45*10^-6*x(1)*x(4)*x(6)^2*x(9)*x(11))/(1.024*x(3)*x(5)*x(7)*x(10)*x(12)^2*x(13)^2));
GBW=sqrt(115*10^-6*x(1)*x(3)*x(12)*x(13)/x(14)^2*4*pi^2*x(6)*x(7)*x(9));
POWER=((x(3)*x(12)/x(6)*x(9))+(x(5)*x(12)/x(6)*x(11))+1)*x(13)*2.5;
g(1)=500000-Gain;
g(2)=50000000-GBW;
g(3)=POWER-5*10^-3;
% 如果没有等式约束,则置geq=[];
geq=[];

%%  APSO Solver
function [gbest,fbest]=pso_mincon(fhandle,fnonlin,Lb,Ub,para)
if nargin<=14,
    para=[20 150 0.95];
end
n=para(1);% 粒子种群大小
time=para(2); %时间步长,迭代次数
gamma=para(3); %gama参数
scale=abs(Ub-Lb); %取值区间
% 验证约束条件是否合乎条件
if abs(length(Lb)-length(Ub))>0,
    disp('Constraints must have equal size');
    return
end

  alpha=0.2; % alpha=[0,1]粒子随机衰减因子
  beta=0.5;  % 收敛速度(0->1)=(slow->fast);

% 初始化粒子群
best=init_pso(n,Lb,Ub);

fbest=1.0e+100;
% 迭代开始
for t=1:time,     

%寻找全局最优个体
  for i=1:n,   
    fval=Fun(fhandle,fnonlin,best(i,);
    % 更新最有个体
    if fval<=fbest,
        gbest=best(i,;
        fbest=fval;
    end

  end

% 随机性衰减因子
alpha=newPara(alpha,gamma);

% 更新粒子位置
  best=pso_move(best,gbest,alpha,beta,Lb,Ub);  

% 结果显示

str=strcat('Best estimates: gbest=',num2str(gbest));

str=strcat(str,'  iteration='); str=strcat(str,num2str(t));

disp(str);

    fitness1(t)=fbest;
    plot(fitness1,'r','Linewidth',2)
    grid on
    hold on
    title('适应度')
end

% 初始化粒子函数
function [guess]=init_pso(n,Lb,Ub)
ndim=length(Lb);
for i=1:n,
    guess(i,1:ndim)=Lb+rand(1,ndim).*(Ub-Lb);
end

%更新所有的粒子 toward (xo,yo)
function ns=pso_move(best,gbest,alpha,beta,Lb,Ub)
% 增加粒子在上下边界区间内的随机性
n=size(best,1); ndim=size(best,2);
scale=(Ub-Lb);
for i=1:n,
    ns(i,:)=best(i,:)+beta*(gbest-best(i,:))+alpha.*randn(1,ndim).*scale;
end
ns=findrange(ns,Lb,Ub);

% 边界函数
function ns=findrange(ns,Lb,Ub)
n=length(ns);
for i=1:n,
  % 下边界约束
  ns_tmp=ns(i,:);
  I=ns_tmp<Lb;
  ns_tmp(I)=Lb(I);

  % 上边界约束
  J=ns_tmp>Ub;
  ns_tmp(J)=Ub(J);

  %更新粒子
  ns(i,:)=ns_tmp;
end

% 随机性衰减因子
function alpha=newPara(alpha,gamma);
alpha=alpha*gamma;

% 带约束的d维目标函数的求解
function z=Fun(fhandle,fnonlin,u)
% 目标
z=fhandle(u);

z=z+getconstraints(fnonlin,u); % 非线性约束

function Z=getconstraints(fnonlin,u)
% 罚常数 >> 1
PEN=10^15;
lam=PEN; lameq=PEN;

Z=0;
% 非线性约束
[g,geq]=fnonlin(u);

%通过不等式约束建立罚函数
for k=1:length(g),
    Z=Z+ lam*g(k)^2*getH(g(k));
end
% 等式条件约束
for k=1:length(geq),
   Z=Z+lameq*geq(k)^2*geteqH(geq(k));
end

% Test if inequalities
function H=getH(g)
if g<=0,
    H=0;
else
    H=1;
end

% Test if equalities hold
function H=geteqH(g)
if g==0,
    H=0;
else
    H=1;
end
发表于 2018-11-28 09:56:41 | 显示全部楼层
学习中。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-1 01:06 , Processed in 0.022691 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表