limitation of forming subset in netlogo

二次信任 提交于 2019-12-13 02:14:49

问题


Dear Netlogo community,

Last week I posted the question on the same forum about forming subset from a set in netlogo. Here is the link.

How to form subset form a set of numbers in Netlogo

The problem with the above thread is that it wont give the subsets if the set contains more than 21 elements. It throws java heap space out of memory exception. I believe this is because the above thread stored all subsets in one list and eventually list of list reached to its maximum range and throws java heap space out of memory exception. Any help in this regard will be valuable.


回答1:


A set with N elements has 2^N subsets. Computationally, you cannot do anything with all of them once N is big, but you can still pick from them randomly. Let's assume your N elements are in a list. Then you can pick a random subset:

to-report random-subset [#lst]
  let _result []
  foreach #lst [
    if (one-of [true false]) [
      set _result lput ? _result
    ]
  ]
  report _result
end

Note that this is equivalent to picking a random number in [0..(2^N-1)] and then selection the subset "corresponding" to that number.

If you prefer a more functional approach, you can use

to-report random-subset02 [#lst]
  report filter (task [one-of [true false]]) #lst
end



回答2:


Here is code that runs a task on every subset as soon as that subset is generated, without accumulating all of the subsets in memory:

to foreach-subset [xs fn]
  foreach-subset-helper [] xs fn
end

to foreach-subset-helper [prefix xs fn]
  ifelse empty? xs
    [ (run fn prefix) ]
    [ foreach-subset-helper prefix butfirst xs fn
      foreach-subset-helper lput (first xs) prefix butfirst xs fn ]
end

Sample run:

observer> foreach-subset [1 2 3] task print
[]
[3]
[2]
[2 3]
[1]
[1 3]
[1 2]
[1 2 3]

Tasks in NetLogo are documented at http://ccl.northwestern.edu/netlogo/docs/programming.html#tasks.



来源:https://stackoverflow.com/questions/31019305/limitation-of-forming-subset-in-netlogo

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!