列出兼容性矩阵中的组合

List combinations from a compatibility matrix

我有一个对称矩阵形状的 table,它告诉我哪些组件兼容。这是一个例子;

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 表示兼容,空白表示不兼容。在实际 table 中有更多的组件。目前,真正的 table 在 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))))