问题描述
我有一个对称矩阵形状的表格,它告诉我哪些组件是兼容的。这是一个例子;
Components | A | B | C | D | E | F | G |
-----------+---+---+---+---+---+---+---+
A | | | 1 | 1 | 1 | 1 | |
-----------+---+---+---+---+---+---+---+
B | | | | | 1 | | 1 |
-----------+---+---+---+---+---+---+---+
C | 1 | | | | | 1 | |
-----------+---+---+---+---+---+---+---+
D | 1 | | | | | 1 | 1 |
-----------+---+---+---+---+---+---+---+
E | 1 | 1 | | | | | 1 |
-----------+---+---+---+---+---+---+---+
F | 1 | | 1 | 1 | | | 1 |
-----------+---+---+---+---+---+---+---+
G | | 1 | | 1 | 1 | 1 | |
-----------+---+---+---+---+---+---+---+
其中 1 表示兼容,空白表示不兼容。在实际的表中有更多的组件。目前,真正的表格在 Excel 电子表格中,但为了方便起见,可以轻松转换为 csv 或文本。
我需要做的是创建一个可能的组合列表。我知道有 itertools
之类的东西,但我只需要它来创建兼容列表并忽略不兼容的列表。为此,我在运行 pyomo 时使用了一个 dat 文件;
set NODES := A B C D E F G;
param: ARCS:=
A
B
C
...
A C
A D
B E
...
A C F
BGE
...
我需要列出所有内容才能兼容。所以ACF可以在一起,因为它们都互相兼容,但ADG不能在一起,因为G和A不兼容。
长期计划:
最终,我计划使用 Pyomo 找到组件的最佳组合,以最大限度地减少与每个组件相关的资源。因此,在 dat 文件中,每个组合最终都会有额外的 cost
。
解决方法
import numpy as np
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
df = pd.read_excel(r"/path/to/file.xlsx",sheet_name="Sheet4",index_col=0,usecols = "A:H")
df.edge=nx.from_pandas_adjacency(df)
print(list(nx.enumerate_all_cliques(nx.Graph(df.edge))))