MATLAB文化算法

news2025/2/13 15:03:49

目录

文化算法

主要代码

Sphere

AdjustCulture

结果


文化算法


基本概念:优化算法 | 详解文化算法(附MATLAB代码) - 知乎

        不同于遗传算法只有种群进化空间,文化算法包含信念空间种群空间两个进化空间,因此,文化算法是一种双层进化系统。

        种群空间和信念空间是各自保存自己群体的两个相对独立的进化过程,并各自独立演化。但是,种群空间定期贡献精英个体给信念空间,信念空间不断进化自己的精英群体来影响种群空间群体。        

        信仰空间中的知识通过 影响函数指导种群空间个体朝有利的方向进化。 任何满足文化算法结构的算法都能融入种群空间 中,通过相互融合,可以弥补传统算法的不足。

种群空间结构-适应度值

信念空间两种知识组成:

1)每次迭代中发现最佳点的个体的确切位置。

2)保存和修正目标函数主变量的变化区间在可能发现最好解的范围内

接收函数accept()的作用是将个体经验传递到信念空间,主要是在当前种群空间中选取优势个体,为信念空间的进化提供基础。接收函数一般为选取当前种群中最好的前nAccept个个体来更新信念空间。

更新函数:在接收到当前种群中最好的前nAccept个个体后,使用更新函数update()来更新信念空间。

影响函数:信念空间在形成群体经验后,通过influence()函数对群体空间中个体的行为规则进行修改,以使个体空间得到更高的进化效率


主要代码


round 四舍五入为最近的小数或整数

Y = round(X) 将 X 的每个元素四舍五入为最近的整数。在对等情况下,即有元素的小数部分恰为 0.5 时,round 函数会偏离零四舍五入到具有更大幅值的整数。

Y = round(X,N) 四舍五入到 N 位数:

  • N > 0:舍入到小数点右侧的第 N 位数。

  • N = 0:四舍五入到最接近的整数。

  • N < 0:舍入到小数点左侧的第 N 位数。

Y = round(X,N,type) 指定四舍五入的类型。指定 'significant' 以四舍五入为 N 位有效数(从最左位数开始计数)。在此情况下,N 必须为正整数。

Y = round(t) 将 duration 数组 t 的每个元素四舍五入到最接近的秒数。

Y = round(t,unit) 将 t 的每个元素四舍五入到指定单位时间的最接近的数。

repmat 重复数组副本

B = repmat(A,n) 返回一个数组,该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时,B 大小为 size(A)*n

B = repmat(A,r1,...,rN) 指定一个标量列表 r1,..,rN,这些标量用于描述 A 的副本在每个维度中如何排列。当 A 具有 N 维时,B 的大小为 size(A).*[r1...rN]。例如:repmat([1 2; 3 4],2,3) 返回一个 4×6 的矩阵。

B = repmat(A,r) 使用行向量 r 指定重复方案。例如,repmat(A,[2 3]) 与 repmat(A,2,3)  返回相同的结果。

inf 创建所有值均为inf的数组

X = Inf 返回正无穷大的标量表示。当运算结果太大以至于无法表示为浮点数时,如 1/0 或 log(0),运算会返回 Inf

对于双精度,Inf 表示大于 realmax 的数字。对于单精度,Inf 表示大于 realmax('single') 的数字。

X = Inf(n) 返回 Inf 值的 n×n 矩阵。

X = Inf(sz1,...,szN) 返回由 Inf 值组成的 sz1×...×szN 数组,其中 sz1,...,szN 指示每个维度的大小。例如:Inf(3,4) 返回一个 3×4 的矩阵。

X = Inf(sz) 返回 Inf 值的数组,其中大小向量 sz 定义 size(X)。例如:Inf([3 4]) 返回一个 3×4 的矩阵。

X = Inf(___,typename) 返回由数据类型为 typename(可以是 'single' 或 'double')的 Inf 值组成的数组。

X = Inf(___,'like',p) 将返回一个由 Inf 值组成的数组,它具有与 p 相同的数据类型、稀疏度和复/实性。您可以指定 typename 或 'like',但不能同时指定二者。

unifrnd 连续统一的随机数

r = unifrnd(a,b) 从连续均匀分布中生成一个随机数,其下端点为a,上端点为b。

r = unifrnd(a,b,sz1,...,szN) 生成一个均匀随机数的数组,其中sz1,...,szN表示每个维度的大小。

r = unifrnd(a,b,sz) 生成一个均匀随机数的数组,其中大小向量sz指定了size(r)。

semilogy 半对数图(y 轴有对数刻度)

semilogy(X,Y) 在 x 轴上使用线性刻度、在 y 轴上使用以 10 为底的对数刻度来绘制 x 和 y 坐标。

  • 要绘制由线段连接的一组坐标,请将 X 和 Y 指定为相同长度的向量。

  • 要在同一组坐标轴上绘制多组坐标,请将 X 或 Y 中的至少一个指定为矩阵。

semilogy(X,Y,LineSpec) 使用指定的线型、标记和颜色创建绘图。

semilogy(X1,Y1,...,Xn,Yn) 在同一组坐标轴上绘制多对 x 和 y 坐标。此语法可替代将坐标指定为矩阵的形式。

semilogy(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn) 可为每个 x-y 对组指定特定的线型、标记和颜色。您可以对某些 x-y 对组指定 LineSpec,而对其他对组省略它。例如,semilogy(X1,Y1,'o',X2,Y2) 对第一个 x-y 对组指定标记,但没有对第二个对组指定标记。

clc;
clear;
close all;

%% Problem Definition

CostFunction = @(x) Sphere(x);        % Cost Function

nVar = 10;          % Number of Decision Variables

VarSize = [1 nVar];   % Decision Variables Matrix Size

VarMin = -10;         % Decision Variables Lower Bound
VarMax = 10;         % Decision Variables Upper Bound

%% Cultural Algorithm Settings

MaxIt = 1000;         % Maximum Number of Iterations

nPop = 50;            % Population Size

pAccept = 0.35;                   % Acceptance Ratio接受的更新率
nAccept = round(pAccept*nPop);    % Number of Accepted Individuals

alpha = 0.3;

beta = 0.5;

%% Initialization

% Initialize Culture
Culture.Situational.Cost = inf;
Culture.Normative.Min = inf(VarSize);
Culture.Normative.Max = -inf(VarSize);
Culture.Normative.L = inf(VarSize);
Culture.Normative.U = inf(VarSize);

% Empty Individual Structure
empty_individual.Position = [];
empty_individual.Cost = [];

% Initialize Population Array
pop = repmat(empty_individual, nPop, 1);

% Generate Initial Solutions
for i = 1:nPop
    pop(i).Position = unifrnd(VarMin, VarMax, VarSize);
    pop(i).Cost = CostFunction(pop(i).Position);
end

% Sort Population
[~, SortOrder] = sort([pop.Cost]);
pop = pop(SortOrder);

% Adjust Culture using Selected Population
spop = pop(1:nAccept);
Culture = AdjustCulture(Culture, spop);

% Update Best Solution Ever Found
BestSol = Culture.Situational;

% Array to Hold Best Costs
BestCost = zeros(MaxIt, 1);

%% Cultural Algorithm Main Loop

for it = 1:MaxIt
    
    % Influnce of Culture
    for i = 1:nPop
        
        % % 1st Method (using only Normative component)
%         sigma = alpha*Culture.Normative.Size;
%         pop(i).Position = pop(i).Position+sigma.*randn(VarSize);
        
        % % 2nd Method (using only Situational component)
%         for j = 1:nVar
%            sigma = 0.1*(VarMax-VarMin);
%            dx = sigma*randn;
%            if pop(i).Position(j)<Culture.Situational.Position(j)
%                dx = abs(dx);
%            elseif pop(i).Position(j)>Culture.Situational.Position(j)
%                dx = -abs(dx);
%            end
%            pop(i).Position(j) = pop(i).Position(j)+dx;
%         end
        
        % % 3rd Method (using Normative and Situational components)
        for j = 1:nVar
          sigma = alpha*Culture.Normative.Size(j);
          dx = sigma*randn;
          if pop(i).Position(j)<Culture.Situational.Position(j)
              dx = abs(dx);
          elseif pop(i).Position(j)>Culture.Situational.Position(j)
              dx = -abs(dx);
          end
          pop(i).Position(j) = pop(i).Position(j)+dx;
        end        
        
        % % 4th Method (using Size and Range of Normative component)
%         for j = 1:nVar
%           sigma = alpha*Culture.Normative.Size(j);
%           dx = sigma*randn;
%           if pop(i).Position(j)<Culture.Normative.Min(j)
%               dx = abs(dx);
%           elseif pop(i).Position(j)>Culture.Normative.Max(j)
%               dx = -abs(dx);
%           else
%               dx = beta*dx;
%           end
%           pop(i).Position(j) = pop(i).Position(j)+dx;
%         end        
        
        pop(i).Cost = CostFunction(pop(i).Position);
        
    end
    
    % Sort Population
    [~, SortOrder] = sort([pop.Cost]);
    pop = pop(SortOrder);

    % Adjust Culture using Selected Population
    spop = pop(1:nAccept);
    Culture = AdjustCulture(Culture, spop);

    % Update Best Solution Ever Found
    BestSol = Culture.Situational;
    
    % Store Best Cost Ever Found
    BestCost(it) = BestSol.Cost;
    
    % Show Iteration Information
    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
    
end

%% Results

figure;
%plot(BestCost, 'LineWidth', 2);
semilogy(BestCost, 'LineWidth', 2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;

Sphere


function z = Sphere(x)

    z = sum(x.^2);

end

AdjustCulture


numel - 数组元素的数目
    此 MATLAB 函数 返回数组 A 中的元素数目 n 等同于 prod(size(A))。

prod - 数组元素的乘积
    此 MATLAB 函数 返回 A 的数组元素的乘积。 如果 A 是向量,则 prod(A) 返回元素的乘积。如果 A 为非空矩阵,则 prod(A) 将 A 的各列视为向量,并返回一个包含每列乘积的行向量。如果 A 为 0×0 空矩阵,prod(A) 返回 1。 如果 A 为多维数组,则 prod(A) 沿第一个非单
 一维度运算并返回乘积数组。此维度的大小将减少至 1,而所有其他维度的大小保持不变。

function Culture = AdjustCulture(Culture, spop)

    n = numel(spop);
    nVar = numel(spop(1).Position);
    
    for i = 1:n
        if spop(i).Cost<Culture.Situational.Cost
            Culture.Situational = spop(i);
        end
        
        for j = 1:nVar
            if spop(i).Position(j)<Culture.Normative.Min(j) ...
                    || spop(i).Cost<Culture.Normative.L(j)
                Culture.Normative.Min(j) = spop(i).Position(j);
                Culture.Normative.L(j) = spop(i).Cost;
            end
            if spop(i).Position(j)>Culture.Normative.Max(j) ...
                    || spop(i).Cost<Culture.Normative.U(j)
                Culture.Normative.Max(j) = spop(i).Position(j);
                Culture.Normative.U(j) = spop(i).Cost;
            end
        end
    end

    Culture.Normative.Size = Culture.Normative.Max-Culture.Normative.Min;
    
end

结果


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[学习笔记] [机器学习] 11. EM算法(极大似然估计、EM算法实例、极大似然估计取对数的原因)

视频链接数据集下载地址&#xff1a;无需下载 学习目标&#xff1a; 了解什么是 EM 算法知道极大似然估计知道 EM 算法实现流程 讲 EM 算法主要是为了后面的 HMM 做准备。 1. 初始 EM 算法 EM 算法&#xff08;Expectation-Maximization algorithm&#xff0c;期望最大化算法…

索引介绍和基本使用

介绍 索引就是用来加速SQL查询的 由于索引也是需要存储成索引文件的&#xff0c;因此对索引的使用也会涉及磁盘I/O操作。如果索引创建过多&#xff0c;使用不当&#xff0c;会造成SQL查询时&#xff0c;进行大量无用的磁盘I/O操作&#xff0c;降低了SQL的查询效率&#xff0c…

SaaS 系统完全开源介绍

&#x1f42f; 平台简介 芋道&#xff0c;以开发者为中心&#xff0c;打造中国第一流的快速开发平台&#xff0c;全部开源&#xff0c;个人与企业可 100% 免费使用。 架构图 管理后台的 Vue3 版本采用 vue-element-plus-admin &#xff0c;Vue2 版本采用 vue-element-admin 管…

MySQL数据库概念、管理以及SQL语句的基本命令操作

MySQL数据库概念、管理以及SQL语句的基本命令操作 一、数据库概念1、数据库的组成&#xff1a;数据、表、数据库2、数据库类型3、数据库的管理系统&#xff08;DBMS)4、数据库系统&#xff08;DBS&#xff09; 二、数据库系统发展史三、当今主流数据库四、关系型数据库五、MySQ…

HTML+CSS实训——Day15——部署项目到阿里云服务器

前言 因为阿里云有免费的3个月试用&#xff0c;我们可以把项目部署到上面。 选择这个服务 我们用CentOS&#xff0c;更简单&#xff0c;更轻量化。 打开他的VNC控制台 安装宝塔控制面板&#xff0c;输入 yum install -y wget && wget -O install.sh https://downlo…

提高你的小程序开发技能:五大重要步骤

对于任何开发人员来说&#xff0c;想要创建一个小程序并不是一件容易的事情。你需要为每个功能和应用程序编写代码&#xff0c;并且你需要不断地进行测试以确保它不会出错。 那么&#xff0c;我们该如何提高小程序的开发技能呢&#xff1f;通过下面这五个重要步骤&#xff0c;…

Win10麦克风没有声音怎么办?Win10麦克风没有声音恢复教程

Win10麦克风没有声音怎么办&#xff1f;Win10电脑中用户发现麦克风没有声音了&#xff0c;想知道怎么操作才能让声音恢复正常&#xff0c;这时候用户需要打开Win10电脑的设备管理器&#xff0c;点击更新相对应的驱动程序&#xff0c;这样就能轻松解决Win10麦克风没有声音的问题…

Python 课程设计2:学生信息管理系统

开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统&#xff1a;Windows 10。Python版本&#xff1a;Python 3.7.0。开发工具&#xff1a;PyCharm VSCodePython内置模块&#xff1a;os、re。 功能&#xff1a; 1 录入学生信息功能 …

大模型微调方法调研

文章目录 Freeze方法PT方法Lora方法AdaloraPrompt TuningAdapter TuningPrefix tuning遗留问题 Freeze方法 对原始模型部分参数进行冻结操作&#xff0c;仅训练部分参数 PT方法 P-Tuning&#xff0c;仅对大模型的Embedding加入新的参数。 P-Tuning 提出将 Prompt 转换为可以…

Cgroup资源管理

docker资源限制 容器怎么实现资源的限制&#xff1f; 通过Cgroup资源限制 docker 通过Cgroup来控制容器使用的资源配额&#xff0c;包括CPU&#xff0c;内存&#xff0c;磁盘三大方面。 Cgroup是linux内核提供的一种可以限制&#xff0c;记录&#xff0c;隔离进程组所使用的…

IDEA默认代码样式的坑,逗号前面默认加上了空格

IDEA默认代码样式的坑&#xff0c;逗号前面默认加上了空格 个人习惯编写完代码&#xff0c;会使用CTRLALTL进行代码格式化&#xff0c;同时设置了提交的时候进行代码重排和格式化。突然有一天&#xff0c;格式化代码之后发现跟仓库的差异文件几百个&#xff0c;吓死。。。 当然…

代码开发中VO,BO,PO,DO,DTO是什么

代码开发中VO&#xff0c;BO&#xff0c;PO&#xff0c;DO&#xff0c;DTO是什么 MVC的简单定义&#xff1a; M层负责与数据库打交道&#xff1b; C层负责业务逻辑的编写&#xff1b; V层负责给用户展示&#xff08;针对于前后端不分离的项目&#xff0c;不分离项目那种编写…

一、微机保护装置的典型结构

微机型保护装置实质上是一种依靠单片微机智能地实现保护功能的工业控制装置。一般典型的微机保护结构是由五个部分构成的&#xff0c;即信号输入电路、单片微机系统、人机接口部分、输出通道回路及电源部分&#xff0c;如图1&#xff0d;l所示。 &#xff08;一&#xff09;信号…

多线程之基础

写在前面 本文看下多线程基础相关内容。 1&#xff1a;线程基础分析 1.1&#xff1a;摩尔定律失效 戈登.摩尔&#xff0c;英特尔公司的创始人之一&#xff0c;其发现了一个计算机的发展规律&#xff0c;即&#xff0c;处理器的性能每24个月就会翻一倍&#xff0c;这就是摩尔…

Vintage的变体与解读应用

Vintage在风险管理中有很多变体&#xff0c;通常分为以下四类&#xff1a; 1.根据选取切片数据时间不一样&#xff0c;可划分为Month end&#xff08;月末&#xff09;与Cycle end&#xff08;期末&#xff09;两种。 说明&#xff1a; **Month end&#xff1a;**选取切片数…

基于自适应高斯混合的稀疏注释语义分割

文章目录 Sparsely Annotated Semantic Segmentation with Adaptive Gaussian Mixtures摘要本文方法GMM FormulationTraining with AGMM 实验结果 Sparsely Annotated Semantic Segmentation with Adaptive Gaussian Mixtures 摘要 稀疏注释语义分割&#xff08;SASS&#xf…

给图片添加水印的最简单方法

给图片添加水印的最简单方法在数字化时代&#xff0c;图片广泛应用于社交媒体、网站、电商平台等各种场景中。然而&#xff0c;由于互联网分享的便捷性&#xff0c;图片的盗用问题也越来越严重。为了保护图片版权&#xff0c;给图片添加水印已经成为一个非常必要和重要的步骤。…

参与赢大奖!阿里云机器学习平台PAI助力开发者激发AIGC潜能

近年来&#xff0c;随着海量多模态数据在互联网的爆炸性增长和训练深度学习大模型的算力大幅提升&#xff0c;助力开发者一站式快速搭建文生图、对话等热门场景应用&#xff0c;阿里云机器学习平台PAI特推出AIGC加油包&#xff0c;为广大开发者加油助力激发AIGC潜能&#xff0c…

OJ管理员如何进行添加题目

OJ系统简介 Online Judge系统&#xff08;简称OJ&#xff09;是一个在线的判题系统。用户可以在线提交程序多种程序&#xff08;如C、C&#xff09; 源代码&#xff0c;系统对源代码进行编译和执行&#xff0c;并通过预先设计的测试数据来检验程序源代码的正确性。 一个用户提…

手把手教你进行Mysql条件查询操作

关注“Java架构栈”微信公众号&#xff0c;回复暗号【Java面试题】即可获取大厂面试题 从今天开始&#xff0c;健哥会带各位小伙伴开始学习数据库技术&#xff0c;这是Java开发中必不可少的一部分内容&#xff0c;也是非常重要的技术。本系列教程由浅入深&#xff0c;全面讲解数…