代码编织梦想

%%%%%%%%%%%%标准遗传算法解单决策变量问题%%%%%%%
%%%%%%%%%%%求取f(x) = 想+ 10sin(5x) + 7cos(4x)在[0,10]上的最大值%%%


%% 初始化参数
clear all;close all;clc;
Np = 14; %种群数量
L = 20; % 二进制编码长度
Pc = 0.8; % 交叉概率
Pm = 0.1; %变异概率
x_min = 0;
x_max = 10;  %上下限
G = 100; % 最大迭代次数

pop = randi([0, 1], Np, L);% 随机获得初始种群
next_pop = pop; % 新一代
fit = zeros(1, Np); % 种群中每个个体对应的适应度

trace = zeros(1, G); % 跟踪每一次迭代的最好值
%% 遗传算法循环
for k = 1 : G
    %%%%%%%%%解码二进制串为十进制%%%%%%%%%%%%
    for i = 1:Np
        unit = pop(i,:);%第i个个体的二进制码
        m = 0;
        
        for j = 1:L
            
            m = m + unit(j) * 2^(j-1); % m为二进制编码pop(i,:)对应的十进制编码
            
        end
    
        x(i) = x_min + (m/(2^L-1)) * (x_max - x_min); % 该十进制编码对应的区间中的值
        
        fit(i) = func1(x(i));
    end
    
    %找出最好适应度和最差适应度, 并确定最好/差适应度对应的个体
    max_fit = max(fit);
    min_fit = min(fit);
    
    best_idxs = find(fit == max_fit);
    pop_best = pop(best_idxs(1,1), :);
    x_best = x(best_idxs(1,1));
     
    normed_fit = (fit - min_fit)/(max_fit - min_fit);   % 归一化适应度
    
    %%%%%%%%%%%%基于轮盘赌的选择操作%%%%%%%
    fit_sum = sum(normed_fit);
    
    prob_sel = normed_fit./fit_sum;  %第i个元素代表第i个个体被选择的概率
    cum_prob = cumsum(prob_sel); % 选择概率的累积和,等下会看到
    
    old_i = 1;
    new_i = 1;
    
    sel_rate = sort(rand(1, Np)); % 通过累积和进行比较去保证选择率高的个体被选中的多些,
                                                      % 概率低的个体幅复制地少些甚至不复制
    
    % 这个算法在这部分的做法是很巧妙的,就是我要怎么保证选择操作能够
    % 让下一代的数量和这一代的数量相同?
    % 它用了一种方法,可能有其他的方法
    while(old_i <= Np && new_i <= Np)
        % 如果满足, 则选取
        if(sel_rate(new_i) < cum_prob(old_i))
            next_pop(new_i, :) = pop(old_i, :);
            new_i = new_i +1;
          % 否则  
        else
            old_i = old_i+1;
        
        end
        
    end
    %%%%%%%%%%%%基于概率的交叉操作%%%%%%%    
    
    for i = 1:2:Np %i表示第i对 
        p = rand(1);
        if (p<Pc)
            q = randi([0,1],1,L);% 随机生成一个个体——一个长为L的二进制码
            for j = 1:L
                if(q(j) == 1)
                    %交叉操作
                    temp = next_pop(i+1, j);
                    next_pop(i+1, j) = next_pop(i,j);
                    next_pop(i,j) = temp;
                end
            end
            
        end
    end
    %%%%%%%%%%%%基于概率的变异操作%%%%%%%
    i = 1;
    while i <= round(Np * Pm)
        h = randi([1, Np]);
        for j = 1:round(L * Pm)
            g = randi([1,L]);
            next_pop(h, g) =~ next_pop(h, g);%变异
        end
        
        i = i+1;
    end
    
    pop = next_pop;
    
    pop(1,:) = pop_best; % 保留最优个体
    
    trace(k) = max_fit;
    
    
end


figure(1);
plot(trace);







版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/White__River/article/details/129629673

当小样本遇上机器学习 fewshot learning_mao_feng的博客-爱代码爱编程_小样本机器学习

引言    深度学习(deep learning)已经广泛应用于各个领域,解决各类问题,例如在图像分类问题下,如图1,区分这10类目标的准确率目前可以轻松做到94%。然而,deep learning是一种data hungry的技术,需要大量的标注样本才能发挥作用。 图1    现实世界中,有很多问题是没有这么多的标注数据的,获取标注数据的成本

机器学习知识点总结(待更新)-爱代码爱编程

 机器学习按照模型类型分为监督学习模型、无监督学习模型和概率模型三大类:  以下是作者自己整理的机器学习笔记思维导图,分享供大家学习,导图和笔记后续会继续更新。 一、什么是机器学习? 机器学习=寻找一种函数 如何寻找这个函数? ①定一个函数集合 ②判断函数的好坏 ③选择最好的函数 机器学习三板斧 ①设计模型model ②判断模型

十大机器学习算法-爱代码爱编程

初学者应该知道的十大机器学习算法 来源:https://builtin.com/data-science/tour-top-10-algorithms-machine-learning-newbies 机器学习算法被描述为学习一个目标函数 (f),它最好地将输入变量 (X) 映射到输出变量 (Y):Y = f(X) 最常见的机器学习类型是学

李宏毅2021&2022机器学习-爱代码爱编程

重磅须知  (重磅须知,统一说明)为方便所有网课资料与优质电子书籍的实时更新维护,创建了一个在线实时网盘文件夹,放在公众号【啥都会一点的研究生】,本节课对应序号【05】。    UP将2021&2022所有作业的数据资料整理打包好了,由于文件太大,已同步放在上述所提在线网盘。    在线网盘能满足该课程所需资料的全部需求,链接挂掉也会

一文读懂机器学习分类全流程_平衡数据集-爱代码爱编程

​ 目录   前言 提出问题 一、介绍 1.分类简介 2.imblearn的安装 二、数据加载及预处理 1.加载并查看数据 ①导入Python第三方库    ②调用并查看数据 2.查看数据分布 ①各国样本分布直方图 ②各国样本划分 3.各国最受欢迎食材可视化 4.平衡数据集 ①样本插值采样 三、分类器选择 四