Typisches Problem und Ausführungsmethode
Das Problem der Gewichtsanpassung ist ein allgemeiner Begriff wie "Problem der maximalen Gewichtsanpassung, Problem der maximalen Gewichtsanpassung, Problem der maximalen Anpassung des maximalen Gewichts, Problem der maximalen Anpassung des minimalen Gewichts, Problem der perfekten Anpassung des minimalen Gewichts".
Gewichtsanpassungsproblem | Problemtyp | Anzahl der übereinstimmenden Seiten |
---|---|---|
Problem der maximalen Gewichtsanpassung | Maximieren | Irgendein |
Maximales Gewicht, maximales Übereinstimmungsproblem | Maximieren | Muss dem maximalen Übereinstimmungsproblem entsprechen |
Maximales Gewicht perfekt passendes Problem | Maximieren | Muss die halbe Punktzahl sein |
Minimales Gewicht, maximales Übereinstimmungsproblem | Minimieren | Muss dem maximalen Übereinstimmungsproblem entsprechen |
Minimales Gewicht perfekt passendes Problem | Minimieren | Muss die halbe Punktzahl sein |
Für den ungerichteten Graphen $ G = (V, E) $ ist, wenn das Gewicht $ w (e) $ jeder Seite $ e \ in E $ angegeben ist, $ \ sum_ {e \ in M} {w ( e) Finden Sie das passende $ M $ mit dem größten} $.
usage
Signature: nx.max_weight_matching(G, maxcardinality=False)
Docstring:
Compute a maximum-weighted matching of G.
A matching is a subset of edges in which no node occurs more than once.
The cardinality of a matching is the number of matched edges.
The weight of a matching is the sum of the weights of its edges.
python
#CSV-Daten
import pandas as pd, networkx as nx, matplotlib.pyplot as plt
from ortoolpy import graph_from_table, networkx_draw
tbn = pd.read_csv('data/node0.csv')
tbe = pd.read_csv('data/edge0.csv')
g = graph_from_table(tbn, tbe)[0]
d = nx.max_weight_matching(g)
pos = networkx_draw(g)
nx.draw_networkx_edges(g, pos, width=3, edgelist=[(i, j) for i, j in d])
plt.show()
print(d)
Ergebnis
{5: 1, 1: 5, 0: 2, 2: 0, 4: 3, 3: 4}
python
# pandas.DataFrame
from ortoolpy.optimization import MaxWeightMatching
MaxWeightMatching('data/edge0.csv')
node1 | node2 | capacity | weight | |
---|---|---|---|---|
0 | 0 | 2 | 2 | 4 |
1 | 1 | 5 | 2 | 5 |
2 | 3 | 4 | 2 | 4 |
python
#Zufällige Daten
import networkx as nx, matplotlib.pyplot as plt
from ortoolpy import networkx_draw
g = nx.random_graphs.fast_gnp_random_graph(10, 0.3, 1)
for i, j in g.edges():
g.adj[i][j]['weight'] = 1
d = nx.max_weight_matching(g)
pos = networkx_draw(g, nx.spring_layout(g))
nx.draw_networkx_edges(g, pos, width=3, edgelist=[(i, j) for i, j in d])
plt.show()
Recommended Posts