We now have the models RBMSymm and GCNN that can learn the wavefunction of the lowest-lying symmetric energy level. As @attila-i-szabo and i discussed today, it would be really nice to be able to explore broken symmetry states as well. We need two things:
a) A layer that does a phase-weighted average over the output (pre-averaging) of a GCNN or RBMSymm using the desired character of the symmetry group. This should be straightforward to implement.
b) A method for generating the character of the symmetry group by specifying eigenvalues w.r.t to symmetry operations.( I.e. specify the character table for p4 by specifying R(\pi/4) and T(1,0) and T(0,1) )
We could also work with the algebraic group (instead of the graph) and try to generate the cosets from that. This may not produce the cosets we want, but we can still use it to look for valid character tables. This would require some work from the user to figure out what these character tables mean.
Designs
Child items
...
Show closed items
Linked items
0
Link issues together to show that they're related.
Learn more.
As for labelling SymmGroup using NetworkX, I think ISMAGS.analyze_symmetry probably does what we need, but the documentation is too cryptic to make use of it, so I asked them what it means. No useful replies yet, but you might want to keep an eye on it.
In any case, an automated approach like this will only ever return the generators of the SymmGroup at best, so the user will have to figure out what those mean...
What's still missing from this is a "nice presentation" of the group, and it's not clear to me how much that can be automated. However, I think this gets pretty close to it, though I'd have to investigate what the output of MinimalGeneratingSet would look like on an automorphism group from the above code.
EDIT: Asking away in the Julia slack people tell me that the character table is definitely doable in GAP.
Again, I'm sure this is doable, there's a whole chapter of docs on it, the problem is that the raw character table of a big group (like the wallpaper group of a large lattice) is not very edifying, you'd like to label it by wave vector-little group combinations so much as it's possible.
The last question is how we'd integrate all this with NetKet (other than the communicate-via-files solution, which I'm happy with, but it might not be the most elegant)
I don’t think there’s a good way to solve this problem unless we find a way for Lattice.py to generate the graph and all of it’s automorphisms.
I do think that just generating the raw character table is useful in and of itself. The user has some work to do in figuring out which representation is the one they want, but I think a lot of it can be done by counting eigenvalues.
If we combined the functionality of a) Having readable symmetry group for a few common lattices b) If your lattice isn’t in that group you can still generate the character tables and try a bunch of different representations, that might be good for now. Maybe I’m just unambitious :)
Guys I think the discussion on this is interesting but that messages on GitHub are kind of slow. Do you want to hop on a zoom/Skype/slack/whatever meeting on Thursday let’s say 4pm Paris time to discuss this a bit further?
Il 28 apr 2021, 00:01 +0200, chrisrothUT @.***>, ha scritto:
I don’t think there’s a good way to solve this problem unless we find a way for Lattice.py to generate the graph and all of it’s automorphisms.
I do think that just generating the raw character table is useful in and of itself. The user has some work to do in figuring out which representation is the one they want, but I think a lot of it can be done by counting eigenvalues.
If we combined the functionality of a) Having readable symmetry group for a few common lattices b) If your lattice isn’t in that group you can still generate the character tables and try a bunch of different representations, that might be good for now. Maybe I’m just unambitious :)
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.
Great discussion! Would you mind also sending me an invite for Friday? Extending our symmetry handling capabilities is relevant to me as well and I'd like to discuss what we can do based on our new interface, also with regard to adding character tables.
In preparation for today, I checked out what the graph/group algorithms in GAP can do for us. Unfortunately, its strategy for finding simple presentations of groups is a bit too clever for us...
The first line creates a 3x3 square lattice with periodic boundary conditions. Its automorphism group has the expected 8x9=72 elements, but as it turns out, it can be written a bit too succinctly for our purposes (the first presentation is two vertical and one diagonal mirrors, the second is the same diagonal mirror and a vertical glide). EDIT: I ran the same thing on a 7x7 lattice, and I get completely analogous presentations
Likewise, we can generate character tables too: it's easy to discover the character table of D_8 in the output, but I'm not sure how to attach physical meaning to the remaining 4-dimensional irreps (i.e., I know where they come from, but not sure how to label them with things like wave vectors).
I was wondering why you had twice the edges, but apparently that is what is typically done for symmetric graphs.
Does Digraph take a list of edges? That is how we usually specify graphs in Netket. I think there’s a straightforward mapping to complex numbers but we still have the issue of figuring out which elements of automorphisms() correspond to particular symmetry elements.
As for the group theory notes, what would be the preferred format? I'm tempted to use LaTeX because there will be a lot of maths, but that wouldn't play nicely with the existing docs/tutorials. Github's maths-free MD on the other hand won't really cut it.
Also, would you like these notes as part of the NetKet docs or just FYI?
As for the group theory notes, what would be the preferred format?
What you feel comfortable in.
I personally dislike (restructured text) .rst and prefer Markdown, which is a lightweight latex. The last pages I added to the docs are already written in Markdown (MyST dialect) and it will almost look like LaTeX because you can use inline math
and block-math
\begin{equation} \end{equation} $$.
Also, would you like these notes as part of the NetKet docs or just FYI?
I would personally be interested myself in reading them, but I think adding those to the docs would be a great addition, as it's quite related.