show sort-on [who] [turtles]
gives error
Expected an agentset here, rather than a list or block.
I can't understand the error turtles is an agenset isn't it? I have copied it from Netlogo dictionary!
Remove the square brackets from around turtles. turtles on its own is the agent set containing all turtles. Putting square brackets around stuff either makes it a list or command/reporter block.
The error is saying that sort-on wants an agent set for one of its arguments, but you've given it a something that could be a list or block.
Related
I'm trying to design a model for the spread of infection from person to environment.
Turtles have a hand contamination variable that shows the percentage of their hands that are contaminated. I'd like to give this number to patches that they're passing, but I'm getting an error saying it's a turtle-only variable.
Is it possible to give a hand contamination number to the patch?
This is part of my code:
turtles-own [hand contamination]
patches-own [p-contamination]
ask patches [set p-contamination hand-contamination]
A patch can't ever refer to turtle variables directly: What if there is more than one turtle there...which one? What if there are none?
However, a turtle can access the variables of the patch it is standing on. So you would probably do this from the turtle's point of view: I think this also makes sense, logically, since it is the turtle visiting the patch, and contaminating it.
;; turtles contaminate the patch they are standing on
ask turtles [ set p-contamination hand-contamination]
Note that if there is more than one turtle on a patch, they will overwrite each other's values. So, you may need to add the amount, or otherwise blend the two values, rather than replace it.
If there are more turtles than patches, or you really want the patch to be the thing that in control, the patch can look for turtles and acess their variables with OF:
ask patches
[ let visitors turtles-here
if any? visitors
[ set p-contamination ..some expression..
So, there it depends on your needs, and you have to decide what that value is.
There is only ever at most one turtle:
[ Contamination ] of one-of visitors
Even if many turtles, pick one at random:
[ contamination ] of one-of visitors
Use the value of the most-contaminated visitor:
(max (sentence [ contamination ] of visitors))
Average the values of contamination
(mean (sentence [ contamination ] of visitors))
...or some other expression that you choose
Again, this is all overwriting the patch variable. If you need to take the patchs' current values for that variable, you need to decide how:
If already contaminated, should it:
leave value alone
add turtle value to current value of P-Contamination
save the max of the two values
save the mean of the two values
blend them in some other way
I downloaded a working model and I'm adjusting it to fit criteria I have. I want to disable the world wrap so the turtles are constrained in their movement to the initial screen but when I do I get an error telling me: OF expected input to be a turtle agentset or patch agentset or turtle or patch but got NOBODY instead.
Welcome to StackOverflow! For future reference, your question is a bit incomplete as it's hard for others to help you without seeing the code you are using. Try to include enough code for others to answer your question. I cannot directly help resolve your issue, but I can provide some general information.
In NetLogo the behavior of many of the language primitives changes when world wrapping is enabled and when it is not. As an example using patch-ahead, in a world with wrapping in both directions, this code will always succeed:
; turtles will color themselves the color of the patch 1 unit away
ask turtles [
set color ([pcolor] of patch-ahead 1)
]
But if wrapping is disabled in one or both directions, the patch-ahead of a turtle can return nobody when there is no patch in front of the turtle because the turtle is at the edge of the world. In that case you are asking NetLogo to evaluate [pcolor] of nobody, but that is not possible, and you get an error like the one you described.
To resolve this issue you'll have to look through the code and see where these errors are made and handle them appropriately. For my example:
ask turtles [
if patch-ahead 1 != nobody [
set color ([pcolor] of patch-ahead 1)
]
]
You can read more about the world topology of NetLogo models in the docs.
Have I got this correct please?
If I write:
ask turtles
[go_forward
go_backward]
is it correct that a random turtle will move forward then move backward, and then a second random turtle will do the same, and so on? As opposed to:
ask turtles [go_forward]
ask turtles [go_backward]
which will get all turtles in a random order to move forward, and then all turtles in a (different) random order to move backward.
That is correct. There's a very similar example right at the end of the section on ask in the NetLogo Programming Guide: http://ccl.northwestern.edu/netlogo/docs/programming.html#ask
See also Ask Ordering Example, in the Code Examples section of NetLogo's Models Library.
I am pretty sure there are some basic glaring flaws here but assistance would be great. What I am trying to do is to use an input box so that a user can specify connections between specific nodes. The data that is being inputted is in the form of a string (reporter) and I am having problems getting the programme to recognise the input. The code is as follows;
ask circle 1 [ create-links-with n-of 3 read-from-string connect-with ]
There's not enough information, but I'm going to guess. I'll assume that circle is a turtle-breed.
create-links-with wants an agentset, and n-of therefore needs an agentset as its second argument here. I don't think you can create an agentset with read-from-string, since the documentation says that read-from-string will only produce 'a number, list, string, or boolean value, or the special value "nobody".'
However, you could do something like this:
create-links-with n-of 3 circles with [color = read-from-string connect-property]
I'm using connect-property instead of connect-with; it's the variable that would be attached to the input box, and you can replace color with some other circles-own variable that you've defined.
If you have a fixed set of properties with which to identify the circles, it might be better to use a Chooser object, or even a slider, rather than an Input box.
(Outside of testing and experimentation, I think it's probably not the best strategy to identify turtles by their numbers. It's better to give them variables, and use the values of the variables to identify them, e.g. by using with.)
I want to add an agenset of turtles to the variable TurtlesICanSee of a certain turtle that depends on that turtles properties. For instance, in one application I want to add only the turtle itself to TurtlesICanSee, in another application I want to add the two turtles (if there are any) with adjacent who-numbers (the turtle's own who-number + or - 1).
If I can figure out the first application by using who-numbers I think I can extend that to second application. However, I cannot figure out the first.
I tried
ask turtles [
set TheTurtlesICanSee turtles with [who = ([who] of self)]
]
but this fills the TheTurtlesICanSee of each turtle with every turtle.
I think I understand why; NetLogo thinks that I want every turtle x that has the same who-number as itself (x), i.e. every turtle. But I don't. For every turtle x I want every turtle y that has the same who-number as x.
Can anyone help me with this? Note that the solution that I need to the first application is one that can be generalized to the second. So not any way of adding a turtle to one of its own variables will do. I need a form of self-reference involving who (or a good argument against doing it this way I guess, but preferably the former).
Your code needs only a slight alteration to work, as follows:
ask turtles [ set TheTurtlesICanSee turtles with [who = [who] of myself] ]
Note the substitution of myself for self; http://ccl.northwestern.edu/netlogo/docs/dictionary.html#myself has an explanation of the difference.
But actually there's no need to involve who numbers. It's almost never necessary to use who numbers in NetLogo; there's almost always a simpler, more direct solution. A simpler solution is:
ask turtles [ set TheTurtlesICanSee turtles with [self = myself] ]
But actually it isn't necessary to use with at all. We can use turtle-set to build the desired agentset directly:
ask turtles [ set TheTurtlesICanSee (turtle-set self) ]
This is the solution I would recommend, for clarity and brevity, but also because it will run faster, since it doesn't involve iterating over the set of all turtles, as the with-based solutions do.