列出兼容性矩阵中的组合
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))))
我有一个对称矩阵形状的 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;
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))))