# FAQ (Frequently Asked Questions)

NetLogo 5.0.3 User Manual

Feedback from users is very valuable to us in designing and improving NetLogo. We'd like to hear from you. (See Contacting Us.)

## Questions

### General

- Why is it called NetLogo?
- How do I cite NetLogo or HubNet in a publication?
- How do I cite a model from the Models Library in a publication?
- Where and when was NetLogo created?
- What programming language was NetLogo written in?
- What's the difference between StarLogo and NetLogo?
- Under what license is NetLogo released? Is the source code available?
- Do you offer any workshops or other training opportunities for NetLogo?
- Are there any NetLogo textbooks?
- Is NetLogo available in other languages besides English?
- Is NetLogo compiled or interpreted?
- Has anyone built a model of <x>?
- Are NetLogo models runs scientifically reproducible?
- Will NetLogo and NetLogo 3D remain separate applications?
- Can I run NetLogo on my iPad or iPhone?

### Downloading

- Can I have multiple versions of NetLogo installed at the same time?
- I'm on a UNIX system and I can't untar the download. Why?
- How do I install NetLogo unattended?
- On Windows, how do I configure the Java installation that the without-Java installer uses?

### Applets

- I tried to run one of the applets on your site, but it didn't work. What should I do?
- Can I make my model available as an applet while keeping the code secret?
- Can a model saved as an applet use `import-world`, `file-open`, and other commands that read files?
- When I tried loading my model as an applet I get an error like: java.lang.ClassFormatError: Incompatible magic value.

### Running

- Can I run NetLogo from a CD, a network drive, or a USB drive?
- Why is NetLogo so much slower when I unplug my Windows laptop?
- How come NetLogo won't start up on my Linux machine?
- When I try to start NetLogo on Windows I get an error "The JVM could not be started". Help!
- Can I run NetLogo from the command line, without the GUI?
- Does NetLogo take advantage of multiple processors/cores?
- Can I distribute NetLogo model runs across a cluster or grid of computers?
- Is there any way to recover lost work if NetLogo crashes or freezes?

### Usage

- When I move the speed slider all the way to the right, why does my model seem to stop?
- Can I use the mouse to "paint" in the view?
- How big can my model be? How many turtles, patches, procedures, buttons, and so on can my model contain?
- Can I use GIS data in NetLogo?
- My model runs slowly. How can I speed it up?
- Can I have more than one model open at a time?
- Can I change the choices in a chooser on the fly?
- Can I divide the code for my model up into several files?

### Programming

- How does the NetLogo language differ from other Logos?
- How come my model from an earlier NetLogo doesn't work right?
- How do I take the negative of a number?
- My turtle moved forward 1, but it's still on the same patch. Why?
- How do I keep my turtles on patch centers?
- `patch-ahead 1` is reporting the same patch my turtle is already standing on. Why?
- How do I give my turtles "vision"?
- Can agents sense what's in the drawing layer?
- I'm getting numbers like 0.10000000004 and 0.799999999999 instead of 0.1 and 0.8. Why?
- The documentation says that `random-float 1.0` might return 0.0 but will never return 1.0. What if I want 1.0 to be included?
- How can I use different patch "neighborhoods" (circular, Von Neumann, Moore, etc.)?
- How can I keep two turtles from occupying the same patch?
- How can I find out if a turtle is dead?
- Does NetLogo have arrays?
- Does NetLogo have hash tables or associative arrays?
- How can I convert an agentset to a list, or vice versa?
- How do I stop foreach?

### BehaviorSpace

- Why are the rows in my BehaviorSpace table results out of order?
- How do I gather data every n ticks?
- I'm varying a global variable I declared in the Code tab, but it doesn't work. Why?
- Why are some of my results cut off in Excel?

### NetLogo 3D

- Can I make a 3D applet?
- Does NetLogo 3D work with my stereoscopic device?

### Extensions

- I'm writing an extension. Why does the compiler say it can't find org.nlogo.api?

## General

### Why is it called NetLogo?

The "Logo" part is because NetLogo is a dialect of the Logo language.

"Net" is meant to evoke the decentralized, interconnected nature of the phenomena you can model with NetLogo, including network phenomena. It also refers to HubNet, the multiuser participatory simulation environment included in NetLogo.

### How do I cite NetLogo or HubNet in a publication?

If you use or refer to NetLogo, HubNet or a model from the NetLogo models library, we ask that you cite it as follows:

NetLogo itself: Wilensky, U. 1999. NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University. Evanston, IL.

HubNet: Wilensky, U. & Stroup, W., 1999. HubNet. http://ccl.northwestern.edu/netlogo/hubnet.html. Center for Connected Learning and Computer-Based Modeling, Northwestern University. Evanston, IL.

### How do I cite a model from the Models Library in a publication?

The correct citation is included in the "Credits and References" section of each model's Info tab.

### Where and when was NetLogo created?

NetLogo was first created in 1999 by Uri Wilensky at the Center for Connected Learning and Computer-Based Modeling, then at Tufts University in the Boston area. NetLogo grew out of StarLogoT, which was authored by Wilensky in 1997. In 2000, the CCL moved to Northwestern University, in the Chicago area. NetLogo 1.0 came out in 2002, 2.0 in 2003, 3.0 in 2005, 4.0 in 2007, 4.1 in 2009, and 5.0 in 2012.

### What programming language was NetLogo written in?

NetLogo is written mostly in Scala, with some parts in Java. (Scala code compiles to Java byte code and is fully interoperable with Java and other JVM languages.)

### What's the relationship between StarLogo and NetLogo?

The original StarLogo began at the MIT Media Lab in 1989 and ran on the Connection Machine. Later versions were developed for Macintosh computers: MacStarLogo (1994, MIT) and StarLogoT (1997, Tufts).

Today there are two StarLogo descendants under active development: NetLogo (from the CCL at Northwestern University) and StarLogo TNG (from MIT). NetLogo is the most widely used agent-based modeling environment in both education and research. StarLogo TNG is distinguished by its programming interface based on colored blocks.

### Under what license is NetLogo released? Is the source code available?

NetLogo is free, open source software under the GPL (GNU General Public License), version 2, or (at your option) any later version.

The source code is on GitHub, here. Development discussion is on the netlogo-devel group.

The User Manual is published under a Creative Commons Attribution-ShareAlike license (CC BY-SA 3.0).

Source code for all of the extensions bundled with NetLogo is on GitHub, here. Most of the extensions are in the public domain (CC0 notice). Other extensions are released under open source licenses. See each extension's README for details.

The Code Examples in the the Models Library are in the public domain (CC0 notice).

The rest of the models in the Models Library are provided under a variety of licenses. Some are public domain and some are open source, but most are under the Creative Commons Attribution-ShareAlike license (CC BY-NC-SA), which is not an open source license, though the models are free for noncommercial distribution and use.

See each model's Info tab to check its particular license.

The models are in a public Git repository here.

### Do you offer any workshops or other training opportunities for NetLogo?

We offer workshops from time to time. If a workshop has been scheduled, we will announce it on the the NetLogo Users Group.

### Are there any NetLogo textbooks?

See the Textbooks section of our Resources page.

We at the CCL have hoped to write several NetLogo textbooks for quite some time. These could be aimed at different audiences, such as: middle school, high school, undergraduate course in modeling or complexity, practical guide for interested adults.

Unfortunately, we have not yet been able to find the time to make these happen. If anyone from the user community would like to collaborate on such a venture, please let us know. We would welcome it.

### Is NetLogo available in other languages besides English?

Volunteers have translated the user manual into Chinese and Czech. The translated versions are available from the NetLogo web site.

At present, NetLogo is available in English, Spanish, Chinese, and Russian. All four languages are included in the standard download.

We are seeking volunteers to complete and improve these localizations and to translate the NetLogo software and manual into as many other languages as possible. If you're able to help in this endeavor, please contact us.

### Is NetLogo compiled or interpreted?

Short answer: partially compiled. We are working towards a full compiler.

Long answer: NetLogo does include a compiler that generates Java byte code. However, this compiler does not yet support the entire language, so some parts of user code are interpreted. We are working on expanding the compiler to support the entire language. Note that our compiler generates Java byte code, and Java virtual machines have "just-in-time" compilers that in turn compile Java byte code all the way to native code, so much user code is ultimately translated to native code.

### Has anyone built a model of <x>?

Try looking at the NetLogo Models Library, our Community Models page, and our list of references to NetLogo in outside works.

You might also ask the question on the NetLogo Users Group and/or search past messages on the group.

### Are NetLogo models runs scientifically reproducible?

Yes. NetLogo's pseudorandom number generator and agent scheduling algorithms are deterministic, and NetLogo always uses Java's "strict math" library, which gives bit-for-bit identical results regardless of platform. But keep the following cautions in mind:

- If your model uses random numbers, then in order to get reproducible behavior, you must use the `random-seed` command to set the random seed in advance, so that your model will receive the exact same sequence of random numbers every time. Remember that agentsets are always in random order, so anything you do with agentsets uses random numbers.
- If your model uses the `every` or `wait` commands in such a way that affects the outcome of the model, then you may get different results on different computers, or even on the same computer, since the model may run at a different speed.
- In order to reproduce model runs exactly, you must be using the exact same version of NetLogo. The details of the agent scheduling mechanism and the random number generator may change between NetLogo versions, and other changes (bugfixes in the engine, language changes, and so forth) may also affect the behavior of your model. (Then again, they may not.)
- We have expended every effort to make NetLogo model runs fully reproducible, but of course this can never truly be an iron-clad guarantee, due not only to the possibility of random hardware failure, but also the possibility of human error in the design of: your model, NetLogo, your Java VM, your hardware, and so on.

### Will NetLogo and NetLogo 3D remain separate?

For now, yes. NetLogo 3D is included with NetLogo, but it is still a separate application.

Eventually a single unified application will support both 2D and 3D modeling. We will design the 3D world support so it doesn't get in the way when you are building 2D models.

Models built in NetLogo 3D may require changes in order to run in the eventual unified application.

### Can I run NetLogo on my iPad or iPhone?

No. It's because NetLogo is based on Java, which Apple doesn't support (or even allow!) on iOS. Hopefully Apple will change their minds on this someday.

We are seeking funding for an alternate implementation on a JavaScript and HTML5 base. It would work on a variety of tablets and phones. But the many person-years of development effort that have gone into the Java version can't cheaply or easily be replicated on another platform.

## Downloading

### Can I have multiple versions of NetLogo installed at the same time?

Yes. When you install NetLogo, the folder that is created contains has the version number in its name, so multiple versions can coexist.

On Windows systems, whichever version you installed last will be the version that opens when you double click a model file in Windows Explorer. On Macs, you can control what version opens via "Get Info" in the Finder.

### I'm on a UNIX system and I can't untar the download. Why?

Some of the files in the tarball have long pathnames, too long for the standard tar format. You must use the GNU version of tar instead (or another program which understands the GNU tar extensions). On some systems, the GNU version of tar is available under the name "gnutar". You can find out if you are already using the GNU version by typing `tar --version` and seeing if the output says "tar (GNU tar)".

### How do I install NetLogo unattended?

It depends on which platform you are using.

- Linux: Untar NetLogo into the appropriate place.

  Mac: Copy the NetLogo directory from the disk image into the Applications folder.

- Windows:

  Run the installer from the command line using the -q option:

      NetLogo5.0.3Installer.exe -q

### On Windows, how do I configure the Java installation that the without-Java installer uses?

The without-Java installer automatically searches for appropriate Java installations on your machine. If you wish to direct NetLogo to a particular installation you may do so by setting the environment variable NETLOGO_JAVA to the full path of the installation.

- Go to the Start Menu -> Control Panel -> System.
- Switch to the "Advanced" panel
- Press the "Environment Variables" button.
- Add NETLOGO_JAVA as a variable and set the value to the path of the Java installation.

## Applets

### I tried to run one of the applets on your site, but it didn't work. What should I do?

Your web browser must support Java 5 or later. For details on Java requirements see the Applet guide.

### Can I make my model available as an applet while keeping the code secret?

Normally, the code is not secret. In order for the applet to operate, the model file containing the code must be accessible.

When you use "Save as applet" on the File menu, the HTML page generated contains the source code and a link where the user can download the model file.

If you want to keep the code secret, you can remove the source code and the link. Removing the link will make it harder for the user to access the model file, but not impossible.

However, Peter Brooks has developed a NetLogo obfuscator which makes the code "as indecipherable as possible". It is online here.

### Can a model saved as an applet use `import-world`, `file-open`, and other commands that read files?

Yes, but only to read files that are stored in the same directory on your web server as the HTML and model files. Unsigned Java applets cannot read files on the user's computer, only the web server.

### When I tried loading my model as an applet I get an error like: java.lang.ClassFormatError: Incompatible magic value.

If your web server returns custom error messages in response to requests for non-existent pages it must also return a status code of 404 Not Found, otherwise, NetLogo thinks the following data is what it requested and tries to read it as such. This happens even if all the files required to run the applet are present.

If you don't have control over the error messages on your web server you can use the following as a workaround:

- Create a directory named `META-INF` in the same directory as the applet files.
- Create a subdirectory of `META-INF` called `services`
- Create a file called `org.apache.commons.logging.LogFactory` in the `services` subdirectory
- Add the following line to `org.apache.commons.logging.LogFactory`:

      org.apache.commons.logging.impl.LogFactoryImpl

Note that all the directory and file names are case sensitive.

## Running

### Can I run NetLogo from a CD, a network drive, or a USB drive?

Yes. NetLogo runs fine from any file system, including read-only file systems.

### Why is NetLogo so much slower when I unplug my Windows laptop?

Your computer is switching to power saving mode when unplugged. It's normal for this to reduce speed a little, but unfortunately there is a bug in Java that drastically slows down Swing applications, including NetLogo.

One workaround is to change the power settings on your computer so it doesn't go into power saving mode when you unplug it. (If you do this, your battery won't last as long.)

Another workaround is to run NetLogo with an option recommended by Oracle, by editing the NetLogo 5.0.3.vmoptions file, found in the NetLogo directory (under Program Files on your hard drive, unless you installed NetLogo in a different location). Add on a new line:

    -Dsun.java2d.ddoffscreen=false

You can see the details of the Java bug and vote for Oracle to fix it here.

### How come NetLogo won't start up on my Linux machine?

We recommend Oracle's Java runtime when using NetLogo on Linux.

In theory, any Java 5 or later runtime will run NetLogo. In practice, some Java implementations aren't high enough quality. GNU libgcj does not work. Very recent versions of OpenJDK (1.6.0.0-22.b22 or newer) may work; older ones don't.

Ubuntu users should consult http://help.ubuntu.com/community/Java.

### When I try to start NetLogo on Windows I get an error "The JVM could not be started". Help!

A nearly certain fix is to use a text editor to edit the NetLogo 5.0.3.vmoptions file (found in the NetLogo directory, by default in C:\Program Files):

    -Xmx1024m

Try changing the 1024m a smaller number like 512m. This should permit NetLogo to start, although the lower heap size limit may affect your ability to run models with many agents. (See How big can my model be?.)

If running with the lower heap size limit is unacceptable, read on.

Some Windows systems have trouble allocating large amounts of contiguous virtual memory. Upgrading to a newer version of Windows may help.

Running Windows in 64-bit mode instead of 32-bit mode may also help. Double check that Windows is actually running in 64-bit mode; see Microsoft's FAQ page on 64-bit Windows.

### Can I run NetLogo from the command line, without the GUI?

Yes. The easiest way is to set up your model run or runs as a BehaviorSpace experiment. No additional programming is required. See the BehaviorSpace Guide for details.

Another option is to use our Controlling API. Some light Java programming is required. See the Controlling Guide for details and sample code.

### Does NetLogo take advantage of multiple processors?

Only when using BehaviorSpace. BehaviorSpace does parallel runs, one per processor.

For a single model run, only one processor is used.

We are seeking funding to make it possible to split a single model run across multiple processors or multiple computers.

### Can I distribute NetLogo model runs across a cluster or grid of computers?

Many of the same comments in the previous answer apply. It is not possible to split a single model run across multiple computers, but you can have each machine in a cluster doing one or more separate, independent model runs, using either BehaviorSpace or our Controlling API. We don't have automated support for splitting the runs across clusters, so you'll need to arrange that yourself.

Various users are already using NetLogo on clusters, with a variety of hardware and software. You can seek them out on the NetLogo Users Group.

### Is there any way to recover lost work if NetLogo crashes or freezes?

Yes. NetLogo auto-saves files as you are working on them. The auto-save files can be found in your OS-specific temporary directory. On most Unix-like systems (including MacOS) that is `/tmp`. On Windows XP, logs can be found in `C:\Documents and Settings\<user>\Local Settings\Temp`, where `<user>` is the logged in user and on Windows Vista the logs can be found in `C:\Users\<user>\AppData\Local\Temp`. The files are named according to the following format: `autosave_yyyy-MM-dd.HH_mm_ss.nlogo` where the time and date are the time and date the model was opened.

## Usage

### When I move the speed slider all the way to the right, why does my model seem to stop?

The only way NetLogo can make your model run faster is by updating the view less frequently. As you move the speed slider to the right, view updates become less and less frequent. Since view updates take time, that means more speed.

However, fewer updates also means that the updates come farther apart. When several seconds pass between updates, it may seem like your model has stopped. It hasn't. It's running at full speed. Watch the tick counter! (If your model uses it. If it doesn't, watch something else, like a plot.)

To get a feel for what's going on, try moving the slider to the right gradually rather than suddenly. If you find the updates too infrequent at the rightmost position, just don't push the slider that far.

### Can I use the mouse to "paint" in the view?

NetLogo does not have a built-in set of painting tools for painting in the view. But with only a few lines of code, you can add painting capability to your model. To see how it's done, look at Mouse Example, in the Code Examples section of the Models Library. The same techniques can be used to let the user interact with your model using the mouse in other ways, too.

Another possibility is to create an image in another program and import it using the import items on the File menu or the `import-*` primitives.

### How big can my model be? How many turtles, patches, procedures, buttons, and so on can my model contain?

We have tested NetLogo with models that use hundreds of megabytes of RAM and they work fine. We haven't tested models that use gigabytes of RAM, though. Theoretically it should work, but you might hit some limits that are inherent in the underlying Java VM and/or operating system (either designed-in limits, or bugs).

The NetLogo engine has no fixed limits on size. By default, though, NetLogo ships with a one-gigabyte ceiling (or 512 MB on some Windows systems) on how much total RAM it can use. If your model exceeds that limit, you'll get an OutOfMemoryError dialog.

If you are using BehaviorSpace, note that doing runs in parallel will multiply your RAM usage accordingly.

Here's how to raise the limit if you need to:

- Windows: Edit this section of the "NetLogo 5.0.3.vmoptions" file in the NetLogo folder:

      -Xmx1024m

- Mac OS X: Edit the Contents/Info.plist file in the NetLogo application package. (You can reach this file by control-clicking the application in the Finder and choosing "Show Package Contents" from the popup menu.) The relevant section is this; the last number (1024) is the one-gigabyte ceiling:

      <key>VMOptions</key>
      <string>-XX:MaxPermSize=128m -Xmx1024m</string>

- Other: Edit the `netlogo.sh` script (or a copy), changing the `-Xmx` number to the desired value.

### Can I use GIS data in NetLogo?

Yes, many users are using GIS data with NetLogo. The most complete way to do that is with the GIS extension. See the GIS Extension Guide.

A simpler way is to use `import-pcolors`, but that only works for importing maps that are images, not maps in other formats.

It is also possible to write NetLogo code that reads GIS data using our file I/O primitives such as `file-open`. For example, see the Grand Canyon model in the Earth Science section of Sample Models.

### My model runs slowly. How can I speed it up?

Here's some ways to make it run faster without changing the structure of the code:

- Use tick-based view updates, not continuous updates.
- Decrease the frequency of view updates by pushing the speed slider to the right, or turn updates off using the checkbox.
- If your model is using all available RAM on your computer, then installing more RAM should help. If your hard drive makes a lot of noise while your model is running, you probably need more RAM.
- Use turtle size 1, 1.5, or 2, as the 2D renderings for these sizes are cached by NetLogo. (This only affects graphics speed in the 2D view, not computation speed.)

In many cases, though, if you want your model to run faster, you may need to make some changes to the code. Usually the most obvious opportunity for speedup is that you're doing too many computations that involve all the turtles or all the patches. Often this can be reduced by reworking the model so that it does less computation per time step. The members of the NetLogo Users Group may be able to help with this.

The profiler extension is useful for identifying which parts of your code are taking the most time.

Unless you are running the exact same strings over and over, using `run` and `runresult` are much slower than running code directly; you should avoid using these primitives on fresh strings in performance-critical code.

### Can I have more than one model open at a time?

One instance of NetLogo can only have one model open at a time. (We plan to change this in a future version.)

You can have multiple models open by opening multiple instances of NetLogo, though. On Windows and Linux, simply start the application again. On a Mac, you'll need to duplicate the application (not the whole folder, just the application itself) in the Finder, then open the copy. (The copy takes up only a very small amount of additional disk space.)

### Can I change the choices in a chooser on the fly?

At present, no. In a future version of NetLogo, we plan to support this.

### Can I divide the code for my model up into several files?

Yes, this is available on an experimental basis using the `__includes` keyword.

## Programming

### How does the NetLogo language differ from other Logos?

This is answered in detail at the end of the Programming Guide.

### How come my model from an earlier NetLogo doesn't work right?

See the Transition Guide for help.

### How do I take the negative of a number?

Any of these ways:

    (- x)
    -1 * x
    0 - x

With the first way, the parentheses are required.

### My turtle moved forward 1, but it's still on the same patch. Why?

If you have disabled wrapping at the world edges in your model, then the turtle might be at a world edge and unable to move any further. You can test for this using `can-move?`.

Assuming the turtle isn't hitting a world edge, moving forward 1 is only guaranteed to take a turtle to a new patch if the turtle's heading is a multiple of 90 (that is, exactly north, south, east, or west).

It's because the turtle might not be standing in the center of a patch. It might be near the corner of a patch. For example, suppose your turtle is close to the southwest corner of a patch and is facing northeast. The length of the patch diagonal is 1.414... (the square root of two), so `fd 1` will leave the turtle near the northeast corner of the same patch.

If you don't want to have to think about these issues, one possibility is to write your model in such a way that your turtles always come to rest on patch centers. See next question.

### How do I keep my turtles on patch centers?

A turtle is on a patch center when its `xcor` and `ycor` are integers.

You can move a turtle to the center of its current patch with either of these two equivalent commands:

    move-to patch-here
    setxy pxcor pycor

But you'll never need to do that if you never allow turtles off of patch centers in the first place.

The `sprout` command creates turtles on patch centers. For example:

    ask n-of 50 patches [ sprout 1 [ face one-of neighbors4 ] ]

Another way for a turtle to start on a patch center is with a command such as this line of turtle code, which moves it to the center of a random patch:

    move-to one-of patches

Once a turtle is on a patch center, as long as its heading always stays an exact multiple of 90 (that is to say, due north, east, south, or west), and as it long as it moves forward or back by integer amounts, it will always land on patch centers.

See Random Grid Walk Example, in the Code Examples section of the Models Library, to see these code snippets in use.

### `patch-ahead 1` is reporting the same patch my turtle is already standing on. Why?

See the answer two answers up. It's the same issue.

This might not be the meaning of "ahead" you were expecting. With `patch-ahead`, you must specify the distance ahead that you want to look. If you want to know the next patch a turtle would cross into if it moved forward continuously, it is possible to find that out. See Next Patch Example, in the Code Examples section of the Models Library.

### How do I give my turtles "vision"?

You can use `in-radius` to let a turtle see a circular area around it.

Several primitives let the turtle "look" at specific points. The `patch-ahead` primitive is useful for letting a turtle see what is directly in front of it. If you want the turtle to look in another direction besides straight ahead, try `patch-left-and-ahead` and `patch-right-and-ahead`.

If you want the turtle to have a full "cone" of vision, use the `in-cone` primitive.

You can also find out the next patch a turtle would cross into if it moved forward continuously. See Next Patch Example, in the Code Examples section of the Models Library.

### Can agents sense what's in the drawing layer?

No. If you want to make marks that agents can sense, use patch colors.

### I'm getting numbers like 0.10000000004 and 0.799999999999 instead of 0.1 and 0.8. Why?

See the "Math" section of the Programming Guide for a discussion of this issue.

### The documentation says that `random-float 1` might return 0 but will never return 1. What if I want 1 to be included?

It really doesn't matter. Even if 1 were a possible result, it would only come up approximately 1 in 2^64 tries, which means you'd be waiting hundreds of years before it ever came up exactly 1.

Nonetheless, if you are convinced that it really must be possible to get 1, you can use `precision` to round your answer to a certain number of decimal places. For example:

    print precision (random-float 1) 10
    0.2745173723

(If you use this method, note that 0 and 1 are only half as likely to come up as other answers. To see why this is so, consider the case where you only keep one digit after the decimal point. Results between 0 and 0.5 get rounded to 0, but results between 0.5 and 1.5 get rounded to 1; the latter range is twice as large. If you want 0, 0.1, 0.2, ..., 0.9, and 1 to all be equally likely, an alternative is to write `random 11 / 10`; this gives all 11 answers with equal probability.)

### How can I keep two turtles from occupying the same patch?

See One Turtle Per Patch Example, in the Code Examples section of the Models Library.

### How can I find out if a turtle is dead?

When a turtle dies, it turns into `nobody`. `nobody` is a special value used in NetLogo used to indicate the absence of a turtle or patch. So for example:

    if turtle 0 != nobody [ ... ]

You could also use `is-turtle?`:

    if is-turtle? turtle 0 [ ... ]

### Does NetLogo have arrays?

Most models should just use lists. The usual motivation for using arrays in other programming languages is that they provide fast random access (`item`) and mutation (`replace-item`). But NetLogo's lists, even though they are immutable, now provide near constant time performance on these operations.

Lists in earlier versions of NetLogo (4.1 and 4.0) were simple singly-linked lists and therefore these operations took linear time. The data structure underlying NetLogo's lists now is the immutable Vector class from the Scala collections library. It uses 32-wide hash array mapped tries, as implemented by Tiark Rompf, based in part on work by Phil Bagwell and Rich Hickey.

If you are certain you want to use raw, mutable JVM arrays in your model, they are provided by the array extension. See the Arrays & Tables section of the User Manual.

### Does NetLogo have hash tables or associative arrays?

Yes, using the table extension. See the Arrays & Tables section of the User Manual.

### How can I use different patch "neighborhoods" (circular, Von Neumann, Moore, etc.)?

The `in-radius` primitives lets you access circular neighborhoods of any radius.

The `neighbors` primitive gives you a Moore neighborhood of radius 1, and the `neighbors4` primitive gives you a Von Neumann neighborhood of radius 1.

For Moore or Von Neumann neighborhoods of a larger radius, see Moore & Von Neumann Example in the Code Examples section of the Models Library.

### How can I convert an agentset to a list of agents, or vice versa?

If you want the list in a particular order, use the `sort` or `sort-by` primitives. The Lists section of the Programming Guide explains how to do this. See also Ask Ordering Example, in the Code Examples section of the Models Library.

If you want the list in a random order, here's how:

    [self] of <agentset>

Because all operations on agentsets are in random order, the resulting list is in random order.

To convert a list of agents to an agentset, use the `turtle-set`, `patch-set`, or `link-set` primitives.

### How do I stop foreach?

To stop a foreach from executing you need to define a separate procedure that contains only the foreach, for example:

    to test
      foreach [1 2 3] [
        if ? = 2 [ stop ]
        print ?
      ]
    end

This code will only print the number 1. The `stop` returns from the current procedure so nothing after the foreach will be executed either. (If the procedure is a reporter procedure, use `report` instead of `stop`.)

## BehaviorSpace

### Why are the rows in my BehaviorSpace table results out of order?

This is normal when doing multiple runs in parallel. For a discussion of the issue, see the section on parallel runs in the BehaviorSpace Guide section of the User Manual.

### How do I measure runs every n ticks?

Use `repeat` in your experiment's go commands, e.g.:

    repeat 10 [ go ]

to measure the run after every 10 ticks. Essentially you are making one experiment step equal 10 ticks.

### I'm varying a global variable I declared in the Code tab, but it doesn't work. Why?

It's probably because your setup commands or setup procedure are using `clear-all`, causing the values set by BehaviorSpace to be cleared.

One possible workaround is to change your experiment's setup commands to preserve the value of the variable, e.g.:

    let old-var1 var1
    setup
    set var1 old-var1

This works because even `clear-all` doesn't clear the values of local variables made with `let`

Another possible workaround is to change your model's setup procedure to use more specific clearing commands to clear only what you want cleared.

### Why are some of my results cut off in Excel?

In some versions of Excel, spreadsheets can't have more than 256 columns. (See a Microsoft support article on the subject.)

Possible workarounds include:

- Use a newer version of Excel, such as Excel 2007 (Windows) or Excel 2008 (Mac).
- Use a different program besides Excel.
- Ask BehaviorSpace to generate results in table format instead of, or in addition to, spreadsheet format. (Excel can read our table format, too.)
- Change your experiment so the result has fewer columns.

## NetLogo 3D

### Can I make a 3D applet?

Not at this time. Perhaps in some future version of NetLogo.

### Does NetLogo work with my stereoscopic device?

NetLogo supports fullscreen exclusive mode. If that is all your device needs then, possibly yes. However, it can be tricky to get it working. We don't have any such devices so it is difficult for us to make the process easier. If your device needs something else, for example, quadbuffers enabled, the answer is probably no.

## Extensions

### I'm writing an extension. Why does the compiler say it can't find org.nlogo.api?

You need to add NetLogo.jar to your classpath when compiling. NetLogo.jar is included with NetLogo.