当前位置:   article > 正文

数学建模智能算法

数学建模智能算法

模拟退火算法

  1. %生成初始解,求目标函数f(x)=x1^2+x2^2+8在x1^2-x2>0;-x1-x2^2+2=0约束下的最小值问题
  2. sol_new2=1;%(1)解空间(初始解)
  3. sol_new1=2-sol_new2^2;
  4. sol_current1 = sol_new1;
  5. sol_best1 = sol_new1;
  6. sol_current2 = sol_new2;
  7. sol_best2 = sol_new2;
  8. E_current = inf;
  9. E_best = inf;
  10. rand('state',sum(clock)); %初始化随机数发生器
  11. t=90; %初始温度
  12. tf=89.9; %结束温度
  13. a = 0.99; %温度下降比例
  14. while t>=tf%(7)结束条件
  15. for r=1:1000 %退火次数
  16. %产生随机扰动(3)新解的产生
  17. sol_new2=sol_new2+rand*0.2;
  18. sol_new1=2-sol_new2^2;
  19. %检查是否满足约束
  20. if sol_new1^2-sol_new2>=0 && -sol_new1-sol_new2^2+2==0 && sol_new1>=0 &&sol_new2>=0
  21. else
  22. sol_new2=rand*2;
  23. sol_new1=2-sol_new2^2;
  24. continue;
  25. end
  26. %退火过程
  27. E_new=sol_new1^2+sol_new2^2+8;%(2)目标函数
  28. if E_new<E_current%(5)接受准则
  29. E_current=E_new;
  30. sol_current1=sol_new1;
  31. sol_current2=sol_new2;
  32. if E_new<E_best
  33. %把冷却过程中最好的解保存下来
  34. E_best=E_new;
  35. sol_best1=sol_new1;
  36. sol_best2=sol_new2;
  37. end
  38. else
  39. if rand<exp(-(E_new-E_current)/t)%(4)代价函数差
  40. E_current=E_new;
  41. sol_current1=sol_new1;
  42. sol_current2=sol_new2;
  43. else
  44. sol_new1=sol_current1;
  45. sol_new2=sol_current2;
  46. end
  47. end
  48. plot(r,E_best,'*')
  49. hold on
  50. end
  51. t=t*a;%(6)降温
  52. end
  53. disp('最优解为:')
  54. disp(sol_best1)
  55. disp(sol_best2)
  56. disp('目标表达式的最小值等于:')
  57. disp(E_best)

粒子群算法

基本步骤
1 找出待优化的目标函数
2 设定种群规模大小(不会设置可直接采用下方代码的)
3 替换掉下方公式即可

  1. %% 初始化种群
  2. f= @(x)x .* sin(x) .* cos(2 * x) - 2 * x .* sin(3 * x); % 函数表达式 % 求这个函数的最大值
  3. figure(1);ezplot(f,[0,0.01,20]);
  4. N = 50; % 初始种群个数
  5. d = 1; % 空间维数
  6. ger = 100; % 最大迭代次数
  7. limit = [0, 20]; % 设置位置参数限制
  8. vlimit = [-1, 1]; % 设置速度限制
  9. w = 0.8; % 惯性权重
  10. c1 = 0.5; % 自我学习因子
  11. c2 = 0.5; % 群体学习因子
  12. for i = 1:d
  13. x = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, d);%初始种群的位置
  14. end
  15. v = rand(N, d); % 初始种群的速度
  16. xm = x; % 每个个体的历史最佳位置
  17. ym = zeros(1, d); % 种群的历史最佳位置
  18. fxm = zeros(N, 1); % 每个个体的历史最佳适应度
  19. fym = -inf; % 种群历史最佳适应度
  20. hold on
  21. plot(xm, f(xm), 'ro');title('初始状态图');
  22. figure(2)
  23. %% 群体更新
  24. iter = 1;
  25. record = zeros(ger, 1); % 记录器
  26. while iter <= ger
  27. fx = f(x) ; % 个体当前适应度
  28. for i = 1:N
  29. if fxm(i) < fx(i)
  30. fxm(i) = fx(i); % 更新个体历史最佳适应度
  31. xm(i,:) = x(i,:); % 更新个体历史最佳位置
  32. end
  33. end
  34. if fym < max(fxm)
  35. [fym, nmax] = max(fxm); % 更新群体历史最佳适应度
  36. ym = xm(nmax, :); % 更新群体历史最佳位置
  37. end
  38. v = v * w + c1 * rand * (xm - x) + c2 * rand * (repmat(ym, N, 1) - x);% 速度更新
  39. % 边界速度处理
  40. v(v > vlimit(2)) = vlimit(2);
  41. v(v < vlimit(1)) = vlimit(1);
  42. x = x + v;% 位置更新
  43. % 边界位置处理
  44. x(x > limit(2)) = limit(2);
  45. x(x < limit(1)) = limit(1);
  46. record(iter) = fym;%最大值记录
  47. x0 = 0 : 0.01 : 20;
  48. plot(x0, f(x0), 'b-', x, f(x), 'ro');title('状态位置变化')
  49. pause(0.1)
  50. iter = iter+1;
  51. end
  52. figure(3);plot(record);title('收敛过程')
  53. x0 = 0 : 0.01 : 20;
  54. figure(4);plot(x0, f(x0), 'b-', x, f(x), 'ro');title('最终状态位置')
  55. disp(['最大值:',num2str(fym)]);
  56. disp(['变量取值:',num2str(ym)]);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/981214
推荐阅读
相关标签
  

闽ICP备14008679号