【元胞自动机】基于元胞自动机模拟地区未来的城市增长附Matlab代码

文章介绍了如何运用Matlab进行城市空间形态的元胞自动机建模,通过初始化设置、图像处理和距离计算,模拟城市空间的演变。此外,还提及了元胞自动机在复杂地理系统研究中的应用,并提供了部分代码示例。

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

城市空间形态是从空间的角度研究城市演化的状态,形式及其相关影响因素.自改革开放以来,随着国民经济的高速发展,中国城市进入了快速发展时期,作为城市化发展的直接结果,城市空间形态也发生着相应的剧烈变化. 城市空间形态演化过程具有高度的复杂性,元胞自动机作为一种时间和空间上都离散的系统动力学模型,充分体现了"简单子系统可相互组合形成复杂巨系统"的精髓,特别适用于模拟具有复杂时间和空间特征的地理系统,已逐渐成为研究城市空间形态的一种重要工具或手段. 

⛄ 部分代码

clear all ; close all; clc; 

% 0 means Restricted ... 35 means road... 50 means built up... 15 means Non  built up

%%%Initilizing

img = imread('test.jpg');

%image(img);

[sr sc sf] = size(img);

ar = zeros(sr,sc);

for i=1:sr

    for j=1:sc

      if(img(i,j,1) >240 )

          ar(i,j)=15;

      else if (img(i,j,1)<150)

              ar(i,j)=50;

          else

              ar(i,j)=35;

          end

      end

      

      if img(i,j,2)>90 && ar(i,j)~=15

          ar(i,j) = 0;

      end

      

    end

end

colorMap = jet(50);

colormap(colorMap);

image(ar)

colorbar

%%%% calculating nearest distence from road..

dis = zeros(sr,sc) ;

for i=1:sr

    for j=1:sc

%         if(ar(i,j)==25) 

%             dis(i,j)=0;

%         end

        d=1e6;

                for x=1:sr

                    for y=1:sc

                       if(ar(x,y)==35)

                           

                           % Euclidian

                          %  tm = ((i-x)^2 + (j-y)^2)^0.5 ;

                          

                          % Non Euclidian

                            tm = max ( abs(i-x) , abs(j-y) ) ;

                          

                           if tm<d

                               d=tm;

                           end

                       end

                    end

                end

                dis(i,j)=d;

    end

end

figure;

image(dis*2)

colorbar;

%%% now The Cellular Autometa as per rules.... 

  pause(1);

  figure

    image(ar);

    hold on;

    figure

     image(ar);

% 0 means Restricted ... 35 means road... 50 means built up... 15 means Non  built up

p = ( 1 - (dis/ max ( max ( dis )  ) ) )  / 2;

itr = 10;

for t=1:itr

    tm=ar;

    for i=1:sr

        for j=1:sc

            

            %%%

            if(ar(i,j)==15)

                if(rand() <= p(i,j) )

                        tm(i,j) = 50;

                end

            end

            %%%

        end

    end

    ar=tm;

    pause(1);

    image(ar);

    hold on;

end

⛄ 运行结果

⛄ 参考文献

[1] 田朝晖. 基于元胞自动机的城市空间形态模拟与优化研究[D]. 湖南师范大学, 2012.

[2] 尹长林, 张鸿辉, 游胜景,等. 基于元胞自动机模型的长沙市城市增长模拟研究[J]. 工程勘察, 2009, 37(4):6.

[3] 徐昔保. 基于GIS与元胞自动机的城市土地利用动态演化模拟与优化研究[D]. 兰州大学, 2007.

[4] 沈体雁, 张恒, 张进洁. 基于MODIS遥感影像及元胞自动机的京津冀地区城市模拟研究[C]// International Conference on Remote Sensing. 2010.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

 

### 自动机在人员疏散模拟中的应用 自动机(Cellular Automata, CA)作为一种离散动力学模型,因其简单、易于实现、能够模拟复杂系统等特点,在人员疏散模拟领域得到了广泛应用。通过将空间划分为离散的网格(),每个代表一个可能的人员位置或障碍物,并通过规则驱动人员移动,可以有效地模拟人员疏散过程。 ### 考虑心理策略的人员疏散模拟 在基于自动机的人员疏散模拟中,考虑心理策略可以提高模型的精度和效率,使其能够更准确地模拟人群的疏散行为。心理策略通常包括对紧急出口的选择、对周围人群的反应以及对环境变化的适应等因素。这些策略可以通过调整自动机的移动规则来实现,例如,人员可能会优先选择最近的出口,或者在遇到拥挤时选择绕道而行。 ### MATLAB代码示例 以下是一个简单的基于自动机并考虑心理策略的人员疏散模拟MATLAB代码示例: ```matlab function evacuationSimulation() % 初始化参数 gridSize = 50; % 网格大小 numPeople = 100; % 人员数量 exitPositions = [1, 1; gridSize, gridSize]; % 出口位置 maxIterations = 100; % 最大迭代次数 % 初始化网格 grid = false(gridSize, gridSize); peoplePositions = randi([1, gridSize], numPeople, 2); for i = 1:numPeople while grid(peoplePositions(i, 1), peoplePositions(i, 2)) peoplePositions(i, :) = randi([1, gridSize], 1, 2); end grid(peoplePositions(i, 1), peoplePositions(i, 2)) = true; end % 模拟过程 for iter = 1:maxIterations for i = 1:numPeople if ~isInGrid(peoplePositions(i, :), exitPositions) % 考虑心理策略,选择最近的出口 [~, nearestExit] = min(sum((peoplePositions(i, :) - exitPositions).^2, 2)); targetExit = exitPositions(nearestExit, :); % 计算移动方向 direction = targetExit - peoplePositions(i, :); if abs(direction(1)) > abs(direction(2)) moveDirection = [sign(direction(1)), 0]; else moveDirection = [0, sign(direction(2))]; end % 更新位置 newPosition = peoplePositions(i, :) + moveDirection; if ~grid(newPosition(1), newPosition(2)) && newPosition(1) >= 1 && newPosition(1) <= gridSize && newPosition(2) >= 1 && newPosition(2) <= gridSize grid(peoplePositions(i, 1), peoplePositions(i, 2)) = false; peoplePositions(i, :) = newPosition; grid(peoplePositions(i, 1), peoplePositions(i, 2)) = true; end end end % 可视化 imagesc(grid); hold on; plot(exitPositions(:, 2), exitPositions(:, 1), 'r*', 'MarkerSize', 10); plot(peoplePositions(:, 2), peoplePositions(:, 1), 'g.', 'MarkerSize', 10); hold off; title(['Iteration ', num2str(iter)]); drawnow; end end function result = isInGrid(position, exitPositions) result = any(arrayfun(@(i) isequal(position, exitPositions(i, :)), 1:size(exitPositions, 1))); end ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值