Décidons la conférence de PyCon JP 2016 par optimisation de combinaison

Décidons la conférence de PyCon JP 2016

(C'est juste une blague)

Le thème de cette année pour PyCon est "Tout le monde est différent, tout le monde est bon".

Alors, choisissons une conférence qui intègre tous les éléments. Utilisez le problème de couverture collective dans l'optimisation des combinaisons (http://qiita.com/Tsutomu-KKE@github/items/bfbf4c185ed7004b5721).

Créer des candidats à la conférence au hasard

La nationalité de l'orateur, le niveau de la conférence, le domaine de la conférence, etc. sont créés au hasard. Le score est, par exemple, le nombre de "j'aime".

python


import numpy as np, pandas as pd
np.random.seed(1)
n = 20
a = pd.DataFrame({
        'Pays': np.random.choice('アメリカ イギリス インド フランス ロシア 中Pays'.split(), n),
        'niveau': np.random.choice('Débutant Intermédiaire Avancé'.split(), n),
        'Champ': np.random.choice('Optimisation de l'analyse des données Web de document d'apprentissage automatique'.split(), n),
        'But': np.random.randint(1, 10, n),
    })
print(a)
niveau Champ Pays But
0 Débutant Web Chine
1 Avancée optimisation France
2 Débutant L'analyse des données Russie
... ... ... ...
19 Débutant L'analyse des données France

Résoudre le problème de recouvrement collectif

Utilisez ortoolpy.set_covering. Puisqu'il s'agit d'une minimisation, nous avons pondéré l'inverse du score.

python


from ortoolpy import set_covering
n = sum(b.nunique() for b in [a.niveau, a.Champ, a.Pays]) #Numéro unique total
res = set_covering(n, [(1/r.But, r[:3].tolist()) for _, r in a.iterrows()])
print(a.ix[res])
niveau Champ Pays But
5 Avancée Apprentissage automatique France
8 Intermédiaire document Amérique
10 Débutant optimisation Russie
13 Intermédiaire L'analyse des données Angleterre
14 Intermédiaire optimisation Inde
16 Avancée Web Chine

Vous pouvez voir que tous les éléments sont apparus.

c'est tout

Recommended Posts