Typisches Problem und Ausführungsmethode
$ N $ Teilmenge der Menge $ M = \ {1, \ dots, m \} $ S_j (\ subseteq M), j \ in N = \ {1, \ dots, n \} Angenommen, $ kostet $ c_j $. Finden Sie die Beschichtung $ X (\ subseteq N) $ von $ M $, die die Summe der Kosten minimiert. Die Beschichtung kann die gleichen Elemente in der Teilmenge aufweisen.
usage
Signature: set_covering(n, cand, is_partition=False)
Docstring:
Kollektives Beschichtungsproblem
Eingang
n:Elementanzahl
cand: (Gewicht,Teilmenge)Kandidatenliste
Ausgabe
Nummernliste der ausgewählten Kandidatenliste
python
#CSV-Daten
import pandas as pd
from ortoolpy import set_covering
ss = pd.read_csv('data/subset.csv')
g = ss.groupby('id')
set_covering(len(g), [(r.weight.iloc[0], r.element.tolist()) for _, r in g])
Ergebnis
[0, 1, 2]
python
# pandas.DataFrame
from ortoolpy.optimization import SetCovering
SetCovering('data/subset.csv')
id | weight | element | |
---|---|---|---|
0 | 0 | 1.0 | a |
1 | 0 | NaN | b |
2 | 1 | 1.0 | a |
3 | 1 | NaN | c |
4 | 2 | 1.0 | a |
5 | 2 | NaN | d |
python
#Beispieldaten
from ortoolpy import set_covering
set_covering(4, [(1, ('a', 'b')), (1, ('a', 'c')), (1, ('a', 'd')), (3, ('b', 'c'))])
Ergebnis
[0, 1, 2]
Recommended Posts