934 karma · joined January 14, 2012
twitter:@redblobgames
A* does well when it is given a graph of all the decision points that matter. An unweighted grid is full of locations where it doesn't matter — e.g. whether you go N,N,E or E,N,N or N,E,N. JPS searches for better decision points on unweighted grids. There are lots of other A* optimizations for unweighted grids (subgoal graphs, contraction hierarchies, differential heuristics, bucketed priority queues, etc.) — see Table 2 in this paper [1].
JPS is notable for using no precomputation, which is very useful when the map is changing often. If you can afford analyzing the grid ahead of time, you can build a much better graph than using the grid directly — the Tree entry listed in Table 2 takes 30 sec of precomputation to bring A* down to 0.029 ms on average, compared to JPS which takes 62.524 ms on average.
[1] https://www.aaai.org/ocs/index.php/SOCS/SOCS15/paper/view/11...
[1] Chapter 17 http://www.gameaipro.com/GameAIPro/GameAIPro_Chapter17_Pathf...
[2] Slides https://www.movingai.com/GDC18/GDC18Bidir.pdf or if you have access to the GDC Vault there's a recording of the talk https://www.gdcvault.com/browse/gdc-18/play/1025071/Bidirect...
[1]: http://aimacode.github.io/aima-javascript/3-Solving-Problems...
When I read Hawkins's book _On Intelligence_ back in the mid-2000s I had thought it'd be cool to generate music by having the system predict what was novel and what was familiar. By mixing some novel and familiar notes/rhythm/tempo/timbre/percussion into the stream I should be able to make new music from scratch. I was annoyed that so many systems trained blindly on existing music instead of using first principles to generate something (although existing music seems useful for seeding the novelty/familiarity parameters). For games especially it would be nice to turn up or down different types of novelty to match what the player is doing.
However, as often happens, I got distracted before I got there. I learned Pure Data, and then got into audio synthesis, and then got into signal processing, and that led to procedural map generation … :)
I've not implemented Fortune's myself. I use the Delaunator library, which maintains all the additional information I wanted in the form of a half-edge triangle mesh: https://github.com/mapbox/delaunator ; Mike Bostock wrote a Voronoi wrapper on top it: https://beta.observablehq.com/@mbostock/the-delaunays-dual
You get to learn thing like the connections between father/pater/vader and brother/frater/bruder (f/p, th/t/d, b/f), the reason many plurals with 'f' become 'v' (elf/elves, wolf/wolves, half/halves), why 'x' at the beginning of the word sounds like 'z' but in the middle of a word like 'ks'. Or how some languages have more than singular/plural [1]
Unexpected word connection: 'c' in Latin/Spanish to 'h' in English: century/hundred, cornu/horn, casa/house, caliente/hot
Unexpected word connection: 'w' in German-to-English words and 'g' in French-to-English words: warranty/guarantee, warden/guardian (also seen in English/French: William/Guillome, war/guerre)
[1] https://developer.mozilla.org/en-US/docs/Mozilla/Localizatio...
- http://www.allaboutvision.com/lenses/how-to-choose.htm
- https://web.archive.org/web/20090815102701/http://www.hbutz.... (table at end)
- https://en.wikipedia.org/wiki/Corrective_lens#Ophthalmic_mat...
- https://web.archive.org/web/20160322110111/http://www.optica...
Trivex is impact resistant and lighter but it's also a little thicker than some of the high index materials so the weight ends up being the same. MR-8 was the one I hadn't heard of and was most curious about.
https://www.reddit.com/r/AskReddit/comments/4v3ts4/what_was_... has some notes about scratch resistance
With high index lenses, the chromatic aberration (low "abbe number") was annoying me (see ScottBurson's post), especially on a wide screen monitor. I ended up getting lenses made of glass. But these aren't so great outdoors because you don't want shattered glass in your eye.
I ended up getting glass for use at home at the computer and MR-8 for the rest of the time (hiking, driving). For the computer lenses, I got a slightly lower prescription (-4 instead of -5) and they're a lot more comfortable for reading (people may find these useful after the age of 40). I think next time I'll go for CR-39 instead of glass, as the glass lenses are rather heavy.
- https://github.com/redblobgames/dual-mesh/
- https://github.com/redblobgames/mapgen2/
However the html5 UI isn't (it's a big hack I'm abandoning, and working on a different version). Feel free to View Source if you want to see the ugly UI code :)
- http://esolangs.org/wiki/Hexagony - a hexagonal layout programming language, implemented in Ruby, which is also the name a gemstone made of corundum, which crystalizes in hexagonal shapes ;)
- http://hexagons.info/ - "It is likely that HEXAGONS will continue to increase in popularity over the coming years, as humanity enters a glorious new hexagonal golden age, and all sentient beings on our planet ascend to a new, higher state of hexagonal consciousness."
That said, hexagons seem fine for things of the same size (such as the solar cells in the article), but rectangular construction seems to work better for assembling components of varying size (like a house made of rooms of different sizes)…
Other algorithm / data structure visualization sites:
- http://will.thimbleby.net/algorithms/doku.php - uses a javascript interpreter that allows the visualizer to show local variables and pause/rewind the algorithm execution
- http://rosulek.github.io/vamonos/demos/ - marks up the algorithm code with line numbers so that it can show how the visualization corresponds to pseudocode
- http://jasonpark.me/AlgorithmVisualizer/
- http://www.cs.usfca.edu/~galles/visualization/Algorithms.htm...
For a quick “where are they now”:
- Barren Realms Elite --> Mehul (my brother) moved from BBS games to web games, with Earth 2025 and then Utopia, and then a web portal Swirve.com, and then he got out of the games business and ran a coffee shop, Dominican Joe in downtown Austin (but it was just sold) - Legend of the Red Dragon --> Seth Robinson (who I finally met this year) moved on to PC games, then mobile games, and now runs a successful MMO called Growtopia (but it was just sold) https://en.wikipedia.org/wiki/Robinson_Technologies - Solar Realms Elite --> I got out of the BBS door world and went to grad school, interested in teaching. I now write interactive tutorials at redblobgames.com, starting with game development but I want to expand into math and computer science. SRE's wikipedia page got wiped by the deletionists http://www.vintagecomputing.com/index.php/archives/922 but was preserved by http://breakintochat.com/
JPS by itself (not JPS+ in this video) is notable for not requiring any precomputation to achieve some speedup.
If you're willing to precompute some things, there are lots of other techniques available for unweighted grid maps. http://www.cs.du.edu/~sturtevant/papers/GPPC-2014.pdf has an overview of techniques and some benchmarks that use real-world game maps (Baldur's Gate, Dragon Age).
I believe the "goal bounding" from the video is called "arc flags" in the literature.