蚂蚁适应模型与代码

2024-01-05 15:52
文章标签 代码 模型 适应 蚂蚁

本文主要是介绍蚂蚁适应模型与代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这个模型中,两个蚂蚁群体正在寻找食物。尽管每只蚂蚁都遵循一套简单的规则,但整个群体的行为却很复杂。《蚂蚁适应》模拟了两个并排的蚂蚁群体,每个由不同的玩家控制。

该模型通过游戏教导用户复杂性。视图的感知区域包含了两个玩家各五个小部件。通过《蚂蚁适应》,我们旨在实现由GasLab(Wilensky,1997)或NIELS(Sengupta和Wilensky,2009)等系统最初展示的基于代理的建模的承诺,以一种富有互动的形式在非正式学习空间中进行现场游戏。

工作原理

在这个模型中,两个蚂蚁群体派出了它们的觅食者四处移动并寻找食物。如果它们走过食物,它们会捡起来并返回到它们的群体。当蚂蚁群体得到足够的食物时,就会产生另一只蚂蚁。用户可以通过涂抹(和擦除)信息素或向游戏中添加额外食物来与模型进行交互。当用户可以添加食物时,这些食物(花朵)也会在游戏中自行繁殖。一段时间后,群体将产生新的蚁后来建立每种颜色的新群体。如果不同颜色的蚂蚁相遇,它们可能会争斗。当蚂蚁争斗或从花朵那里取回食物时,它们会留下信息素的痕迹来吸引其他蚂蚁。

无用户交互

在设置时,世界中创建了两个蚂蚁群体(一个红色蚂蚁和一个黑色蚂蚁)和一些花朵。蚂蚁被产生在蚂蚁群体中,然后徘徊,直到它们找到食物,模型中表示为花朵。当它们找到食物时,它们通过吃花蜜个人获得能量,然后它们回到群体,同时铺下信息素,这在该模型中表示为粉色的路径,以喂养巢穴内的幼崽。靠近信息素路径的蚂蚁会被吸引到最强的化学路径上。当蚂蚁耗尽食物来源时,它们会再次开始徘徊,直到它们找到另一个食物来源或另一个信息素路径来追随。

当两个或更多对立的群体的蚂蚁相遇时,它们会争斗或互相吓唬,同时留下化学物质来吸引更多的蚂蚁。对于赢家来说,这有助于保护食物来源免受竞争对手群体的侵害。当蚂蚁群体内的蚂蚁收集到足够的食物时,蚂蚁后就会繁殖,这由每个群体的创造成本决定。花朵会周期性地在地图周围生长,为游戏中的食物补充。蚂蚁如果年龄太大、找不到食物,或者有时输了一场战斗,就会死亡。如果没有更多的蚂蚁生活在巢穴中,巢穴也会死亡。

当蚂蚁有足够的剩余食物时,它们会释放雄性和雌性有翅膀的蚂蚁来繁殖。当这些有翅膀的蚂蚁相遇时,它们会建立一个新的群体。

用户交互

用户可以通过设置其群体和蚂蚁的参数来与模型进行交互。理想情况下,每种颜色的群体都由一个个人或团队来控制。每次只能注册一个输入-所以团队需要确定轮流操作的实践。

群体团队以两种方式与这个复杂的系统进行交互。首先,他们可以调整他们的群体和蚂蚁的特征。第二,他们可以从世界中添加或删除某些环境特征。

群体团队可以决定他们的蚂蚁有多大和有多具侵略性。当蚂蚁的大小增加时,它们在战斗中会变得稍微更快更强。当玩家让他们的蚂蚁更具侵略性时,它会增加蚂蚁发现对立蚂蚁的可能性,从而增加了它们发动攻击的几率。START-ENERGY滑块设置了新生蚂蚁离开巢穴时的能量。这决定了它在找到食物之前能走多远。

尺寸、侵略性或起始能量的增加会降低群体的预期人口,因为它增加了创造更多蚂蚁的成本,显示在“创造成本”小部件中。这些变化还会通过参数(大小和侵略性)和代理行为(收集食物、留下路径和战斗)的新兴互动来增加他们发生争斗和获胜的可能性。

群体团队可以通过添加化学路径、添加花朵和用醋擦除化学路径来调整环境。

如何使用

初设代码

globals
[is-stopped?          ; flag to specify if the model is stopped
]breed [flowers flower] ; the main food source
breed [nests nest]     ; the ants' home, where they bring food to and are born
breed [ants ant]       ; the red and blue ants
breed [queens queen]   ; the reproductive flying ants that found new colonies
breed [males male]     ; the queens' mates, required only for founding new colonies
breed [gasters gaster] ; part of the HUD display of ants
breed [boxes box]      ; the graphical element that holds the two HUD displayed ants in the top right and left of the model
breed [demos demo]     ; the other part of the HUD displayturtles-own
[age                  ; an ant's ageteam                 ; an ant's team
]patches-own
[chemical             ; amount of chemical on this patchnest?                ; true on nest patches, false elsewheremy-color             ; determines an ant's teamis-food?             ; whether a patch contains food
]ants-own
[energy               ; each ant has energy, they die if energy is 0mother               ; stores the ant's mother nesthas-food?            ; whether the ant is carrying foodprey                 ; the target of the antfighting?            ; whether this ant is currently in a fight
]nests-own
[food-store            ; the total food stored inside the nestmother                ; stores the nest's mother nest
]queens-own
[food-store            ; queens carry some food with them in fat on their body to found the new nest
];; setting up the model ;;
to startup  ; launches setup when the application startssetup
endto setup    ; sets up two colonies in fixed locations in the world, each with 10 ants that belong to each nestclear-allinitializecreate-HUD-display-of-antsreset-ticks
endto initialize ; sets up the colonies, initial flowers, grass, and gives each nest 10 antsset is-stopped? falseask patches[set nest?  falseset is-food? falseset my-color green - 1 set pcolor green - 1]flowering 45 1 ; makes 45 flowersmake-nest 1 -24 8  cyan "blue-team" ; place a blue colonymake-nest 1 27 -7 red "red-team"      ; place a red colonyask nests [ hatched-ant 10 ]          ; give each colony 10 antsset-default-shape nests "anthill"ask turtles [ set age  1 ] ; keeps track of all turtles age
end
;; the model loop ;;
; Every time step ants move produce. Ants without food die, and nests without ants die.to go                         ; repeats every time step, because the go button in the interface is set to forever.move-ants                   ; moves antscreate-more-ants            ; produces more antstouch-input                 ; handles user touch inputs on view.paint-pheromone             ; recolors view from changes of pheromone level on each patch.flowering 1 500             ; grows more flowers for the ants to eatdiffusion-pheromone         ; slowly evaporate pheromone trailsdeath                       ; checks if ants die due to old agemove-winged-ants            ; moves reproductive ants (queens and males), found a new colony if they run into each other.kill-empty-nest             ; removes nests with no ants left in themshow-nest-food              ; places a label of food stored on nestsgo-into-nest                ; hides ants when they approach nests to simulate going insidecontrol-heads-up-display-of-antstick
end

屏幕中央有五个小部件,用于控制红色和黑色两个群体的功能。如上图所示,标记为4的PLAY和STOP控制模型的时间,以ticks为单位计量。如图中标记为5的RESTART将模型设置回初始状态。标记为6的ADD下拉菜单允许您选择放置花朵、化学信息素路径或用醋擦除路径。要使用它,选择其中一个,然后单击视图。标记为7的EVAPORATION-RATE滑块控制化学物质的蒸发速率。

每个团队都可以使用视图左侧和右侧的滑块来决定他们的蚂蚁有多大和有多具侵略性,如上图标记为2。然后他们可以选择每只新蚂蚁开始时携带多少食物。一旦团队决定了,他们应该同意点击RESTART按钮来设置蚂蚁巢穴(用红色和黑色的旗帜标记)和食物-花朵。点击PLAY按钮开始模拟。

如果您想改变大小、侵略性或起始食物,调整您团队的滑块,可以在按RESTART之前或之后影响新生蚂蚁。

标记为1的监视器在顶部监视红色和黑色的蚂蚁,左边计数蚂蚁的群体名为黑蚂蚁,右边计数红蚂蚁。标记为2的底部左右两侧的三个滑块是玩家可以用来调整蚂蚁的大小、侵略性和最大能量的滑块。调整这些滑块可以随时在游戏中进行实验以尝试不同的设置。标记为3的中间是一个监视器CREATE COST。CREATE COST监视器显示了目前生产一个新蚂蚁的总成本。具体来说,当存储的食物大于CREATE COST时,群体就会产生一个新蚂蚁。成本是由三个滑块的函数计算得出的。

注意事项

蚂蚁群体通常按顺序开发食物来源,首先从离巢最近的食物开始,然后完成距巢最远的食物。对于蚂蚁来说,形成距离较远的食物更加固定的路径更加困难,因为化学路径在被加强之前会有更多的蒸发和扩散。

一旦群体完成了最近的食物收集,到那个食物的化学路径自然消失,释放出蚂蚁来帮助收集其他食物来源。更远的食物来源需要更大的“临界数量”蚂蚁形成稳定的路径。

两个群体的人口在绘图中显示。图中的线颜色与群体的颜色相匹配。

调整团队的侵略性或大小会改变蚂蚁的行为。它也会改变标记为8的部件中蚂蚁的描述。

注意食物与巢穴的接近程度如何影响人口增长。

注意化学物质过多是否会导致问题。

这个模型在两个层面上运行,既代表个体蚂蚁,又代表群体。这使得它成为一个超级有机体的基于代理的模型。

尝试

尝试不同的放置食物源。如果您将花朵放得离巢更近会发生什么?离得更远呢?与巢穴等距离呢?在现实世界中,蚂蚁群体通常会先开发一种来源,然后再开发另一种来源(而不是同时开发)。

探索您放置蚂蚁追随的化学路径的最有效位置。什么地方最适合蚂蚁寻找食物?

您的群体可以生存多久?您的群体可以有多大?

尝试不同级别的侵略性和体型。哪一个对群体的成功更重要?

尝试和平地收集花朵。

尝试在群体之间发动一场战斗。

这篇关于蚂蚁适应模型与代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/573382

相关文章

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面