数学建模智能算法

模拟退火算法


%生成初始解,求目标函数f(x)=x1^2+x2^2+8在x1^2-x2>0;-x1-x2^2+2=0约束下的最小值问题  
sol_new2=1;%(1)解空间(初始解)  
sol_new1=2-sol_new2^2;  
sol_current1 = sol_new1;   
sol_best1 = sol_new1;  
sol_current2 = sol_new2;   
sol_best2 = sol_new2;  
E_current = inf;  
E_best = inf;  
  
rand('state',sum(clock)); %初始化随机数发生器  
t=90; %初始温度  
tf=89.9; %结束温度  
a = 0.99; %温度下降比例  
  
while t>=tf%(7)结束条件  
    for r=1:1000 %退火次数  
          
        %产生随机扰动(3)新解的产生  
        sol_new2=sol_new2+rand*0.2;  
        sol_new1=2-sol_new2^2;  
          
        %检查是否满足约束  
        if sol_new1^2-sol_new2>=0 && -sol_new1-sol_new2^2+2==0 && sol_new1>=0 &&sol_new2>=0  
        else  
            sol_new2=rand*2;  
            sol_new1=2-sol_new2^2;  
            continue;  
        end  
          
        %退火过程  
        E_new=sol_new1^2+sol_new2^2+8;%(2)目标函数  
        if E_new<E_current%(5)接受准则  
                E_current=E_new;  
                sol_current1=sol_new1;  
                sol_current2=sol_new2;  
                if E_new<E_best  
                    %把冷却过程中最好的解保存下来  
                    E_best=E_new;  
                    sol_best1=sol_new1;  
                    sol_best2=sol_new2;  
                end  
        else  
                if rand<exp(-(E_new-E_current)/t)%(4)代价函数差  
                    E_current=E_new;  
                    sol_current1=sol_new1;  
                    sol_current2=sol_new2;  
                else  
                    sol_new1=sol_current1;  
                    sol_new2=sol_current2;  
                end  
        end  
        plot(r,E_best,'*')  
        hold on  
    end  
    t=t*a;%(6)降温  
end  
  
disp('最优解为:')  
disp(sol_best1)  
disp(sol_best2)  
disp('目标表达式的最小值等于:')  
disp(E_best)  

粒子群算法

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

%% 初始化种群  
f= @(x)x .* sin(x) .* cos(2 * x) - 2 * x .* sin(3 * x); % 函数表达式    % 求这个函数的最大值  
figure(1);ezplot(f,[0,0.01,20]);  
N = 50;                         % 初始种群个数  
d = 1;                          % 空间维数  
ger = 100;                      % 最大迭代次数       
limit = [0, 20];                % 设置位置参数限制  
vlimit = [-1, 1];               % 设置速度限制  
w = 0.8;                        % 惯性权重  
c1 = 0.5;                       % 自我学习因子  
c2 = 0.5;                       % 群体学习因子   
for i = 1:d  
    x = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, d);%初始种群的位置  
end  
v = rand(N, d);                  % 初始种群的速度  
xm = x;                          % 每个个体的历史最佳位置  
ym = zeros(1, d);                % 种群的历史最佳位置  
fxm = zeros(N, 1);               % 每个个体的历史最佳适应度  
fym = -inf;                      % 种群历史最佳适应度  
hold on  
plot(xm, f(xm), 'ro');title('初始状态图');  
figure(2)  
%% 群体更新  
iter = 1;  
record = zeros(ger, 1);          % 记录器  
while iter <= ger  
     fx = f(x) ; % 个体当前适应度     
     for i = 1:N        
        if fxm(i) < fx(i)  
            fxm(i) = fx(i);     % 更新个体历史最佳适应度  
            xm(i,:) = x(i,:);   % 更新个体历史最佳位置  
        end   
     end  
if fym < max(fxm)  
        [fym, nmax] = max(fxm);   % 更新群体历史最佳适应度  
        ym = xm(nmax, :);      % 更新群体历史最佳位置  
 end  
    v = v * w + c1 * rand * (xm - x) + c2 * rand * (repmat(ym, N, 1) - x);% 速度更新  
    % 边界速度处理  
    v(v > vlimit(2)) = vlimit(2);  
    v(v < vlimit(1)) = vlimit(1);  
    x = x + v;% 位置更新  
    % 边界位置处理  
    x(x > limit(2)) = limit(2);  
    x(x < limit(1)) = limit(1);  
    record(iter) = fym;%最大值记录  
     x0 = 0 : 0.01 : 20;  
     plot(x0, f(x0), 'b-', x, f(x), 'ro');title('状态位置变化')  
    pause(0.1)  
    iter = iter+1;  
end  
figure(3);plot(record);title('收敛过程')  
x0 = 0 : 0.01 : 20;  
figure(4);plot(x0, f(x0), 'b-', x, f(x), 'ro');title('最终状态位置')  
disp(['最大值:',num2str(fym)]);  
disp(['变量取值:',num2str(ym)]);  

相关推荐

  1. 数学智能算法

    2024-03-29 03:30:01       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 03:30:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 03:30:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 03:30:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 03:30:01       20 阅读

热门阅读

  1. 【华为OD机试】机器人搬砖【C卷|100分】

    2024-03-29 03:30:01       22 阅读
  2. react状态管理工具(redux、zustand)

    2024-03-29 03:30:01       22 阅读
  3. Unity 计算两个日期的时间差(含绝对值计算方法)

    2024-03-29 03:30:01       21 阅读
  4. Dubbo 负载均衡算法说明

    2024-03-29 03:30:01       18 阅读
  5. bash版本号怎么样能解决

    2024-03-29 03:30:01       20 阅读
  6. uniapp 安卓跳转到应用设置等页面

    2024-03-29 03:30:01       23 阅读
  7. 常见排序代码及手撕心得

    2024-03-29 03:30:01       21 阅读
  8. 独立服务器和云计算各有什么优势

    2024-03-29 03:30:01       16 阅读
  9. 测试学习1

    2024-03-29 03:30:01       19 阅读
  10. 15届蓝桥杯备赛(3)

    2024-03-29 03:30:01       21 阅读
  11. 如何在Tomcat 9上部署前端和后端项目

    2024-03-29 03:30:01       22 阅读