It was a java applet (sigh) and unfortunately I have not been able to find a working version. That version based on his three "steering" mechanisms had very realistic movement. Other versions, including this one, which are good do not have that same kind of quality. They look like simulations whereas the Reynolds version, for whatever reason, seemed much closer to watching an actual flock.
No criticism intended, it would just be nice to understand the why the difference.
Looking briefly at the code, it seems the fitness function is simply how close the boids are?
Very cool!
vimgrinder · 1h ago
oh, so i wasn't really aware that there was a original boid sim (I will check it today). mostly I saw it on some other demos and I wanted to add this behaviour of signaling boids which are far away + color code based on genome + do a simple cross-mutate. and yes you are right about fitness func.
Just a clarifying note, Craig Reynolds is the original researcher for Boids, and he did have a Java applet implementation in the above page. But the original Boids simulation was from 1986, almost a decade prior to Java applets.
The original paper, published in 1987, is "Flocks, herds and schools: A distributed behavioral model"[1]. The implementation was done in Lisp on a Symbolics 3600 Lisp Machine.
Edit: One quite interesting paragraph from the paper regarding performance:
The boid software has not been optimized for speed. But
this report would be incomplete without a rough estimate of the actual performance of the system. With a flock of 80 boids, using the naive O(N²) algorithm (and so 6400 individual boid-to-boid comparisons), on a single Lisp Machine without any special hardware accelerators, the simulation ran for about 95 seconds per frame. A ten-second (300 frame) motion test took about eight hours of real time to produce.
Once again, amazing how far hardware has advanced.
I really like it, though I'm finding it dies consistently after about 30s (Vivaldi on an intel iMac with a decent GPU).
vimgrinder · 3m ago
dies in the sense machine gets hung or all boids vanish?
Xevion · 2h ago
Awesome work, the green terminal style is really cool. And the fact that it's just Vanilla JavaScript, HTML & CSS is a pretty cool touch. I would've produced something a tenth the style with 10x the complexity
Just some ideas/suggestions:
- Better colors: maybe genes can influence colors a bit? The random colors aren't that great, they're good though for making all the boids distinct.
- Zooming: Scroll the mousewheel to Zoom In/Out, drag to move around
- Interactive: Click on a Boid, have it be followed around using zoom!
- Time controls: Not just framerate, but a % multiplier on simulation speed.
- GPU Refactor: I don't think you're doing any of this yet, so maybe optimizing for a GPU-based speedup would be cool? See if you can reach 10,000 boids! Sebastian Lague's video goes into parallelization, just not in JavaScript: https://youtu.be/bqtqltqcQhw
vimgrinder · 1h ago
hey thanks! color is coming from genome (check brightColorFromGenome)!
nice suggestions, will definitely try to incorporate some of them.
isoprophlex · 3h ago
I'll just say that this looks insanely good, wow.
vimgrinder · 1h ago
thanks!
brodo · 1h ago
I've just built a boid simulation in Go and WebGPU. 16k boids are no problem on my M1 Mac Pro. I did not implement any optimization yet.
I'm reading the code but I don't know what it actually DOES in practice; my guess is that Boids with opposite genomes (binary strings with default length 6) are slightly attracted to eachother.
vimgrinder · 2h ago
yes this only.
rvnx · 2h ago
Never heard of such thing, love it!
Xevion · 2h ago
I learned about Boids when I was 16 thanks to Sebastian Lague's amazing video on it: https://youtu.be/bqtqltqcQhw
Highly recommend, especially his older videos on simulations.
https://www.red3d.com/cwr/boids/
It was a java applet (sigh) and unfortunately I have not been able to find a working version. That version based on his three "steering" mechanisms had very realistic movement. Other versions, including this one, which are good do not have that same kind of quality. They look like simulations whereas the Reynolds version, for whatever reason, seemed much closer to watching an actual flock.
No criticism intended, it would just be nice to understand the why the difference.
Looking briefly at the code, it seems the fitness function is simply how close the boids are?
Very cool!
Beyond this i was trying to add a map which effects their movement. (if you wanna check how it looks - https://x.com/attentionmech/status/1925690991555531143)
The original paper, published in 1987, is "Flocks, herds and schools: A distributed behavioral model"[1]. The implementation was done in Lisp on a Symbolics 3600 Lisp Machine.
Edit: One quite interesting paragraph from the paper regarding performance:
The boid software has not been optimized for speed. But this report would be incomplete without a rough estimate of the actual performance of the system. With a flock of 80 boids, using the naive O(N²) algorithm (and so 6400 individual boid-to-boid comparisons), on a single Lisp Machine without any special hardware accelerators, the simulation ran for about 95 seconds per frame. A ten-second (300 frame) motion test took about eight hours of real time to produce.
Once again, amazing how far hardware has advanced.
1. https://dl.acm.org/doi/10.1145/37402.37406
Just some ideas/suggestions: - Better colors: maybe genes can influence colors a bit? The random colors aren't that great, they're good though for making all the boids distinct. - Zooming: Scroll the mousewheel to Zoom In/Out, drag to move around - Interactive: Click on a Boid, have it be followed around using zoom! - Time controls: Not just framerate, but a % multiplier on simulation speed. - GPU Refactor: I don't think you're doing any of this yet, so maybe optimizing for a GPU-based speedup would be cool? See if you can reach 10,000 boids! Sebastian Lague's video goes into parallelization, just not in JavaScript: https://youtu.be/bqtqltqcQhw
(the coolest examples come at about half a minute into the video)
each boid has a string, when boids come close , they produce a offspring with mixed string + mutation age lets boids die too
nothing fancy, just for sake of sim
https://github.com/attentionmech/genetic-boids/blob/485fe482...
I'm reading the code but I don't know what it actually DOES in practice; my guess is that Boids with opposite genomes (binary strings with default length 6) are slightly attracted to eachother.
Highly recommend, especially his older videos on simulations.