如何在Netlogo中获取列表的所有可能组合(在列表中没有重复值并使用Netlogo)

时间:2017-11-02 19:24:32

标签: list combinations permutation netlogo

我正在努力编写一个Netlogo程序,可以让我从列表中找到所有组合。以下是我想要建模的一个例子。

我有一个五个代理列表:[agent1,agent2,agent3,agent4,agent5]我想知道如何获得所有可能的组合,组合必须是固定大小(例如,如果size = 3,那么组合场景应该是[agent1,agent2,agent3],[agent1,agent2,agent4],[agent1,agent2,agent5],[agent1,agent3,agent4],..........

以这种方式,我将能够从每个独特的组合中计算出成本绩效,其中3个代理可以相互交互以确定成本,并且我将能够找到最佳组合(即最好的3个代理商)谁可以共同努力以实现最低成本。)

我需要一种批量生产方式在Netlogo建模环境中完成这项工作,以便稍后我可以更改参数,例如大小和代理总数。感谢代码演示!

1 个答案:

答案 0 :(得分:2)

to-report comb [_m _s]
  if (_m = 0) [ report [[]] ]
  if (_s = []) [ report [] ]
  let _rest butfirst _s
  let _lista map [? -> fput item 0 _s ?] comb (_m - 1) _rest
  let _listb comb _m _rest
  report (sentence _lista _listb)
end