V1 README: 20210723
未考虑键长
仅考虑节点间的连接

模型的保存与加载存在问题。

V1.1 README: 20210814
考虑了键长。

仅考虑单箭头注意力

V1.2 README: 20210814
考虑了多个注意力箭头。

每个注意力箭头的注意力机制是相同的。

箭头alpha的维度需要再压缩一个维度。本版本没有压缩，本版本edge的维度为（边数，箭头数，节点表示维度）。详情见20210816组会PPT

对于多个注意力箭头，每层网络会先扩张节点表示的维度，前向传播后，再压缩节点维度。这与GAT原论文不同。


V1.3 README: 20210815
与上一版本比较，本版本：

压缩了边的表示维度。

仍存在的问题：
模型架构未保存至json文件。
未生成简单图，用以加载权重。
需要提取单个原子的能量时，接口不够方便。
未选择json作为配置文件


V1.4 README: 20210815
只在输入层扩张节点特征，只在输出层压缩节点特征。其他层节点特征不变。

V1.5 README: 20210820
修改了独热码编码方式：按元素顺序排序，编写独热码。并修复了编写的bug

V1.6 README: 20210822
添加了读图的功能。
读图时，有可能需要对读取到的性质（graph property or graph label)做进一步操作。此版本添加了scale和求平均的选项。

V1.7 README: 20210823
修改了 模型加载 函数。判断存储的weight与模型是否匹配。

尚未完成的功能：多箭头的信息聚合机制不能多样化。例如，考虑两个箭头，一个除以dist，另一个乘以dist。
未考虑不同的损失函数。

V1.8 README: 20210912
尝试训练时使用多进程，失败。因为批训练的forward所耗时间与backward耗时相似，多进程无明显效果。

V2.0 README: 20210927
review 一遍代码，添加了多箭头不同的注意机理。

V2.1 README: 20211006
添加了GAT ase 的calculator，BFGS算法。
建立GAT图时，可以选择是否需要supercell。
建立GAT图时，强制删除小于cutoff的节点。

尚未考虑的功能：没有将受力考虑到梯度下降过程中。
未添加激活函数的选项。

V3.0 README: 20211031
损失函数中加入了力的预测损失。

未完善的功能：
图标签可固定为每原子的能量，没有必要scale

V3.1 README: 20211110
备份了v3.0的文件。预计以后不再更新3.*版本。直接使用GAT预测受力，而非tape

V3.2 README energy: 20211116
此版本可准确预测能量

V4.0 README: 20211118
此版本可同时预测能量和受力。
训练过程中，受力和能量共享了部分参数，导致他们相互影响。可能是训练差的原因。

如果受力的readout层在后面，那么可以获得比较好的受力预测结果。

V4.1 README: 202111**
直接预测受力。
将一些计算放到了SingleGatLayer外面。
训练图之前，不需要复制图。因为训练没有改变图的数据。
进一步整理了变量计算。将一些变量的计算放到了GatModel中。而非main或SingleGatLayer。
添加了readout 层

V3.2 README force: 20211119
可准确预测AIMD的受力，但催化的平板模型不太理想。

V4.2 README force: 20211130
可选择两种建图模式：基于距离：distance cutoff，基于Voronoi近邻。
可在训练过程中排除固定原子的受力。

V4.3 README force: 2021202
在main脚本中添加了predict函数。

V5.0 README
能量和受力分开预测，但是他们可以import相同的GAT层
添加了tools文件夹。
可以使用单独的脚本建图。

V6.0 README
支持GPU运行。

V6.1 README
备份一些小修改

V7.0 README
删除不必要注释。
理一遍受力预测的逻辑，看看受力MAE不一致的原因。
如果有bin文件，那么fname_prop.csv文件就非必要。而且要自动分割训练，验证，测试集。
测试了激活函数的影响。
使用了dgl的batch graph，大幅度提升训练速度。
late_readout无法保持旋转不变性。

V7.1 README 20220208
由于readout层过深，导致梯度不稳定，所以添加了batch normalization层，期望稳定梯度。（不如降低学习率）

V7.3 README 20220322
2022/02/24：开始准备弹性常数的计算
弹性常数的批量计算：完成
完善了concat_graphs.py脚本
将GatApp脚本部署到了GPU

V7.4 README 20220330
加入迁移学习的功能
20220403: 建图时区分吸附质和表面。

V7.5 README 202203411
高通量预测时，可以去除下表面原子，可以固定所有表面原子，并标出几何结构优化的收敛性。
20220413：完善`concat_graphs.py`脚本。计算了体相NiCoFePdPt的平均原子体积。
高通量产生吸附质时, 可以固定与表面连接原子的x和y坐标，仅弛豫该原子的z坐标。
20220502：高通量脚本中的几何优化，可以通过字典传参。
20220510：建图时constraints循环；
20220510：generate_adsorption_sites.py 脚本的第41行：'O1': {'symbol': 'O', 'coord': np.array([-0.239 / self.length_x, -0.02, 0.0])}, 被修改了。
20220519: 对于受力预测模型，readout末尾一定数量的层可以不使用激活函数，这个数量现在可以自定义。

V7.6 README 20220524
整合了高通量计算脚本
不同吸附质，离表面的高度是不一致的。同一吸附质，在表面不同位点的吸附距离也是不一致的。为了使初始构型更合理，在generate_adsorption_sites.py脚本中添加了性质self.adsorbate_shift = {'bridge': 0.0, 'ontop': 0.35, 'hollow': -0.1}，从而使不同的位点，距离表面有不同的距离。
20220630：分割数据集，防止内存溢出报错。如果找不到数据集分割文件（train.txt，validation.txt，test.txt），就重新生成。

V7.7 README 20220716
从文件建立体相结构，与训练集数据更相似。

V7.8 README 20230203
增加更多模块，比如：
docs：手册
dataset：数据库处理。主要作用为脚本库
cata：催化相关（涉及到催化的具体应用）
app：应用相关。如静态计算，高通量计算，分子动力学，弹性常数等。主要作用为脚本库
others：用途不明的脚本
tools：其他通用工具，主要用作脚本库

V7.9 README 20230731
统一数据集API
