Skip to content

Commit fd05978

Browse files
author
Youzhi Luo
committed
add SyMat code
1 parent cd2316e commit fd05978

36 files changed

+2667924
-7
lines changed

OpenMat/SyMat/README.md

+28-7
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,42 @@
1-
# SyMat
1+
# Towards Symmetry-Aware Generation of Periodic Materials
22

3-
This is the official implementation of the **SyMat** method proposed in the following paper. Code will be released soon.
3+
This is the official implementation of the **SyMat** method proposed in the following paper.
44

5-
Youzhi Luo, Chengkai Liu, Shuiwang Ji. "[Towards Symmetry-Aware Generation of Periodic Materials](https://arxiv.org/abs/2307.02707)".
5+
Youzhi Luo, Chengkai Liu, Shuiwang Ji. "[Towards Symmetry-Aware Generation of Periodic Materials](https://openreview.net/forum?id=Jkc74vn1aZ)".
66

77
<p align="center">
88
<img src="https://github.com/divelab/AIRS/blob/main/OpenMat/SyMat/assets/symat.png" width="800" class="center" alt=""/>
99
<br/>
1010
</p>
1111

12+
## Requirements
13+
We include key packages below. The anaconda environment we used is available in environment.yml.
14+
* PyTorch >= 1.7.1
15+
* PyTorch Geometric >= 1.6.3
16+
* pymatgen == 2020.11.11
17+
* matminer == 0.7.4
18+
* smact == 2.3.1
19+
20+
## Run
21+
22+
Model training:
23+
```linux
24+
python train.py --result_path result/ --dataset perov_5
25+
```
26+
Material generation:
27+
```linux
28+
python generate.py --model_path /path/to/your/model --dataset perov_5 --num_gen 10000
29+
```
30+
1231
## Citation
1332
```latex
14-
@article{luo2023towards,
33+
@inproceedings{
34+
luo2023towards,
1535
title={Towards Symmetry-Aware Generation of Periodic Materials},
16-
author={Luo, Youzhi and Liu, Chengkai and Ji, Shuiwang},
17-
journal={arXiv preprint arXiv:2307.02707},
18-
year={2023}
36+
author={Youzhi Luo and Chengkai Liu and Shuiwang Ji},
37+
booktitle={Thirty-seventh Conference on Neural Information Processing Systems},
38+
year={2023},
39+
url={https://openreview.net/forum?id=Jkc74vn1aZ}
1940
}
2041
```
2142

OpenMat/SyMat/assets/symat.png

5.33 KB
Loading

OpenMat/SyMat/config/__init__.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .perov_5_config_dict import conf as perov_5_conf
2+
from .carbon_24_config_dict import conf as carbon_24_conf
3+
from .mp_20_config_dict import conf as mp_20_conf
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
conf = {}
2+
3+
conf_data = {}
4+
conf_data['prop_name'] = 'energy_per_atom'
5+
conf_data['graph_method'] = 'crystalnn'
6+
7+
conf_model = {}
8+
9+
conf_enc_backbone = {}
10+
conf_enc_backbone['cutoff'] = 5.0
11+
conf_enc_backbone['num_layers'] = 4
12+
conf_enc_backbone['hidden_channels'] = 128
13+
conf_enc_backbone['out_channels'] = 256
14+
conf_enc_backbone['int_emb_size'] = 64
15+
conf_enc_backbone['basis_emb_size_dist'] = 8
16+
conf_enc_backbone['basis_emb_size_angle'] = 8
17+
conf_enc_backbone['basis_emb_size_torsion'] = 8
18+
conf_enc_backbone['out_emb_channels'] = 256
19+
conf_enc_backbone['num_spherical'] = 7
20+
conf_enc_backbone['num_radial'] = 6
21+
22+
conf_dec_backbone = {}
23+
conf_dec_backbone['cutoff'] = 5.0
24+
conf_dec_backbone['num_layers'] = 4
25+
conf_dec_backbone['hidden_channels'] = 128
26+
27+
conf_dec_backbone['out_channels'] = 256
28+
conf_dec_backbone['int_emb_size'] = 64
29+
conf_dec_backbone['basis_emb_size_dist'] = 8
30+
conf_dec_backbone['basis_emb_size_angle'] = 8
31+
conf_dec_backbone['basis_emb_size_torsion'] = 8
32+
conf_dec_backbone['out_emb_channels'] = 256
33+
conf_dec_backbone['num_spherical'] = 7
34+
conf_dec_backbone['num_radial'] = 6
35+
36+
conf_model['enc_backbone_params'] = conf_enc_backbone
37+
conf_model['dec_backbone_params'] = conf_dec_backbone
38+
39+
conf_model['latent_dim'] = 128
40+
conf_model['num_fc_hidden_layers'] = 1
41+
conf_model['fc_hidden_dim'] = 256
42+
conf_model['max_num_atoms'] = 24
43+
conf_model['max_atomic_num'] = 100
44+
conf_model['use_gpu'] = True
45+
conf_model['lattice_scale'] = True
46+
conf_model['pred_prop'] = False
47+
conf_model['use_multi_latent'] = True
48+
conf_model['logvar_clip'] = 6.0
49+
conf_model['mu_clip'] = 14.0
50+
conf_model['num_time_steps'] = 50
51+
conf_model['noise_start'] = 0.01
52+
conf_model['noise_end'] = 10
53+
conf_model['cutoff'] = 3.0
54+
conf_model['max_num_neighbors'] = 5
55+
conf_model['coord_loss_type'] = 'per_node'
56+
57+
58+
conf_optim = {'lr': 0.001, 'betas': [0.9, 0.999], 'weight_decay': 0.0}
59+
60+
conf['kld_weight'] = 0.01
61+
conf['elem_type_num_weight'] = 1.0
62+
conf['elem_type_weight'] = 30.0
63+
conf['elem_num_weight'] = 1.0
64+
conf['lattice_weight'] = 10.0
65+
conf['coord_weight'] = 10.0
66+
conf['max_grad_value'] = 0.5
67+
68+
conf['data'] = conf_data
69+
conf['model'] = conf_model
70+
conf['optim'] = conf_optim
71+
conf['verbose'] = 1
72+
conf['batch_size'] = 256
73+
conf['start_epoch'] = 0
74+
conf['end_epoch'] = 150
75+
conf['save_interval'] = 50
76+
conf['chunk_size'] = 1000
77+
conf['train_temp'] = [1.0, 1.0, 1.0]
78+
conf['gen_temp'] = [1.0, 0.7, 1.0, 0.01]
79+
conf['val_temp'] = [1.0, 1.0, 1.0]
80+
conf['loss_thre'] = [3.0, 10.0]
+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
conf = {}
2+
3+
conf_data = {}
4+
conf_data['prop_name'] = 'formation_energy_per_atom'
5+
conf_data['graph_method'] = 'crystalnn'
6+
7+
conf_model = {}
8+
9+
conf_enc_backbone = {}
10+
conf_enc_backbone['cutoff'] = 5.0
11+
conf_enc_backbone['num_layers'] = 4
12+
conf_enc_backbone['hidden_channels'] = 128
13+
conf_enc_backbone['out_channels'] = 256
14+
conf_enc_backbone['int_emb_size'] = 64
15+
conf_enc_backbone['basis_emb_size_dist'] = 8
16+
conf_enc_backbone['basis_emb_size_angle'] = 8
17+
conf_enc_backbone['basis_emb_size_torsion'] = 8
18+
conf_enc_backbone['out_emb_channels'] = 256
19+
conf_enc_backbone['num_spherical'] = 7
20+
conf_enc_backbone['num_radial'] = 6
21+
22+
conf_dec_backbone = {}
23+
conf_dec_backbone['cutoff'] = 5.0
24+
conf_dec_backbone['num_layers'] = 4
25+
conf_dec_backbone['hidden_channels'] = 128
26+
27+
conf_dec_backbone['out_channels'] = 256
28+
conf_dec_backbone['int_emb_size'] = 64
29+
conf_dec_backbone['basis_emb_size_dist'] = 8
30+
conf_dec_backbone['basis_emb_size_angle'] = 8
31+
conf_dec_backbone['basis_emb_size_torsion'] = 8
32+
conf_dec_backbone['out_emb_channels'] = 256
33+
conf_dec_backbone['num_spherical'] = 7
34+
conf_dec_backbone['num_radial'] = 6
35+
36+
conf_model['enc_backbone_params'] = conf_enc_backbone
37+
conf_model['dec_backbone_params'] = conf_dec_backbone
38+
39+
conf_model['latent_dim'] = 128
40+
conf_model['num_fc_hidden_layers'] = 1
41+
conf_model['fc_hidden_dim'] = 256
42+
conf_model['max_num_atoms'] = 20
43+
conf_model['max_atomic_num'] = 100
44+
conf_model['use_gpu'] = True
45+
conf_model['lattice_scale'] = True
46+
conf_model['pred_prop'] = False
47+
conf_model['use_multi_latent'] = True
48+
conf_model['logvar_clip'] = 6.0
49+
conf_model['mu_clip'] = 14.0
50+
conf_model['num_time_steps'] = 50
51+
conf_model['noise_start'] = 0.01
52+
conf_model['noise_end'] = 10
53+
conf_model['cutoff'] = 5.0
54+
conf_model['max_num_neighbors'] = 5
55+
conf_model['coord_loss_type'] = 'per_node'
56+
57+
58+
conf_optim = {'lr': 0.001, 'betas': [0.9, 0.999], 'weight_decay': 0.0}
59+
60+
conf['kld_weight'] = 0.01
61+
conf['elem_type_num_weight'] = 1.0
62+
conf['elem_type_weight'] = 30.0
63+
conf['elem_num_weight'] = 1.0
64+
conf['lattice_weight'] = 10.0
65+
conf['coord_weight'] = 10.0
66+
conf['max_grad_value'] = 0.5
67+
68+
conf['data'] = conf_data
69+
conf['model'] = conf_model
70+
conf['optim'] = conf_optim
71+
conf['verbose'] = 1
72+
conf['batch_size'] = 256
73+
conf['start_epoch'] = 0
74+
conf['end_epoch'] = 300
75+
conf['save_interval'] = 50
76+
conf['chunk_size'] = 1000
77+
conf['train_temp'] = [1.0, 1.0, 1.0]
78+
conf['gen_temp'] = [0.2, 0.7, 0.7, 0.01]
79+
conf['val_temp'] = [1.0, 1.0, 1.0]
80+
conf['loss_thre'] = [3.0, 10.0]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
conf = {}
2+
3+
conf_data = {}
4+
conf_data['prop_name'] = 'heat_ref'
5+
conf_data['graph_method'] = 'crystalnn'
6+
7+
conf_model = {}
8+
9+
conf_enc_backbone = {}
10+
conf_enc_backbone['cutoff'] = 5.0
11+
conf_enc_backbone['num_layers'] = 4
12+
conf_enc_backbone['hidden_channels'] = 128
13+
conf_enc_backbone['out_channels'] = 256
14+
conf_enc_backbone['int_emb_size'] = 64
15+
conf_enc_backbone['basis_emb_size_dist'] = 8
16+
conf_enc_backbone['basis_emb_size_angle'] = 8
17+
conf_enc_backbone['basis_emb_size_torsion'] = 8
18+
conf_enc_backbone['out_emb_channels'] = 256
19+
conf_enc_backbone['num_spherical'] = 7
20+
conf_enc_backbone['num_radial'] = 6
21+
22+
conf_dec_backbone = {}
23+
conf_dec_backbone['cutoff'] = 5.0
24+
conf_dec_backbone['num_layers'] = 4
25+
conf_dec_backbone['hidden_channels'] = 128
26+
27+
conf_dec_backbone['out_channels'] = 256
28+
conf_dec_backbone['int_emb_size'] = 64
29+
conf_dec_backbone['basis_emb_size_dist'] = 8
30+
conf_dec_backbone['basis_emb_size_angle'] = 8
31+
conf_dec_backbone['basis_emb_size_torsion'] = 8
32+
conf_dec_backbone['out_emb_channels'] = 256
33+
conf_dec_backbone['num_spherical'] = 7
34+
conf_dec_backbone['num_radial'] = 6
35+
36+
conf_model['enc_backbone_params'] = conf_enc_backbone
37+
conf_model['dec_backbone_params'] = conf_dec_backbone
38+
39+
conf_model['latent_dim'] = 128
40+
conf_model['num_fc_hidden_layers'] = 1
41+
conf_model['fc_hidden_dim'] = 256
42+
conf_model['max_num_atoms'] = 5
43+
conf_model['max_atomic_num'] = 100
44+
conf_model['use_gpu'] = True
45+
conf_model['lattice_scale'] = True
46+
conf_model['pred_prop'] = False
47+
conf_model['use_multi_latent'] = True
48+
conf_model['logvar_clip'] = 6.0
49+
conf_model['mu_clip'] = 14.0
50+
conf_model['num_time_steps'] = 50
51+
conf_model['noise_start'] = 0.01
52+
conf_model['noise_end'] = 10
53+
conf_model['cutoff'] = 4.0
54+
conf_model['max_num_neighbors'] = 5
55+
conf_model['coord_loss_type'] = 'per_node'
56+
57+
58+
conf_optim = {'lr': 0.001, 'betas': [0.9, 0.999], 'weight_decay': 0.0}
59+
60+
conf['kld_weight'] = 0.01
61+
conf['elem_type_num_weight'] = 1.0
62+
conf['elem_type_weight'] = 30.0
63+
conf['elem_num_weight'] = 1.0
64+
conf['lattice_weight'] = 10.0
65+
conf['coord_weight'] = 10.0
66+
conf['max_grad_value'] = 0.5
67+
68+
conf['data'] = conf_data
69+
conf['model'] = conf_model
70+
conf['optim'] = conf_optim
71+
conf['verbose'] = 1
72+
conf['batch_size'] = 256
73+
conf['start_epoch'] = 0
74+
conf['end_epoch'] = 700
75+
conf['save_interval'] = 50
76+
conf['chunk_size'] = 1000
77+
conf['train_temp'] = [1.0, 1.0, 1.0]
78+
conf['gen_temp'] = [1.0, 1.0, 0.01, 0.01]
79+
conf['val_temp'] = [1.0, 1.0, 1.0]
80+
conf['loss_thre'] = [3.0, 10.0]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
1.416221726685762405e-02
2+
1.631265692412853241e-02
3+
1.880759373307228088e-02
4+
2.152392826974391937e-02
5+
2.486012130975723267e-02
6+
2.855351194739341736e-02
7+
3.294009342789649963e-02
8+
3.797526657581329346e-02
9+
4.368689283728599548e-02
10+
5.029701068997383118e-02
11+
5.785077437758445740e-02
12+
6.648117303848266602e-02
13+
7.635820657014846802e-02
14+
8.791271597146987915e-02
15+
1.014059782028198242e-01
16+
1.168085709214210510e-01
17+
1.343540549278259277e-01
18+
1.542949527502059937e-01
19+
1.780358254909515381e-01
20+
2.044109553098678589e-01
21+
2.341400384902954102e-01
22+
2.705442011356353760e-01
23+
3.113504648208618164e-01
24+
3.581326901912689209e-01
25+
4.116409420967102051e-01
26+
4.748038947582244873e-01
27+
5.467808842658996582e-01
28+
6.323360204696655273e-01
29+
7.295510768890380859e-01
30+
8.355088829994201660e-01
31+
9.589910507202148438e-01
32+
1.085756182670593262e+00
33+
1.218799352645874023e+00
34+
1.359216570854187012e+00
35+
1.490054607391357422e+00
36+
1.610905528068542480e+00
37+
1.727462291717529297e+00
38+
1.820559620857238770e+00
39+
1.903970122337341309e+00
40+
1.964640736579895020e+00
41+
2.005135536193847656e+00
42+
2.032685756683349609e+00
43+
2.044181585311889648e+00
44+
2.061612367630004883e+00
45+
2.061758041381835938e+00
46+
2.062728643417358398e+00
47+
2.067586660385131836e+00
48+
2.060790777206420898e+00
49+
2.067802906036376953e+00
50+
2.058125495910644531e+00

0 commit comments

Comments
 (0)