查看: 2283|回复: 4|关注: 0

[已解决] 位置 1 的索引超出数组范围(不能超过 1)。

[复制链接]

新手

12 麦片

财富积分


050


1

主题

3

帖子

0

最佳答案
%清空运行环境
clc
clear
%速度更新参数
c1 = 1.49445;
c2 = 1.49445;
maxgen = 300; %最大迭代次数
sizepop = 20; %种群规模数
%个体和速度最大最小值,即为位置速度边界
popmax = 2;
popmin = -2;
Vmax = 0.5;
Vmin = -0.5;
%种群初始化
for i = 1:sizepop
    %产生随机种群
    pop(i,:)=2*rands(1,2); %初始化粒子,随机生成1行2列的数组
    V(i,:)=0.5*rands(1,2); %初始化速度
   
    %计算粒子适应度值
    fitness(i)= fun(pop(i,:));
end
%寻找最初极值
[bestfitness bestindex] = min(fitness);%记录极值及其序号
zbest = pop(bestindex,:);%群体极值位置
gbest = pop;  %个体极值位置
w=0.8;%惯性权重
fitnessgbest = fitness; %个体极值适应度值
fitnesszbest = bestfitness; %群体极值适应度值
%迭代寻优
for i = 1:maxgen
    %粒子位置速度更新
    for j = 1:sizepop
        %速度更新
        V(j,:)=V(j,:)+c1*rand*(gbest(j,:)-pop(j,:))+c2*rand*(zbest-pop(j,:));
        V(j,find(V(j,:)>Vmax)) = Vmax;
        V(j,find(V(j,:)<Vmin)) = Vmin;
        
        %位置更新判断
        pop(j,:) = pop(j,:)+0.5*V(j,:);
        pop(j,find(pop(j,:)<popmin)) = popmin;
        pop(j,find(pop(j,:)>popmax)) = popmax;
        
        %适应度更新
        fitness(j) = fun(pop(j,:));
    end
   
    %个体极值和群体极值更新
    for j = 1:sizepop
        %个体极值更新
        if fitness(j) > fitnessgbest(j)
            gbest=pop(j,:);
            fitnessgbest(j) = fitness(j);
        end
        %群体极值更新
        if fitness(j) > fitnesszbest
            zbest=pop(j,:);
            fitnesszbest = fitness(j);
        end
    end
   
    %每代最优值记录到yy数组中
    result(i) = fitnesszbest;
end
%画图
plot(result);
title('最有个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);
ylabel('适应度值','fontsize',12);

%适应度函数
function y = fun(x)
%x 为粒子的位置
%y 为粒子的适应度值
y=(sqrt(x(1).^2+x(2).^2)./sqrt(x(1).^2+x(2).^2)+...
    exp((cos(2*pi*x(1))+cos(2*pi*x(2))))/2)-2.71289;
end


报错:位置 1 的索引超出数组范围(不能超过 1)。
出错 jobshop (line 204)
        V(j,:)=V(j,:)+c1*rand*(gbest(j,:)-pop(j,:))+c2*rand*(zbest-pop(j,:));


回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

7

主题

1508

帖子

321

最佳答案
  • 关注者: 77
发表于 2020-5-27 22:18:05 | 显示全部楼层 |此回复为最佳答案
仅供参考
  1. %清空运行环境
  2. clc
  3. clear
  4. %速度更新参数
  5. c1 = 1.49445;
  6. c2 = 1.49445;
  7. maxgen = 300; %最大迭代次数
  8. sizepop = 20; %种群规模数
  9. %个体和速度最大最小值,即为位置速度边界
  10. popmax = 2;
  11. popmin = -2;
  12. Vmax = 0.5;
  13. Vmin = -0.5;
  14. %种群初始化
  15. for i = 1:sizepop
  16.     %产生随机种群
  17.     pop(i,:)=2*rands(1,2); %初始化粒子,随机生成1行2列的数组
  18.     V(i,:)=0.5*rands(1,2); %初始化速度
  19.    
  20.     %计算粒子适应度值
  21.     fitness(i)= fun(pop(i,:));
  22. end
  23. %寻找最初极值
  24. [bestfitness,bestindex] = min(fitness);%记录极值及其序号
  25. zbest = pop(bestindex,:);%群体极值位置
  26. gbest = pop;  %个体极值位置
  27. w=0.8;%惯性权重
  28. fitnessgbest = fitness; %个体极值适应度值
  29. fitnesszbest = bestfitness; %群体极值适应度值
  30. %迭代寻优
  31. for i = 1:maxgen
  32.     %粒子位置速度更新
  33.     for j = 1:sizepop
  34.         %速度更新
  35.         V(j,:)=V(j,:)+c1*rand*(gbest(j,:)-pop(j,:))+c2*rand*(zbest-pop(j,:));
  36.         V(j,find(V(j,:)>Vmax)) = Vmax;
  37.         V(j,find(V(j,:)<Vmin)) = Vmin;
  38.         
  39.         %位置更新判断
  40.         pop(j,:) = pop(j,:)+0.5*V(j,:);
  41.         pop(j,find(pop(j,:)<popmin)) = popmin;
  42.         pop(j,find(pop(j,:)>popmax)) = popmax;
  43.         
  44.         %适应度更新
  45.         fitness(j) = fun(pop(j,:));
  46.     end
  47.    
  48.     %个体极值和群体极值更新
  49.     for j = 1:sizepop
  50.         %个体极值更新
  51.         if fitness(j) > fitnessgbest(j)
  52.             gbest(j,:)=pop(j,:);
  53.             fitnessgbest(j) = fitness(j);
  54.         end
  55.         %群体极值更新
  56.         if fitness(j) > fitnesszbest
  57.             zbest=pop(j,:);
  58.             fitnesszbest = fitness(j);
  59.         end
  60.     end
  61.    
  62.     %每代最优值记录到yy数组中
  63.     result(i) = fitnesszbest;
  64. end
  65. %画图
  66. plot(result);
  67. title('最有个体适应度','fontsize',12);
  68. xlabel('进化代数','fontsize',12);
  69. ylabel('适应度值','fontsize',12);

  70. %适应度函数
  71. function y = fun(x)
  72. %x 为粒子的位置
  73. %y 为粒子的适应度值
  74. y=(sqrt(x(1).^2+x(2).^2)./sqrt(x(1).^2+x(2).^2)+...
  75.     exp((cos(2*pi*x(1))+cos(2*pi*x(2))))/2)-2.71289;
  76. end
复制代码
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

3

帖子

0

最佳答案
 楼主| 发表于 2020-5-27 22:38:46 | 显示全部楼层

可以运行,但是没看到改的哪
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

7

主题

1508

帖子

321

最佳答案
  • 关注者: 77
发表于 2020-5-27 23:29:37 | 显示全部楼层
52行

新手

12 麦片

财富积分


050


1

主题

3

帖子

0

最佳答案
 楼主| 发表于 2020-5-28 13:29:17 | 显示全部楼层

老哥  你会用pso算法实现多级作业调度问题吗,就是有m个作业,每个作业不同的时间,在n台相同的机器上加工,怎么加工才能使总体时间最短。
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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