Performance NetLogo-nelson winter企业家模式有效,但速度非常慢-可以加快吗?

Performance NetLogo-nelson winter企业家模式有效,但速度非常慢-可以加快吗?,performance,netlogo,Performance,Netlogo,我一直在研究一个基于Nelson Winter模型模拟企业家的NetLogo模型。在该模型中,每一个勾号都有某一产品的需求和供给,然后价格=需求/供给,因此每一个勾号企业家都有机会成立一家公司并赚钱,成立一家公司的概率受同一集团中企业家成立的其他公司的收入的影响,同一集团中的企业家共享相同的gamma和lambda,gamma决定了在研发(创新和模仿)中投资的利润比例,lambda决定了在创新中投资的研发资金比例。RD的成功将提高产量。最后它将返回按组平均的公司结果,同一组中的公司将具有相同的c

我一直在研究一个基于Nelson Winter模型模拟企业家的NetLogo模型。在该模型中,每一个勾号都有某一产品的需求和供给,然后价格=需求/供给,因此每一个勾号企业家都有机会成立一家公司并赚钱,成立一家公司的概率受同一集团中企业家成立的其他公司的收入的影响,同一集团中的企业家共享相同的gamma和lambda,gamma决定了在研发(创新和模仿)中投资的利润比例,lambda决定了在创新中投资的研发资金比例。RD的成功将提高产量。最后它将返回按组平均的公司结果,同一组中的公司将具有相同的companyNO、相同的gamma和lambda。 这个过程似乎运行得很好,但运行速度非常慢,以至于我担心无法切实运行许多模拟。关于如何加快这个过程有什么想法吗?在没有分组的早期版本模型中,该模型运行得非常快,因此我认为问题在于分组。模型代码变得相当长,所以我只添加了与分组相关的部分。如果问题似乎出在其他地方,我可以向某人提供更多代码。任何帮助都将不胜感激

globals[
  S;;aggregate supply
  SafterDie
  D;;aggregate demand
  P;;price of demand,P=D/S
  g b eta;;used for get demand
  file1
  file2
  totalGamma
  totalLambda
  NO
 ]
 breed [entrepreneurs a-entrepreneur]
 breed [companies a-company]

entrepreneurs-own[ 
 humanCapital 
 timesOfChuangYe
 chuangYe?;;chuang ye mei de
 gaiLv
 renGamma
 renLambda
 renNO
]

companies-own[
 humanCapital
 tempHumanCapital;;20140516
 oldHumanCapital
 initialCap
 initialTech
 companiesNO
 capitalK;;capital K,nedd money c*K
 gamma;;money uesd for R&D
 lambda;;money used for innovation in terms of imitation
 lifeLength
 RecentRevenue;;profit every tick
 production;;production of the tick    
 profit
 accumulatedInnovation
 accumulatedImitation 
]

to setup    
foreach n-values NoOfgroup [?]  [
      set bigGamma (random-in-range 0.4 1);;money uesd for innovation
      set bigLambda (random-in-range 0.1 1);;money used for innovation VS imitation
      set NO (? + 1)
      create-entrepreneurs numberOfentreprenursInEveryGroup [ entrepreneur-setup ]
      ]

to entrepreneur-setup ;; turtle procedure
 set color red
 set shape "line";;line
 move-to one-of patches
 set humanCapital random-in-range 0 1
 set chuangYe? 0;;if Entrepreneurship,0 no,1 yes
 set timesOfChuangYe 0;;Entrepreneurship times
 set renGamma bingGamma
 set renLambda bingLambda
 set renNO NO
end

to ifChuangYe
 ask entrepreneurs with [chuangYe? = 0]
 [
  let node1 self
  set gaiLv 0;;probability of entrepreneurship
  getProbabilitiOfEntrepreueur node1
  if (random-float 1 <= gaiLv)[
    set chuangYe? 1
    set timesOfChuangYe (timesOfChuangYe + 1)
    hatch-companies 1 [
     set color yellow
     set shape "house"
     create-link-with node1 [set color yellow]
     set humanCapital ([humanCapital] of node1);;!!!
     set companyNO ([renNO] of node1)
     set gamma ([renGamma] of node1);;money uesd for RD
     set lambda ([renLambda] of node1);;money used for innovation VS imitation
     set initialTech humanCapital
     set tempHumanCapital humanCapital
     set oldHumanCapital humanCapital
     company-setup
      ]
     ]
   ]  
  end

 to getProbabilitiOfEntrepreueur [node1]
   ask node1[
     let number renNO
      let co1 no-turtles
      let en1 entrepreneurs with [renNO = number];;get entrepreneur
      ask en1 [
        set co1 link-neighbors;;get company
         ]
      let total 0
      ask co1 [;;to link
        if lifeLength != 0 [
         let k lifeLength
         let singleRevenue 0
         if lifeLength >= 6 [set k 6]
         foreach n-values k [?]  [
         set singleRevenue (singleRevenue + (item ? RecentRevenue)/ (? + 1))
      ];;RecentRevenue is a list to collect a company's profit of every tick
    set total total + singleRevenue
    ]
   ]
set gaiLv (1 / 50 * total + 5 / 100)
;;show gaiLv
]
end

to imitation
  let newH 0
  ask companies[
   set accumulatedImitation (accumulatedImitation + (1 - lambda)* gamma * profit)
   if accumulatedImitation >= 0.3 * (capitalK ^ 3) [
   let co2 companies with [companyNO = companyNo]     
   set newH max ([humanCapital] of co2)
   if newH > humanCapital [set humanCapital newH set imNO imNO + 1]
   set accumulatedImitation (accumulatedImitation - 0.3 * (capitalK ^ 3))
   ]
  ]
globals[
S、 ;总供应量
萨弗蒂
D、 ;总需求
P、 ;需求价格,P=D/S
g b eta;;用于获取需求
文件1
文件2
总伽马
安巴达酒店
不
]
培育[企业家a-企业家]
培育[公司a-公司]
企业家拥有[
人力资本
黄页市
创业?;创业美德
盖尔夫
γ射线
伦拉姆达
雷诺
]
公司拥有[
人力资本
tempHumanCapital;;20140516
oldHumanCapital
首字母大写
initialTech
公司编号
Capitalalk;;资本K,nedd货币c*K
gamma;;用于研发的资金
lambda;;在模仿方面用于创新的钱
生命长度
重新计算;每一滴水都有利润
生产;蜱的生产
利润
累积更新
累积模拟
]
设置
foreach n-值NoOfgroup[?][
设置bigGamma(随机范围为0.41);;用于创新的资金
设置bigLambda(随机范围0.1);;用于创新与模仿的资金
设置编号(?+1)
创建企业家编号EnterpreneursineveryGroup[企业家设置]
]
建立企业家制度;;海龟手术
设置颜色为红色
设置形状“线”;;线
移动到其中一个补丁
将humanCapital设置为0 1范围内的随机值
集创业?0;;如果是创业,0否,1是
黄页0的设定时间;;创业时代
设置renGamma和gamma
集伦兰姆达宾兰姆达
设置雷诺号
终止
致创业
向企业家询问[创业?=0]
[
让我点头
设置gaiLv 0;;创业概率
GetProbabilitioFentRepreeur节点1
if(随机浮点1=6[设置k6]
foreach n值k[?][
设置单一收入(单一收入+(项目?重新集中收入)/(?+1))
]最近收益表是一份收集公司每一笔利润的清单
设置总收入+单项收入
]
]
设置gaiLv(1/50*总计+5/100)
展示自己
]
终止
模仿
让newH 0
询问公司[
设置累计指令(累计指令+(1-λ)*伽马*利润)
如果累加指令>=0.3*(大写^3)[
让二氧化碳公司与[companyNO=companyNO]
设置新的最大二氧化碳排放量([人力资本])
如果newH>humanCapital[设置humanCapital newH设置imNO imNO+1]
设置累计指令(累计指令-0.3*(大写^3))
]
]

结束

我建议将此过程分成更多更小的过程,然后使用探查器扩展告诉您哪些过程是性能热点。请注意,
with
始终搜索整个代理集,因此每次搜索时,例如,
companyNO=companyNO]的公司
您正在扫描每一家公司。通常在NetLogo中,根本不需要使用who编号来查找who编号;使用链接来连接海龟,或将海龟引用直接存储在变量中。但如果没有分析数据,我不知道这是否是缓慢的原因。