Collaboration: A modular model with Netlogo?

Dear Colleagues,
We are going to develop a complex land-use and behaviour ABM in Netlogo as part of a larger project. The ABM team consists of three groups in three different countries. Therefore we decided to design a modular ABM so that each team can work on a different module simultaneously, with modules connected to each other via pre-defined interfaces. Apart from facilitating remote collaboration in code development, we think modular design also offers many other advantages, such as code reuse, incapsulation, and model upscaling.
Does anyone have previous experiences in developing a modular ABM collaboritvely in Netlogo? What are your experiences like, and what are the lessons learned? Any suggestions will be highly appreciated.
Thank you!
Best regards,
Birgit

Hi Birgit!
From my experience, if you want to create a modular ABM model using Netlogo you need to employ another tool as well, that will manage I/O, this could be a control code, in python, Matlab etc. or a database that could manage I/O. Now, if you need the link between the different modules to be dynamic (i.e., at every tick) I do not know if this is possible, with Netlogo, due to the Java engine. It is however, not recommended to I/O dynamically (there was a recent post at [netlogo-users] group).

Although, I have not created collaboratively a modular Netlogo model, we have created an online interface in order for stakeholders to use a Netlogo model (https://www.mdpi.com/2073-4441/12/10/2716). This included, a database (Figure 8) which allowed the I/O between the Netlogo program and the interface (in javascript). So, I can think that something like that could be used to develop a modular Netlogo.

I have created a modular ABM, using Mesa, which allowed to use all the OOP abilities of python, version control which is important in collaborative projects, visualization (i.e. dash) etc allowing the dynamic link between the modules.
I hope this helped a bit! Feel free to contact me!
Best regards,
Ifigeneia

Dear Birgit,

did you make any progress on this? And what do you mean by “modularity”. If it is software modularity, i.e. the subdivision of code/programs into modules, then Netlogo’s __includes directive is your friend, see my recent Sea Use model netlogo/vinos.nlogo · main · Multiple Stressors on North Sea Life / Viable North Sea · GitLab for an example.

If you think of “modularity” as “interoperability”, I think @ikoutiva’s suggestion to use the controlling API with Python is the way to go. We haven’t gone there yet, so I cannot report, but it is also on the wish list for our sea use model.

Cheers,
Carsten