我有一个材料科学问题,我相信可以使用networkx解决,但我不确定如何解决。
首先,我想找到所有具有替换功能的3个元素的唯一组合。我已经用itertools完成了此操作,代码如下:
elements = ["Mg","Cu","Zn"]
combinations = list(itertools.combinations_with_replacement(elements, 3))
对于这些组合中的每一种,我想找到一个简单图上所有唯一排列的方法。该图有三个节点和三条边,每个节点连接两个其他节点。重要的是,这些边距离为1,但其中一条边的距离为2。基本上就像一个直角三角形。
例如:Node1 <-Distance=1-> Node2 <-Distance=2-> Node3 <-Distance=1-> Node1。
因此,对于组合["Mg", "Cu", "Cu"],应该有两个唯一的排列:
a) Mg(site1) -1- Cu(site2) -1- Mg(site3) -2- Mg(site1) b) Mg(site1) -1- Mg(site2) -1- Cu(site3) -2- Mg(site1) c) Cu(site1) -1- Mg(site2) -1- Mg(site3) -2- Cu(site1)(与b相同)
注意:我不确定定义图的最佳方式是什么,可能是这样:
import networkx as nx
FG = nx.Graph()
FG.add_weighted_edges_from([(1, 2, 1), (2, 3, 1), (3, 1, 2)])
["Mg", "Cu", "Cu"]
,为什么有两个不同的 Mg 节点呢? - kaya3