草庐IT

复杂系统

大龙10 2023-10-10 原文

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
第6章目录

6.10 复杂系统

1、个体和系统

  • 思考一只蚂蚁,即蚂蚁个体,蚂蚁是一个自治智能体,它能够感知环境(用触角来收集化学信号的方向和强度信息),并能根据这些信号决定移动。
  • 但仅凭一只蚂蚁能否完成筑巢、采集食物、捍卫蚁后这些艰巨的任务?
    蚂蚁是一种简单的单元,只能感知其周围的环境。
    而蚁群就是一个复杂的系统,是一个“超级有机体”,其中的各部分成员协同工作,共同完成艰巨和复杂的任务。

2、多个自治智能体

  • 前面我们已经学习了如何构建自治智能体,接下来要做的就是让多个自治智能体并行运行——智能体不仅能感知物理环境,还能感知同伴的活动,最后根据这些信息决定如何移动。
    我们打算用Processing创建复杂系统。

3、复杂系统

  • 什么是复杂系统?
    复杂系统通常是这么定义的:“一个复杂系统的整体不等同于局部的简单组合。”
    复杂系统的局部是很简单且易于理解的个体,但它们组成的整体会表现得非常复杂、智能且难以预测。

4、3个主要原则

复杂系统有3个主要原则:

  • 个体之间存在小范围的联系。

一直以来我们都在遵循这个原则:小车对环境的感知能力是有限的。

  • 个体的动作是并行的。

我们需要用代码模拟这个特性。在Processing的每一轮draw()循环中,每个个体都应该移动(并行地绘制它们的外形)。

  • 系统在整体上会呈现一种自发现象。

个体之间的交互会出现复杂行为和智能模式。
自然界的复杂系统确实会呈现特定的模式(蚁群、白蚁、迁移、地震、雪
花,等等),
我们能否用Sketch模拟出同样的效果?

5、附加特性

以下3个附加特性有助于我们更好地讨论复杂系统,我们可以按照这些特性完善复杂系统的模拟。
需要注意的是,它们是一个模糊子集。并非所有复杂系统都具备这3个特性。

  • 非线性

  • 复杂系统的这个特性往往称为“蝴蝶效应”,“蝴蝶效应”理论是由数学家
    和气象学家Edward Norton Lornez提出的,他是混沌理论研究方面的先驱。

  • 1961年,Lornez重复地运行一段天气模拟程序,也许是为了节省时间,他把某个初始值0.506 127输成了0.506,得到的结果却和输入0.506 127时应该得到的结果完全不同。换句话说,该理论认为,一只蝴蝶在地球的另一边扇动翅膀可能会引起大规模的气候转变,从而破坏周末的沙滩度假。

  • 我们称这种特性为“非线性”,因为初始条件变化和结果变化之间不成线性关系。初始条件的微小变化可能对结果产生巨大的影响。非线性系统是混沌系统的一个超集。在下一章,我们会看到:在一个由0和1组成的系统中,即使只改变其中的一个比特位,结果也会完全不同。

  • 竞争和合作

复杂系统的元素之间往往同时存在竞争和合作关系。
后面的群集系统将引入3个规则:协调、一致和分离。

  • 协互“合作”——也就是聚集在一起并共同移动;
  • 分离使个人为空间调和一致使个体相展开“竞争”。

在实现群集系统时,如果去掉竞争或合作规则,系统的复杂性可能随之丧失。
竞争和合作规则存在于有生命的复杂系统中,不存在于无生命的复杂系统中,比如气候系统。

  • 反馈

  • 复杂的系统通常包括一个反馈回路,系统的输出被反馈回系统,在正方向或反方向上影响自身行为。
  • 举个例子,因为油价比较低,所以你每天开车上下班。在这种情况下,每个人都会开车上下班,导致汽油供不应求,油价因此上升。因为开车上下班的成本太高了,于是大家决定坐地铁上下班,汽油的需求变少,油价也随之降低。
  • 油价同时是系统(决定你是开车还是坐地铁)的输入和输出(从需求中得到的结果)。需要特别指出的是,经济模式(如供应/需求,股市)就是人类复杂系统的一个例子。其他例子包括潮流和趋势、选举、人群和车流。
  • 复杂性将是本书剩余部分的一大主题。接下来,我们将在Vehicle类中加入查看周围小车对象的能力。

有关复杂系统的更多相关文章

  1. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  2. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  3. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  4. ruby - 使用 AES 的 Rails 加密,过于复杂 - 2

    我在加密来self正在使用的第三方供应商的值时遇到问题。他们的指令如下:1)Converttheencryptionpasswordtoabytearray.2)Convertthevaluetobeencryptedtoabytearray.3)Theentirelengthofthearrayisinsertedasthefirstfourbytesontothefrontofthefirstblockoftheresultantbytearraybeforeencryption.4)EncryptthevalueusingAESwith:1.256-bitkeysize,2.25

  5. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  6. ruby - 测试一个复杂的方法 - 2

    我正在开发西洋跳棋实现,其中有许多易于测试的方法,但我不确定如何测试我的主要#play_game方法。我的大多数方法都可以很容易地确定输入和输出,因此也很容易测试,但这种方法是多方面的,实际上并没有容易辨别的输出。这是代码:defplay_gameputs@gui.introwhile(game_over?==false)message=nil@gui.render_board(@board)@gui.move_requestplayer_input=getscoordinates=UserInput.translate_move_request_to_coordinates(play

  7. ruby - 是否有用于复杂比较的漂亮语法? - 2

    方法应返回-1,0或1分别表示“小于”、“等于”和“大于”。对于某些类型的可排序对象,通常将排序顺序基于多个属性。以下是可行的,但我认为它看起来很笨拙:classLeagueStatsattr_accessor:points,:goal_diffdefinitializepts,gd@points=pts@goal_diff=gdenddefothercompare_pts=pointsother.pointsreturncompare_ptsunlesscompare_pts==0goal_diffother.goal_diffendend尝试一下:[LeagueStats.new(

  8. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

  9. ruby-on-rails - 如何构建复杂的 Rails 系统 - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我们有以下(以及更多)系统,我们将数据从一个应用推送/拉取到另一个:托管CRM(InsideSales.com)Asterisk电话系统(内部)横幅广告系统(openx,我们托管)潜在客户生成系统(自行开发)电子商务商店(spree,我们托管)工作板(本土)一些工作网站抓取+入站工作提要电子邮件传送系统(如Mailchimp,自主开发)事件管理系统(如eventbrite,自主开发)仪表板系统(大量图表和

  10. ruby-on-rails - Rails 3,在RAILS_ROOT上方显示来自本地文件系统的jpg图片 - 2

    我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。

随机推荐