daveyarwood / bjj-graph

An exploration of Brazilian jiu-jitsu as a graph
2 stars 0 forks source link

A few suggestions #1

Closed Patrickh16 closed 6 months ago

Patrickh16 commented 7 months ago

Cool project Dave.

1 - I've seen a much older bjj grappling project with an extensive graph saved as a .txt file:

https://github.com/Eelis/GrappleMap/tree/master

If you can merge this with your existing graph you'd have a lot of data to work with.

I believe each position is given unique ID (to describe the node/vertex) in addition to its name. Eelis also included tags to classify the domains each vertex falls into as a kind of metadata.

2 - You could include an arbitrary 0-1 value for each vertex to describe how advantageous it is for the 'top' player, e.g. mount might be 0.7 in favor of top, while rear body triangle could be 0.9.

These values would be arbitrary judgements for now, but if you take the project further you might end up training it on some real world match data.

Scraping data from one of the more recent UFC video games might also be worthwhile if you want to flesh out the value of each position.

3 -As with vertices/nodes, you could also add arbitrary starting values to edges between nodes, e.g. 'back body triangle -> scramble' would have a low value for the escapee.

4 - Once your graph is big enough, consider calculating the eigenvector centrality for your nodes/vertices. It'll give you an idea of how 'influential' a given position. Testing to see if the graph is scale-free or follows a power law would also be interesting.

daveyarwood commented 7 months ago

Thanks for bringing GrappleMap to my attention - it's super cool!

After reading the FAQ, I think my project here (while very similar) is different in a few ways:

  1. GrappleMap's focus is MMA-applicable grappling techniques from various disciplines, including wrestling, BJJ, judo and sambo, whereas my project is specifically about BJJ
  2. Gi techniques are out of scope for GrappleMap, whereas I plan to include them in bjj-graph
  3. GrappleMap has some (frankly, incredible!) 3D modeling and animation features, which is something that I don't think I would have the bandwidth to explore for bjj-graph (although someone could build such a thing on top of bjj-graph, if they were so inclined)
  4. GrappleMap's model looks similar to the v1 model of bjj-graph, where the nodes are positions and the edges are techniques/transitions. In v2 of bjj-graph, I'm beginning to play around with a slightly different model, where techniques are also nodes. (And I think there might even be a hypothetical v3 at some point, where I explore modeling BJJ as a statechart.)

Because of 1 and 4 especially, I don't think I could reuse much of GrappleMap. But it's a super awesome and interesting project for me to explore for inspiration and ideas.

daveyarwood commented 7 months ago

I believe each position is given unique ID (to describe the node/vertex) in addition to its name. Eelis also included tags to classify the domains each vertex falls into as a kind of metadata.

I might steal these ideas. As I explore implementing bjj-graph v2, I'm starting to encounter positions/scenarios that are extremely specific, and they need unique identifiers to differentiate them from others, but it might be useful to label them the same way, and let their position in the graph show the context, rather than include all of the information in the label. If I go that route, then labeling and/or separate IDs could be helpful.

You could include an arbitrary 0-1 value for each vertex to describe how advantageous it is for the 'top' player, e.g. mount might be 0.7 in favor of top, while rear body triangle could be 0.9.

That's a cool idea, but my perspective is that any position is not necessarily better/worse than any other, depending on your comfort level and expertise in a given position. For example, if you're really good at mount and only decent at back mount, then mount is actually better for you, even though common conventional wisdom is that back mount is a superior position.

Once your graph is big enough, consider calculating the eigenvector centrality for your nodes/vertices. It'll give you an idea of how 'influential' a given position. Testing to see if the graph is scale-free or follows a power law would also be interesting.

I didn't understand any of that, but it sounds interesting. More things for me to explore eventually!

Patrickh16 commented 7 months ago

Because of 1 and 4 especially, I don't think I could reuse much of GrappleMap. But it's a super awesome and interesting project for me to explore for inspiration and ideas.

It was a pretty ambitious project. The animations, editor and associated tools were a really cool addition to the graph. You raise a good point around Gi techniques. My intuition is even within 'pure' Jiu-Jitsu, Gi and No-Gi might be entirely different graphs.

I'm starting to encounter positions/scenarios that are extremely specific, and they need unique identifiers to differentiate them from others, but it might be useful to label them the same way, and let their position in the graph show the context, rather than include all of the information in the label

I think adding metadata for each position will be helpful. The question is how you can best include the information now, so that in the future you can easily pivot into a statechart (or some other kind of graph/representation) later on with minimal hassle.

I'm unfamiliar with Clojure, are there many libraries/packages for graphs? I've done a reasonable amount of work on graphs in R, and I found it significantly easier once I settled on the right package (igraph), as that package gave me a framework to structure my reasoning within.

That's a cool idea, but my perspective is that any position is not necessarily better/worse than any other, depending on your comfort level and expertise in a given position. For example, if you're really good at mount and only decent at back mount, then mount is actually better for you, even though common conventional wisdom is that back mount is a superior position.

Great point. Even if you sort all BJJ athletes into guard vs. non guard players, you'll see big differences in preferences for position. I guess you could either average all players out, or build it around how you personally prefer to play (as it's your project).

Patrickh16 commented 7 months ago

Once your graph is big enough, consider calculating the eigenvector centrality for your nodes/vertices. It'll give you an idea of how 'influential' a given position. Testing to see if the graph is scale-free or follows a power law would also be interesting.

I didn't understand any of that, but it sounds interesting. More things for me to explore eventually!

The TLDR of the calculations I was thinking of is that the overall shape of a graph can tell you a lot about how it works as a system. Some graphs are random, where as others are highly centralized: a minority of BJJ positions will likely have a disproportionately high number of connections, making them key positions.

Once you've added the enough positions to the graph, I can run the calculations for you.

Patrickh16 commented 7 months ago

I suspect BJJ will look like the graph on the right here. graphs

daveyarwood commented 7 months ago

It'll be interesting to see whether you're right!

I'm unfamiliar with Clojure, are there many libraries/packages for graphs?

There is at least one good one, Ubergraph, which is the one I'm using.