查看: 2669|回复: 2|关注: 0

[已答复] 无法执行赋值,因为左侧和右侧的元素数目不同。

[复制链接]

新手

5 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
发表于 2019-8-5 11:25:32 | 显示全部楼层 |阅读模式
clear all;
close all;
clc;
N=100;
D=10;
T=200;
c1=1.5;
c2=1.5;
w=0.8;
Xmax=20;
Xmin=-20;
Vmax=10;
Vmin=-10;
x=rand(N,D)*(Xmax-Xmin)+Xmin;
v=rand(N,D)*(Vmax-Vmin)+Vmin;
p=x;
pbest=ones(N,1);
for i=1:N
    pbest(i)=func1(x(i,:));
end
g=ones(1,D);
gbest=inf;
for i=1:N
    if(pbest(i)<gbest)
        g=p(i,:);
        gbest=pbest;
    end
end
gb=ones(1,T);
for i=1:T
    for j=1:N
        if(func1(x(j,:))<pbest(j))
            p(j,:)=x(j,:);
            pbest(j)=func1(x(j,:));
        end
        if(pbest(j)<gbest)
            g=p(j,:);
            gbest=pbest(j);
        end
        v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))+c2*rand*(g-x(j,:));
        x(j,:)=x(j,:)+v(j,:);
        for ii=1:D
            if(v(j,ii)>Vmax)||(v(j,ii)<Vmin)
                v(j,ii)=rand*(Vmax-Vmin)+Vmin;
            end
            if(x(j,ii)>Xmax)||(x(j,ii)<Xmin)
                x(j,ii)=rand*(Xmax-Xmin)+Xmin;
            end
        end
    end
51行 gb(i)=gbest;
end
g;
gb(end);
figure
plot(gb)
xlabel('迭代次数');
ylabel('适应度值');
title('适应度进化曲线')
function result=func1(x)
summ=sum(x.^2);
result=summ;
end
无法执行赋值,因为左侧和右侧的元素数目不同。


出错 Untitled (line 51)
    gb(i)=gbest;
请问大佬们这个怎么解决?我就抄的书上的代码还在报错。

论坛优秀回答者

中级

691 麦片

财富积分


5001500


0

主题

340

帖子

63

最佳答案
  • 关注者: 11
发表于 2019-8-5 20:13:30 | 显示全部楼层
经过运行,发现gb为1*200的行向量,gbest为100*1的列向量,gb(i)为一个数,gb(i)=gbest;是将一个向量赋值给一个数,所以报错,看这程序应该是种优化算法,像GA、PSO之类的,寻找最优个体,应该某部程序抄错了,仔细检查一下吧

新手

5 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
 楼主| 发表于 2019-8-8 09:24:17 | 显示全部楼层
20141303 发表于 2019-8-5 20:13
经过运行,发现gb为1*200的行向量,gbest为100*1的列向量,gb(i)为一个数,gb(i)=gbest;是将一个向量赋值给 ...

你好,我检查了一下感觉没有抄错,请问一下这个程序应该怎么改呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

快速回复 返回顶部 返回列表