Evolutionary search with molecules #599
Replies: 1 comment
-
The short answer is no, I don't think that will be the best way to go about it. Instead, you'll want a new structure creator (either one you make or maybe use pyxtal) plus new transformations. It sounds like your suggestion is to randomly create/mutate structures and then check to see if they include the molecular component that you want. I don't think this would pan out well because the massive massive majority of structures will get rejected. Sure, you can have a validator that checks each structure and keep trying until you get one -- but this will take hundreds of attempts even for a small molecule like CH4. Jump to a slightly larger molecule like benzene and there's a good chance that it will take hours to create a single structure that passes your validation. What are the odds you get a planar C6H6 ring while also inserting other random inorganic atoms...? And what if you want more than one benzene? Instead, I think we should update how we define sites in a crystal structure. A "site" as we normally think of it is an element plus xyz coordinates. But now, we want a site to be a specie (element or molecule), xyz coordinate, and (if the specie is a molecule) rotation/orientation angles. This way you can create structures much more efficiently -- inserting molecules to distinct sites as if they were a single atom and then rotating them (randomly or via some empirical relaxation). I would read into PyXtal's creation method for molecular crystals here. They build on the concept I just described. Pymatgen also makes headway on this broader definition of sites in structures. These will help handle the structure creation for you. Then you may need to add transformations that randomly rotate molecular sites too. I'd imagine even a rattle mutation plus a rattle on the molecule angles would be important. We're assuming all molecules have a rigid 3D confirmation for now too btw. Adding conformers into the mix introduces even more complexity. There's more we'd have to update in the evolutionary workflow -- but I'll stop here for now and see what you think |
Beta Was this translation helpful? Give feedback.
-
@jacksund Duncan and I are looking at doing an evolutionary search that has a mixture of small molecules and inorganic atoms. While we're fine with the inorganic atoms bonding in whatever way they like, we don't want the small molecules to be fragmented. So if we put in, for example, a CH4, we don't want the evolutionary algorithm to rip it apart, bonding a H to one thing and a CH3 to another.
We're thinking how to implement this on top of your code, either for a fixed or variable composition. It seems that either a validator or selector would be the way to go. So we generate a new structure, but then if the CH4 isn't initially intact, then we don't do the evolutionary algorithm. Perhaps also a validator at the end (more important) to check again that the molecules are intact. Alternatively, this could be done as something built on top of a tournament selector, where we do not select structures that are fragmented. This seems less ideal, since it would allow fragmented structures to end up in the database.
Do you have thoughts on whether our thinking is in the right direction? I.e., to introduce a new validator at the start/end of the relaxation?
Any other thoughts welcome. Thanks!
Beta Was this translation helpful? Give feedback.
All reactions