Hi Andre,

Generally, extensions are only written in JVMs languages, usually Java or
Scala (though you could Clojure, Groovy, Kotlin, etc.) Writing an extension
in Python isn't directly supported. However, there is the Python extension,
which allows NetLogo models to call python code:
https://github.com/NetLogo/PythonExtension. Thus, you probably won't have
to write an extension at all! If you tell me more about your use case, I
could outline how you might do that with the Python extension.

Best,
Bryan

On Thu, Feb 14, 2019 at 10:13 AM <[email protected]> wrote:

>
>
>
>
> On Wednesday, February 13, 2019 at 5:25:25 PM UTC-2, Bryan Head wrote:
> > Hi Gaby,
> >
> >
> > I would still encourage you to write this as an extension. It sounds
> like a pretty typical use case for extensions in NetLogo, though obviously
> it's completely up to you. Instead of implementing the preprocessing of the
> position data and calling out to AMPL API in the main method of your Java
> program, you would do it from the body of the implementation of the
> primitive. There's a few things that make an extension easier:
> >
> >
> > - Running from the main NetLogo program gives you the visualization,
> development, and inspection capabilities of NetLogo, making it much easier
> to write, debug, and understand the behavior of the model.
> >
> > - Calling out to NetLogo with the controlling API is possible, but a
> pain to work with frankly. Figuring out how to retrieve the correct
> information from NetLogo is hard, and getting information back into NetLogo
> is even harder (or rather, doing it in a way that doesn't introduce
> bizarre, hard to find bugs). It likely requires the parent program to be
> written specifically for the given model. In an extension, you get all this
> for free; the model decides what information to pass to the extension, when
> to get the results, and what to do with them.
> > - In general, using the controlling API means that you have to write a
> lot of code to do things that NetLogo normally does for you.
> >
> >
> > > The challenge is that I want the Netlogo simulation to keep running
> while the ILP optimization is being executed.
> >
> >
> > This may be a challenge, but implementing as an extension or with the
> controlling API doesn't make much difference for this. An easy way to do
> this in the extension is to write two primitives, `ipl:run-optimization`
> and `ipl:get-results` (assuming the name of your extension is `ipl`).
> `ipl:run-optimization` takes in the positional data as an argument,
> preprocesses the data and calls out to AMPL API. The call to AMPL API
> should either happen in a separate thread or with an asynchronous API
> method if AMPL API has one. This asynchronous would have to happen whether
> you're writing an extension or using the controlling API. You would then
> run `ipl:get-results` when the model needs the results. This primitive
> should report the optimized positional information. (Note, if you go this
> route, make sure the right turtle is getting the right positional result)
> >
> >
> > > Also, I want the ILP optimization to be triggered several times during
> > one simulation (each time for a different group of turtle).
> >
> >
> > For an extension, this is quite easy. You simply call the primitives
> multiple times with different data. For the controlling API, it's more
> difficult, your main program has to manually find the turtles in each group
> (that is, you kind of need to re-implement NetLogo's `with` primitive).
> >
> >
> >
> > If you post the Java code that preprocesses the data and calls out to
> AMPL API with placeholder variables for the positional information, I'd be
> happy to show how to write the corresponding extension primitives. I'm also
> happy to offer advice on the controlling API route as well, but probably
> won't be able to be as helpful since it's more complicated and freeform.
> >
> >
> > Hope that helps!
> > Bryan
> >
> >
> >
> >
> >
> > On Tue, Feb 12, 2019 at 4:20 PM Gaby Joe Hannoun <[email protected]>
> wrote:
> >
> >
> >
> >
> > Hello,
> >
> >
> > Thank you for your reply.
> > Based on the documentation provided about Netlogo extensions, I am not
> sure if building a Netlogo extension is actually the solution in my case.
> >
> >
> > I lean towards using the controlling API. I will do my best to explain
> the model below:
> >
> > I want a java main class to activate my Netlogo simulation in which the
> turtles will start moving in random directions. At a defined point in time,
> I want the positions of the turtles retrieved from Netlogo and reported to
> java. These positions are to be preprocessed in the java main class. Then,
> the processed data will be sent to an AMPL model to execute an ILP
> optimization using CPLEX (AMPL API used). After the ILP optimization is
> complete, a final position (goal generated by the ILP) is disseminated back
> to the each turtle in Netlogo (Each turtle will now adjust its movement and
> go to that specific position).
> >
> >
> > The challenge is that I want the Netlogo simulation to keep running
> while the ILP optimization is being executed. Also, I want the ILP
> optimization to be triggered several times during one simulation (each time
> for a different group of turtle).
> >
> >
> > I hope it is clear.
> >
> >
> > Thank you in advance.
> >
> >
> > Gaby
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > On Tuesday, 22 January 2019 14:13:31 UTC-5, Bryan Head  wrote:
> >
> >
> >
> >
> >
> > Hi Gaby,
> >
> >
> > There are two options I see for this. The first, and probably simplest,
> is to wrap the ILP optimization library in a NetLogo extension. For
> instance, the matrix extension wraps the JAMA java library:
> https://github.com/NetLogo/Matrix-Extension (though it's a little on the
> old side). A simpler example, if you're comfortable with Scala, is the CSV
> extension, which wraps the Apache Commons CSV library:
> https://github.com/NetLogo/CSV-Extension. The basic workflow is that you
> would add a reporter primitive to your extension that takes as an argument
> the necessary data for ILP and then returns the output of the optimization.
> >
> >
> >
> > The other option would the controlling API, which allows NetLogo to be
> used as a library in another Java program:
> https://github.com/NetLogo/NetLogo/wiki/Controlling-API.
> >
> >
> > This sounds like a perfect case for an extension, so I would recommend
> that approach over the controlling API approach.
> >
> > Hope that helps!
> > Bryan
> >
> >
> >
> > On Tue, Jan 22, 2019 at 7:09 AM <[email protected]> wrote:
> > Hello,
> >
> >
> >
> > I would like to use Netlogo in combination with a Java code that run an
> ILP optimization.
> >
> > During the simulation, input data (for the optimization) is required
> from Netlogo and the output of the optimization is to be disseminated back
> to Netlogo.
> >
> >
> >
> > I am not sure if it is possible to invoke and control the NetLogo
> application from the Java program (in which the optimization takes place)
> while maintaining the flow of data between NetLogo and java, or if there is
> a more practical technique to do that.
> >
> >
> >
> > Thanks,
> >
> > Gaby
> >
> >
> >
> > --
> >
> > You received this message because you are subscribed to the Google
> Groups "netlogo-devel" group.
> >
> > To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected].
> >
> > For more options, visit https://groups.google.com/d/optout.
> >
> >
> >
> > --
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > Bryan Head
> > PhD Candidate, Computer Science
> >
> > Center for Connected Learning and Computer-Based Modeling
> > Department of Electrical Engineering and Computer Science
> > Northwestern University
> >
> >
> >
> >
> >
> >
> > --
> >
> > You received this message because you are subscribed to the Google
> Groups "netlogo-devel" group.
> >
> > To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected].
> >
> > For more options, visit https://groups.google.com/d/optout.
> >
> >
> >
> > --
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > Bryan Head
> > PhD Candidate, Computer Science
> >
> > Center for Connected Learning and Computer-Based Modeling
> > Department of Electrical Engineering and Computer Science
> > Northwestern University
>
> Hey Bryan,
> Nice tip! I have a problem that is similar to the one reported by Gaby and
> I am more prone to solve it by using an extension. Do you have any
> experience in developing extensions to Netlogo using Python? If so, would
> you care to recommend any packages?
> Thanks,
> Andre
>
> --
> You received this message because you are subscribed to the Google Groups
> "netlogo-devel" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>


-- 
Bryan Head
PhD Candidate, Computer Science
Center for Connected Learning and Computer-Based Modeling
Department of Electrical Engineering and Computer Science
Northwestern University

-- 
You received this message because you are subscribed to the Google Groups 
"netlogo-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to