蚂蚁适应模型与代码

发布时间:2024年01月05日

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

该模型通过游戏教导用户复杂性。视图的感知区域包含了两个玩家各五个小部件。通过《蚂蚁适应》,我们旨在实现由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 display



turtles-own
[
  age                  ; an ant's age
  team                 ; an ant's team
]

patches-own
[
  chemical             ; amount of chemical on this patch
  nest?                ; true on nest patches, false elsewhere
  my-color             ; determines an ant's team
  is-food?             ; whether a patch contains food
]

ants-own
[
  energy               ; each ant has energy, they die if energy is 0
  mother               ; stores the ant's mother nest
  has-food?            ; whether the ant is carrying food
  prey                 ; the target of the ant
  fighting?            ; whether this ant is currently in a fight
]


nests-own
[
  food-store            ; the total food stored inside the nest
  mother                ; 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 starts
  setup
end

to setup    ; sets up two colonies in fixed locations in the world, each with 10 ants that belong to each nest
  clear-all
  initialize
  create-HUD-display-of-ants
  reset-ticks
end

to initialize ; sets up the colonies, initial flowers, grass, and gives each nest 10 ants
  set is-stopped? false
  ask patches
  [
    set nest?  false
    set is-food? false
    set my-color green - 1 set pcolor green - 1
  ]
  flowering 45 1 ; makes 45 flowers
  make-nest 1 -24 8  cyan "blue-team" ; place a blue colony
  make-nest 1 27 -7 red "red-team"      ; place a red colony
  ask nests [ hatched-ant 10 ]          ; give each colony 10 ants
  set-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 ants
  create-more-ants            ; produces more ants
  touch-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 eat
  diffusion-pheromone         ; slowly evaporate pheromone trails
  death                       ; checks if ants die due to old age
  move-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 them
  show-nest-food              ; places a label of food stored on nests
  go-into-nest                ; hides ants when they approach nests to simulate going inside
  control-heads-up-display-of-ants
  tick
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的部件中蚂蚁的描述。

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

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

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

尝试

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

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

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

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

尝试和平地收集花朵。

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

文章来源:https://blog.csdn.net/weixin_44956825/article/details/135353203
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。