Matlab:元胞自动机

news2024/9/22 5:26:39

        元胞自动机是一种基于离散空间的动态系统,由许多简单单元按照某些规则进行相互作用和演化而形成的复杂结构。元胞自动机可以用于模拟物理、生物、社会等领域的现象,以及进行优化、图像处理、噪声生成等方面的应用。

例1:生命游戏

nextStateCalculation.m

% 下一个状态的计算函数
function nextState = nextStateCalculation(currentState)
    [m, n] = size(currentState);
    nextState = zeros(m, n);
    for i = 1:m
        for j = 1:n
            % 统计邻居细胞的存活数
            liveNeighbours = sum(sum(currentState(max(i-1,1):min(i+1,m), max(j-1,1):min(j+1,n)))) - currentState(i, j);
            if currentState(i, j) == 1
                % 活细胞规则
                if liveNeighbours < 2 || liveNeighbours > 3
                    nextState(i, j) = 0; % 孤立或拥挤死亡
                else
                    nextState(i, j) = 1; % 继续存活
                end
            else
                % 死细胞规则
                if liveNeighbours == 3
                    nextState(i, j) = 1; % 繁殖
                else
                    nextState(i, j) = 0; % 仍然死亡
                end
            end
        end
    end
end

主程序:

% 定义初始状态
initialState = randi([0 1], 50, 50); % 50x50 的随机初始状态

% 显示初始状态
figure;
imagesc(initialState);
colormap(summer);
title('初始状态');

% 模拟演化
numIterations = 100;
for t = 1:numIterations
    % 计算下一个状态
    nextState = nextStateCalculation(initialState);
    
    % 显示下一个状态
    imagesc(nextState);
    colormap(summer);
    title(['第', num2str(t), '代']);
    pause(0.1);
    
    % 更新状态
    initialState = nextState;
end

效果如下:

例2:森林火灾(完全烧毁)

simulateForestFire.m

% 定义森林火灾模拟函数
function simulateForestFire(rows, cols, pTree, pBurning, pIgnition, numIterations)
    % 初始化森林状态
    forest = zeros(rows, cols); % 0代表空地,1代表树木,2代表正在燃烧
    
    % 随机生成树木
    forest(rand(rows, cols) < pTree) = 1;
    
    % 随机选择一个树木点作为起火点
    burningTree = randi([1, rows], 1, 2);
    forest(burningTree(1), burningTree(2)) = 2;
    
    % 模拟森林火灾传播过程
    for t = 1:numIterations
        forest = updateForest(forest, pBurning, pIgnition);
        
        % 可视化当前森林状态
        imagesc(forest);
        colormap([1 1 1; 0 1 0; 1 0 0]); % 白色-空地,绿色-树木,红色-着火
        title(['第', num2str(t), '代']);
        pause(0.1);
    end
end

updateForest.m

% 更新森林状态
function newForest = updateForest(forest, pBurning, pIgnition)
    [rows, cols] = size(forest);
    newForest = forest;
    
    for i = 1:rows
        for j = 1:cols
            if forest(i, j) == 1 % 树木
                % 根据周围树木着火情况更新当前点状态
                if any(neighbors(forest, i, j) == 2) || rand < pIgnition
                    newForest(i, j) = 2; % 着火
                end
            elseif forest(i, j) == 2 % 着火
                newForest(i, j) = 0; % 燃尽
            end
        end
    end
end

neighbors.m

% 获取邻居状态
function neighborStates = neighbors(forest, i, j)
    [rows, cols] = size(forest);
    neighborStates = zeros(1, 8);
    
    for k = -1:1
        for l = -1:1
            if k == 0 && l == 0
                continue;
            end
            
            if i+k >= 1 && i+k <= rows && j+l >= 1 && j+l <= cols
                neighborStates((k+1)*3+l+2) = forest(i+k, j+l);
            end
        end
    end
end

调用函数

% 调用函数进行森林火灾模拟
simulateForestFire(50, 50, 0.7, 0.01, 0.4, 100); % 行数、列数、树木密度、树木燃烧概率、点燃概率、迭代次数

效果如下:

例3:种群繁殖模拟(以性别比例为例)

% 初始化参数
gridSize = 50; % 定义格子空间大小
nSteps = 100; % 模拟步数
initialDensity = 0.1; % 初始种群密度
reproductionRate = 0.05; % 繁殖率
mortalityRate = 0.02; % 死亡率
foodSupply = rand(gridSize); % 食物供应随机分布

% 初始化格子空间
populationGrid = zeros(gridSize, gridSize, nSteps);
genderRatioGrid = zeros(gridSize, gridSize, nSteps); % 性别比例,假设初始时0.5(1代表全雄性,0代表全雌性)

% 初始种群和性别比例
populationGrid(:,:,1) = rand(gridSize) < initialDensity;
genderRatioGrid(:,:,1) = 0.5 * ones(gridSize);

% 元胞自动机主循环
for t = 2:nSteps
    for x = 1:gridSize
        for y = 1:gridSize
            % 获取邻居索引,考虑周期边界条件
            [neighX, neighY] = meshgrid(x-1:x+1, y-1:y+1);
            neighX = mod(neighX - 1, gridSize) + 1;
            neighY = mod(neighY - 1, gridSize) + 1;
            
            % 计算邻居的平均食物供应
            avgFoodSupply = mean(mean(foodSupply(neighX, neighY)));
            
            % 更新种群和性别比例
            currentPopulation = populationGrid(x, y, t-1);
            currentGenderRatio = genderRatioGrid(x, y, t-1);
            newPopulation = currentPopulation + reproductionRate * avgFoodSupply * currentPopulation - mortalityRate * currentPopulation;
            newGenderRatio = currentGenderRatio; % 可以添加基于食物供应或其他因素的性别比例调整规则
            
            % 更新状态
            populationGrid(x, y, t) = newPopulation;
            genderRatioGrid(x, y, t) = newGenderRatio;
        end
    end
end

% 可视化最终步骤的种群密度
imagesc(populationGrid(:,:,end));
colorbar;
title('Final Population Density');
xlabel('X');
ylabel('Y');

运行效果:

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

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

相关文章

每日一类:QLabel深入解析

QLabel是Qt中用于显示文本或图像的控件&#xff0c;属于Qt Widgets模块。它是展示静态内容的理想选择&#xff0c;支持富文本格式&#xff0c;使得文本可以包含不同的字体、颜色和链接。QLabel也可以用来显示图像&#xff0c;包括动态图像。此外&#xff0c;它还支持文本和图像…

【硬件相关】IB网/以太网基础介绍及部署实践

文章目录 一、前言1、Infiniband网络1.1、网络类型1.2、网络拓扑1.3、硬件设备1.3.1、网卡1.3.2、连接线缆a、光模块b、线缆 1.3.4、交换机 2、Ethernet网络 二、部署实践&#xff08;以太网&#xff09;1、Intel E810-XXVDA21.1、网卡信息1.2、检查命令1.2、驱动编译 2、Mella…

MySQL进阶:全局锁、表级锁、行级锁总结

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;MySQL进阶&#xff1a;MySQL事务、并发事务问题及隔离级别 &#x1f4da;订阅专栏&#xff1a;MySQL进阶 希望文章对你们有所帮助…

如何根据玩家数量和游戏需求选择最合适的服务器配置?

根据玩家数量和游戏需求选择最合适的服务器配置&#xff0c;首先需要考虑游戏的类型、玩家数量、预计的在线时间以及对内存和CPU性能的需求综合考虑。对于大型多人在线游戏&#xff0c;如MMORPG或MOBA等&#xff0c;由于需要更多的CPU核心数来支持更复杂的游戏逻辑和处理大量数…

【Spring Boot 3】的安全防线:整合 【Spring Security 6】

简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Sp…

Python中几个必须知道的函数

Python中自带了几个比较有意思的函数&#xff0c;一般在面试或者笔试基础的时候会问到&#xff0c;其中3个就是map、filter、reduce函数。 1.map(function, iterable) 它第一个要传的元素是函数名或lambda匿名函数表达式&#xff0c;第二个元素传入可迭代对象。 array [1,2,…

【饮食】日常零食 保健食品分类(附食品营养成分表与执行标准,Coursera营养学课程笔记)

程序员生活指南之 【饮食】日常零食 & 保健食品分类和推荐&#xff08;附食品营养成分表与执行标准&#xff09; 文章目录 一、保健食品1、什么是保健食品&#xff1f;2、常见保健食品分类3、常见保健食品推荐 二、日常零食&#xff08;食品营养成分表与执行标准&#xff0…

详解JavaScript的函数

详解 JavaScript 的函数 函数的语法格式 创建函数/函数声明/函数定义 function 函数名(形参列表) { 函数体 return 返回值; // return 语句可省略 } 函数调用 函数名(实参列表) // 不考虑返回值 返回值 函数名(实参列表) // 考虑返回值 示例代码 //定义的没有参数列表&am…

【C语言】sizeof和strlen的比较

1. sizeof和strlen的对比 1.1 sizeof 在学习操作符的时候&#xff0c;我们学习了 sizeof &#xff0c; sizeof 是一个单目操作符&#xff0c; 绝对不是函数&#xff01;&#xff01;&#xff01;sizeof 计算变量所占内存内存空间⼤⼩的&#xff0c;单位是字节。 如果操作数…

three.js 点乘判断平行向量方向异同

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div><div>判断的前提是两个向量平行<el-button click"judge"…

2025张宇考研数学,百度网盘视频课+36讲PDF讲义+真题

张宇老师的课属于幽默生动&#xff0c;会让一个文科生爱上数学&#xff0c;但是有的同学不知道在哪看&#xff0c;可以看一下&#xff1a;2025张宇考研数学全程网盘 docs.qq.com/doc/DTmtOa0Fzc0V3WElI 可以粘贴在浏览器 张宇30讲作为一本基础讲义&#xff1a;和教材…

6、wuzhicms代码审计

wuzhicms代码审计 前言 安装环境配置 服务器要求 Web服务器: apache/nginx/iis PHP环境要求:支持php5.2、php5.3、php5.4、php5.5、php5.6、php7.1 (推荐使用5.4或更高版本!) 数据库要求: Mysql5www/install文件夹即可进入安装页面 审计开始 首页文件index.php&#xff0c…

latex使用Bibtex添加参考文献指南(TeXstudio)

目录 参考链接 Bibtex 使用方法 编译方法 参考链接 https://www.cnblogs.com/whyaza/p/11803493.html &#xff08;Latex&#xff09;Latex TeXstudio Bibtex 使用指南 - 简书 Latex-bibtex使用方法-CSDN博客 Latex插入参考文献的两种方法—自动与手动_latex 参考文献-…

免费下载全网视频系列:一键下载央视视频

之前分享过全网视频下载工具下载视频不求人&#xff0c;免费下载全网视频&#xff0c;今天再分享几个下载央视视频的工具。 第一个是央视频4k下载器&#xff0c;比如下载这个视频https://www.yangshipin.cn/#/video/home?vidv0000313oqb&#xff0c;打开工具在命令行输入 v00…

Ubuntu将c++编译成.so文件并测试

一、准备cpp和h文件 创建test.cpp 在cpp中定义相加的函数funcAdd&#xff0c;给出函数的细节代码 #include <iostream> using namespace std;int funcAdd(int x, int y) {return xy; }创建test.h 在h中声明定义的函数&#xff0c;不需要任何细节 #ifndef __TEST__ #…

实验:依赖注入之构造器注入

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

文章总结(拉钩教育)

方法论 那对于我们专栏来说&#xff0c;在面对复杂的检索知识的时候&#xff0c;我更建议你通过理解记忆的方式进行学习。具体的方式有啥呢&#xff1f;我比较推荐问答的方式。也就是说&#xff0c;在学习每个知识点的时候&#xff0c;你可以一直问自己几个问题&#xff0c;比…

地信专业未来的前景如何,该怎么学习?

广大普通学校GIS专业学生&#xff0c;如果继续在GIS方向发展&#xff0c;而且走开发路线&#xff0c;结合我这几年面试以及带应届毕业生的经验&#xff0c;学习路线我有这几个方面的建议&#xff0c;仅供参考&#xff1a; 1.大一的时候要学好高数、线性代数和概率论&#xff0c…

STM32单片机示例:ETH_DP83848_DHCP_NonOS_Poll_F407

文章目录 目的基础说明主要配置关键代码示例演示示例链接关于中断总结 目的 以太网是比较常用到的功能&#xff0c;这篇文章讲演示在STM32F407上启用以太网功能&#xff0c;使之能够加入网络中&#xff0c;通过DHCP获得IP地址&#xff0c;可以被Ping通。 基础说明 STM32F407…

EI顶刊复现:基于氨储能技术的电转氨耦合风–光–火综合能源系统双层优化调度程序代码!

适用平台&#xff1a;MatlabYalmipCplex 程序首先提出电转氨耦合综合能源系统构型&#xff0c;并为燃煤机组出力、风光消纳和电转氨运行的经济性和稳定性的综合评价定义风–光–火–氨系统协调运行指标&#xff1b;进而构建以协调运行指标最大为上层目标、电转氨耦合风–光–火…