How to hide part of agents in NetLogo 6.2? - netlogo

I have a 5x5 world with 10 agents in each patch in the world. I would like to hide almost everyone and only make one or 5 agents visible in the world to see their way. I only know how to do this by inspecting each agent in the interface and asking to hide it. But, I think there must be some easier way to ask to hide the 245 agents and make 1 or 5 agents visible in the world. Does anyone have any suggestions how I can do this?

Sure- there are turtle commands hide-turtle and show-turtle.
You could, for example, use this code either in setu or in a button on the interface:
ask turtles [hide-turtle] ; hide all the turtles
ask n-of 5 turtles [show-turtles] ; un-hide 5 of the turtles, selected randomly

Related

In a Netlogo network, how can turtles "see" properties of other turtles?

I am trying to build a model in which turtles decide to change colour depending on their environment in a network.
The approach would be to "check" the colour of the surrounding turtles and then set an if statement for the turtle in question to switch colour (there will only be 2 colours).
Specifically I would like to know how can a turtle "see" or check other turtles' colour (or other properties).
If possible I would also like to create a slider for "how many links away" can turtles see their neighbouring turtles' (or neighbours of neighbours, etc) colour.
I am new to both Netlogo and Stackoverflow, so please let me know if I should make any modifications to my model and/or question.
Thanks!
Welcome to Stack Overflow! Typically you'll want to stick to a single question per post, both for simplicity and for the benefit of future users with similar questions. As well, in cases where its applicable you should try to include some code to show what you've tried so far, as well as any setup necessary- you want to make a minimal, complete, and verifiable example. In this case, I think you're okay since your questions are clear and well explained, but if you have more complex questions in the future you will be more likely to get useful answers by following those guidelines.
For your first question, it looks like you want the of primitive- check out the dictionary entry for details. of can be used in a few ways, including allowing agents to check the value of a variable (such as color) of another agent. Check out this example code:
to setup
ca
reset-ticks
crt 10 [
setxy random 30 - 15 random 30 - 15
create-link-with one-of other turtles
]
end
to go
ask turtles [
set color [color] of one-of link-neighbors
]
end
Every time the go procedure is called, one of the turtles changes its color to the color of one of its link-neighbors. If you run it long enough, all connected turtles should end up with the same color.
For your second question, I suggest you check out the Nw extension, which is an extension built to deal more easily with Netlogo networks. Specifically, have a look at nw:turtles-in-radius, which should work with your slider approach. To get it working, include the extension using
extensions [ nw ]
at the start of your code. Then, assuming the same setup as above, you can play around with something like
to network-radius
ask one-of turtles [
set color red
ask other nw:turtles-in-radius 2 [
set color white
]
]
end
When you call the network-radius procedure above, you should see one turtle turn red, and any turtles within 2 links of that turtle turn white. To switch to a slider, just swap the "2" out for your slider variable. Hope that helps!

Query about hidden turtles

What actually happens to hidden turtle? I mean after we hide the turtle it continue to live in invisible mode occupying memory as I guess.
I hide few turtles but did not ask them to be shown back and when I inspected the hidden turtles continuing simulation their attribute were changing as per my commands. So, what exactly hiding a turtle sense for.
In one of my simulations, turtles represent people making decisions about whether to protect themselves during an epidemic. There are tens of thousands of these turtles, with potentially hundreds on some patches. The turtles don't move, but they each make their own decision based on personal characteristics like attitude and environmental perception such as how close the epidemic is.
Having these turtles visible would just clutter up the screen. Instead, I hide them and colour the patch based on what proportion have adopted protective behaviour. This is much more informative.
In my most recent simulation, though, I make the turtles size 0 instead of hiding them. This still makes them disappear, but I can still right-click on the world view to access the list of turtles where I have clicked.
Another reason to hide turtles is when you are simulating an infinite plane and turtles outside the view should simply be hidden.
Note that if you are moving turtles using setxy rather than forward you should test to make sure the patch you are about to move to exists since setxy throws a runtime error if it is given coordinates outside the world. From NetLogo documentation:
ifelse patch-at (new-x - xcor) (new-y - ycor) = nobody
[ hide-turtle ]
[
setxy new-x new-y
show-turtle
]

Is it possible to control link heading between two turtles and how?

I have two atoms (turtles) on a screen. On a candidate turtle(when mouse down) , there is a link 2 3 (between turtle 2 and turtle 3).
I want that this link will be headed towards the other turtle called "atomOther". I tried facexy/set heading/towards, but none of them works.
Is it possible to control link heading and how?
Have you tried create-link-to or create-link-from ?
the first makes a directed link to (pointed at) the target the other from it.
They are both called by turtles.
Remember, you can not mix directed and un-directed links in the same model (unless they are of different breeds). One work around for this is make one like from and the other thus
ask turtle 1 [create-link-to turtle 2]
ask turtle 1 [create-link-from turtle 2]
This creates 2 links between turtles 1 and 2. One to and one from turtle 1.
Based on your clarification, the answer is no. You cannot make a link point in an arbitrary direction, because a link represents a relationship between two agents and therefore points from one of the two agents to the other in the relationship.
If you truly want a link to point from turtle 3 to turtle 1, even though the relationship is between turtle 3 and turtle 2, then use two different breeds of links. One breed is for the actual relationship and the other is for pointing. So, when whatever happens to make the arrow point in a different direction, you can use hide-link to make the link that points in the wrong direction invisible, and create-link-to for the arrow that points.

Why doesn't this always create a triangle?

I would expect this code to create a triangle each time, but instead many
times it goes through the wrap-around, creating a zigzag line or
disconnected angle pieces. Why is that? Is it a bug?
Create a go button (not a forever button) to run this code
to go
clear-all
create-turtles 3
ask turtles
[ setxy random-xcor random-ycor
create-links-to (other turtles)]
end
The links take the shortest path, which may go around the world edges, which (in the default world topology) are connected to each other.
Go into the "Settings..." dialog and turn off wrapping if it isn't the behavior you wanted.
See http://ccl.northwestern.edu/netlogo/docs/programming.html#topology for details.

Efficient access to a Turtle's variable which is a patch address, or How to filter patches that are not assigned to turtles?

In my simulation each turtle has a my-home variable which is the patch agent family lives in, so agents with same Family-ID have same my-home until one of agents moves out or family grows to more than 7 agents.
when an agent wants to move out , I have to check if there is any patch nearby which is not another's agent my-home, what I have done is to store all my-homes in a list and check if any selected possible next home is not a member of this list, but I believe there should be better way to do this:
let all-homes [my-home] of agents with [belongs_to = BS]
set my-home min-one-of patches with [not member? self all-homes and label_ = BS][distance m]
m is current home address
min-one-of patches with ... assesses every patch in the entire world before picking a winner. That's going to be slow. I'd suggest searching nearby patches first, then farther patches, and so forth. Most of the time the turtle will find a new home after only a very brief search, so you'll have replaced code that's O(n) in the number of patches with code that's O(1)-ish. That should fix the main performance problem with this code.
The simplest such search routine I can think of is for the turtle to simply head in a random direction and keep moving fd 1 until it lands on a free patch. But if you want to do something more rigorous that always results in finding the closest possible new home, you could do that too; you'll just have more code to write.
Building the all-homes list is probably only a secondary performance problem here, but it's fixable too. The simplest fix I can think of is to add:
patches-own [home?]
initialize it with ask patches [ set home? false ], and then make sure that whenever a turtle adopts a patch as its home, it does ask my-home [ set home? true ]. Now you can replace member? self all-homes with simply home?. After all, you don't really need to know what all of the home patches are; you only need to know whether some particular patch is a home patch.