当前位置:   article > 正文

2024年新算法,教育竞争优化器,原理详解,MATLAB代码免费获取

教育竞争优化算法

教育竞争优化器(Educational Competition Optimizer, ECO)是一种受现实世界教育资源分配场景启发的元启发式优化算法。该算法将迭代过程分为三个不同的阶段:小学、初中和高中。作为一种有效的基于人类的优化模型,ECO利用了一种创新的轮盘赌结构,在三个不同的阶段迭代循环。这种循序渐进的方法逐渐缩小了潜在解决方案的范围,反映了教育系统内部的逐步竞争。在保证种群质量的同时,ECO有效地增强了种群多样性,努力避免局部最优。

de440086b054a080678b127a6b06ac3b.png

该成果于2024年发表在计算机领域四区SCI期刊“International Journal of Systems Science”上。

03bdc11af1bc44986a6447a724fcd725.png

1、算法原理

(1)种群初始化

鉴于教育的缺失会导致社会混乱,我们使用逻辑混沌映射来模拟这一现象。Logistic混沌映射的初始化公式,考虑了N的种群规模、Maxiter的最大迭代次数以及Lb(下界)和Ub(上界)的搜索界,可以表示为:

其中xi表示第i次迭代值,xi - 1表示前一次迭代值。将混沌值xi映射到搜索空间:

(2)第一阶段:小学阶段

在小学阶段,学校通过考虑人口的平均位置来确定合适的教学地点。另一方面,学生们根据邻近学校的远近来设定个人目标。在每次迭代中,根据健康程度排名前20%的人口被归类为学校,而剩下的80%构成学生。重要的是要注意,角色分配给个人(如学校或学生)的过程可以在整个迭代过程中动态变化。W是自适应步长。下图直观地说明了学校和学生在小学阶段采用的行为策略。

b2078313c085faafae33193ffa4fb5b8.png

考虑到安全和便利等因素,小学生通常会选择离家近的学校。反过来,教育机构经常调整他们的位置,以适应学生群体的平均距离,促进可达性和出勤率。这种行为的数学表示由下式表示。

在式中,Xt i表示当前位置,而Xt+1 i表示后续更新的位置。Xt imean表示第i所学校在第n轮迭代中向量各元素的平均位置,Levy(D)表示Levy分布。close(X)表示离X最近的学校位置。Randn表示服从正态分布的随机变量。相关参数和功能可以进一步说明如下:

Xt imean表示第i所学校在第n轮迭代中向量各元素的平均位置。Xt mean表示当前蜂群的平均位置,记为Xt mean。他们重新计算为showineq。其中Xkt表示向量Xti中的第k个元素。

Levy分布:Levy分布的规则用下式表示,其中γ的赋值为1.5。

(3)第二阶段:中学阶段

在中学阶段,学校采用了一种复杂的方法来选择他们的教学地点。他们考虑了平均和最佳人口位置的组合。同样,这个级别的学生根据邻近学校的远近来设定个人目标。在每次迭代中,根据健康程度排名前10%的人扮演学校的角色,而剩下的90%则是学生。

随着中学学业压力的逐渐增大,学生的学习耐心用p来表示。根据学生是否有学业天赋,进一步将学生分为两组。对于这种分类,判断阈值H设置为0.5。对于有学术天赋的学生,其学习动机用E表示,而对于没有学术天赋的学生,其学习动机的固定值为E = 1。W是自适应步长。下图直观地展示了学校和学生在中学阶段采用的行为策略。

e7ccddeaadc10b2ed0e4b62ee2003372.png

和小学一样,学生之间争夺更好教育资源的竞争也在加剧。这些行为的数学表示如下

ef1c0febe28ef236993b0f7e38c83152.png

用随机数r1模拟不同学生的天赋值,取一个在[0,1]范围内的值。

(4)第三阶段:高中阶段

在高中阶段,学校在选择教学地点时采取了细致的方法。他们不仅考虑平均人口位置,还考虑人口中最好和最差的位置。这种全面的评估有助于他们对自己的教育地点做出明智的决定。相反,所有学生都向当前最佳位置聚集,该位置被确定为最佳高中位置。优化过程激励每个学生努力进入这所最好的高中。在每一次迭代中,根据他们的健康状况,前10%的人被指定为学校,而剩下的90%继续作为学生。下图直观地展示了学校和学生在高中阶段采用的行为策略。

e6ccbd16ae16f7f81df8cc0ea1dda526.png

高中根据学生的人口结构来调整他们的位置,而学生们则争夺更好的教育机会,在追求卓越的过程中超越地理限制。下式为这种行为的数学表达式。

eadb590d409cc48054b14018060c3e70.png

每个学生的天赋用一个随机数R2表示,R2的取值范围为[0,1]。

(5)ECO算法的伪代码

在ECO中,优化过程从随机生成一组预定的候选解决方案开始,即已知的人口。通过迭代轨迹,ECO的搜索策略探索最优解附近或已确定最佳解的区域。每个解决方案根据ECO优化过程中获得的最佳解决方案动态更新其位置。算法的完整架构通过算法1中的伪代码进行了详细说明,如图所示,提供了整个优化过程的全面演练,包括其迭代阶段和搜索策略。ECO充分利用了勘探和开发阶段的优势,确保了对搜索空间的彻底检查,并有效地收敛到最优解决方案。

89cc06841066e53fdc0e754557a653f4.png

ECO所对应的算法流程图如下图所示:

4101590a4e874410af3580e30337100b.png

2、结果展示

9c0431e4c7b86ca89ab2d032a7fc6bb6.png

543c00616f114d8090c6a7a336fb323f.png

efde03b810b1747f3074e2b704861c83.png

71bfae3645e4a57354458b45e654905d.png

3af08f7f0580845e89ea435829fa4ab2.png

3、MATLAB核心代码

  1. function [avg_fitness_curve, Best_pos, Best_score, curve, search_history, fitness_history] = ECO(N, Max_iter, lb, ub, dim, fobj)
  2. H = 0.5;  % Learning habit boundary
  3. G1 = 0.2; % proportion of primary school (Stage 1)
  4. G2 = 0.1; % proportion of middle school (Stage 2)
  5. % BestF: Best value in a certain iteration
  6. % WorstF: Worst value in a certain iteration
  7. % GBestF: Global best fitness value
  8. % AveF: Average value in each iteration
  9. G1Number = round(N * G1); % Number of G1
  10. G2Number = round(N * G2); % Number of G2
  11. if (max(size(ub)) == 1)
  12.     ub = ub .* ones(1, dim);
  13.     lb = lb .* ones(1, dim);
  14. end
  15. %% Initialization
  16. X0 = initializationLogistic(N, dim, ub, lb); %Logistic Chaos Mapping Initialization
  17. X = X0;
  18. % Compute initial fitness values
  19. fitness = zeros(1, N);
  20. for i = 1:N
  21.     fitness(i) = fobj(X(i, :));
  22. end
  23. [fitness, index] = sort(fitness); % sort
  24. GBestF = fitness(1); % Global best fitness value
  25. AveF = mean(fitness);
  26. for i = 1:N
  27.     X(i, :) = X0(index(i), :);
  28. end
  29. curve = zeros(1, Max_iter);
  30. avg_fitness_curve = zeros(1, Max_iter);
  31. GBestX = X(1, :); % Global best position
  32. GWorstX = X(end, :); % Global worst position
  33. X_new = X;
  34. search_history = zeros(N, Max_iter, dim);
  35. fitness_history = zeros(N, Max_iter);
  36. %% Start search
  37. for i = 1:Max_iter
  38.     if mod(i,100) == 0
  39.       display(['At iteration ', num2str(i), ' the fitness is ', num2str(curve(i-1))]);
  40.     end
  41.     avg_fitness_curve(i) = AveF;
  42.     R1 = rand(1);
  43.     R2 = rand(1);
  44.     P = 4 * randn * (1 - i / Max_iter);
  45.     E = (pi * i) / (P * Max_iter);
  46.     w = 0.1 * log(2 - (i / Max_iter));
  47.     for j = 1:N
  48.         % Stage 1:Primary school competition
  49.         if mod(i, 3) == 1
  50.             if j >= 1 && j <= G1Number %Primary school Site Selection Strategies
  51.                 X_new(j, :) = X(j, :) + w * (mean(X(j, :)) - X(j, :)) .* Levy(dim); 
  52.             else %Competitive Strategies for Students (Stage 1)
  53.                 X_new(j, :) = X(j, :) + w * (close(X(j, :),1,X) - X(j, :)) .* randn(1);
  54.             end
  55.         % Stage 2:Middle school competition
  56.         elseif mod(i, 3) == 2
  57.             if j >= 1 && j <= G2Number %Middle school Site Selection Strategies
  58.                 X_new(j, :) = X(j, :) + (GBestX - mean(X)) * exp(i / Max_iter - 1) .* Levy(dim);
  59.             else %Competitive Strategies for Students (Stage 2)
  60.                 if (R1 < H)
  61.                     X_new(j, :) = X(j, :) - w * close(X(j, :),2,X) - P * (E * w *close(X(j, :),2,X) - X(j, :));
  62.                 else
  63.                     X_new(j, :) = X(j, :) - w * close(X(j, :),2,X) - P * (w * close(X(j, :),2,X) - X(j, :));
  64.                 end
  65.             end
  66.         % Stage 3:High school competition
  67.         else
  68.             if j >= 1 && j <= G2Number %High school Site Selection Strategies
  69.                 X_new(j, :) = X(j, :) + (GBestX - X(j, :)) *randn - (GBestX - X(j, :)) * randn;
  70.             else %Competitive Strategies for Students (Stage 3)
  71.                 if (R2 < H)
  72.                     X_new(j, :) = GBestX - P * (E * GBestX - X(j, :));
  73.                 else
  74.                     X_new(j, :) = GBestX - P * (GBestX - X(j, :));
  75.                 end
  76.             end
  77.         end
  78.         % Boundary control
  79.         Flag4ub=X_new(j,:)>ub;
  80.         Flag4lb=X_new(j,:)<lb;
  81.         X_new(j,:)=(X_new(j,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
  82.         % Finding the best location so far
  83.         fitness_new(j) = fobj(X_new(j, :));
  84.         if fitness_new(j) >  fitness(j)
  85.             fitness_new(j) = fitness(j);
  86.             X_new(j, :) = X(j,:);
  87.         end
  88.         if fitness_new(j) < GBestF
  89.             GBestF = fitness_new(j);
  90.             GBestX = X_new(j, :);
  91.         end
  92.     end
  93.     X = X_new;
  94.     fitness = fitness_new;  
  95.     curve(i) = GBestF;
  96.     Best_pos = GBestX;
  97.     Best_score = curve(end);
  98.     search_history(:, i, :) = X;
  99.     fitness_history(:, i) = fitness;
  100.     % Sorting and updatin
  101.     [fitness, index] = sort(fitness); % sort
  102.     for j = 1:N
  103.         X0(j, :) = X(index(j), :);
  104.     end 
  105.     X = X0;
  106. end
  107. %%  Levy search strategy
  108. function o = Levy(d)
  109.     beta = 1.5;
  110.     sigma = (gamma(1 + beta) *sin(pi * beta / 2) / (gamma((1 + beta) / 2) * beta * 2^((beta - 1) / 2)))^(1 / beta);
  111.     u = randn(1, d) * sigma;
  112.     v = randn(1, d);
  113.     step = u ./ abs(v).^(1 / beta);
  114.     o = step;
  115. end    
  116. %%  Choosing the Nearest School
  117. function o = close(t,G,X)
  118.   m = X(1,:);
  119.   if G == 1
  120.      for s = 1:G1Number
  121.         school = X(s, :);
  122.         if  sum(abs(m - t)) > sum(abs(school - t))
  123.             m = school;
  124.         end
  125.      end
  126.   else
  127.      for s = 1:G2Number
  128.         school = X(s, :);
  129.         if  sum(abs(m - t)) > sum(abs(school - t))
  130.             m = school;
  131.         end
  132.      end
  133.   end
  134.   o = m;  
  135. end
  136. %% Logistic chaotic mapping initialization
  137. function Positions=initializationLogistic(pop,dim,ub,lb)
  138.     Boundary_no= length(ub); % number of boundaries
  139.     for i = 1:pop
  140.         for j = 1:dim
  141.             x0 = rand;
  142.             a = 4;
  143.             x = a*x0*(1-x0);
  144.             if Boundary_no == 1
  145.                 Positions(i,j) = (ub-lb)*x + lb;
  146.                 if Positions(i,j)>ub
  147.                     Positions(i,j) = ub;
  148.                 end
  149.                 if Positions(i,j)<lb
  150.                     Positions(i,j) = lb;
  151.                 end
  152.             else
  153.                 Positions(i,j) = (ub(j)-lb(j))*x + lb(j);
  154.                 if Positions(i,j)>ub(j)
  155.                     Positions(i,j) = ub(j);
  156.                 end
  157.                 if Positions(i,j)<lb(j)
  158.                     Positions(i,j) = lb(j);
  159.                 end
  160.             end
  161.             x0 = x;
  162.         end
  163.     end
  164. end
  165. end
  166. 微信公众号搜索:淘个代码,获取更多免费代码
  167. %禁止倒卖转售,违者必究!!!!!
  168. %唯一官方店铺:https://mbd.pub/o/author-amqYmHBs/work
  169. %代码清单:https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu

参考文献

[1]Lian J, Zhu T, Ma L, et al. The educational competition optimizer[J]. International Journal of Systems Science, 2024: 1-38.

完整代码获取

后台回复关键词:

TGDM811

获取更多代码:

ed5d34d92040ee1e8614ff4f82fa12c0.png

  1. 或者复制链接跳转:
  2. https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/996008
推荐阅读
相关标签
  

闽ICP备14008679号