Résolu "Algorithme amélioré qui détermine automatiquement la main de" Mirijan "" en utilisant Optimisation de combinaison en Python. Je l'ai essayé.
Utilisez le modèle 2 de l'article d'origine.
#Motif 2
hands = ['Haruka', 'Chihaya', 'Miki', 'vrai', 'Takane', 'Yayoi', 'Festival', 'vrai美', 'Emilie', 'Suis-je', 'Momoko', 'Iori', 'Élevage']
hand_unit_list = [
{'member': {'Iori', 'Emilie'}, 'name': 'little trip around the world'},
{'member': {'Emilie', 'Festival'}, 'name': 'Charlotte Charlotte'},
{'member': {'Mami', 'Yayoi'}, 'name': 'Veut →'},
{'member': {'Chihaya', 'Haruka'}, 'name': 'CRIMSON LOVERS'},
{'member': {'Miki', 'Iori'}, 'name': "Premier Don't worry"},
{'member': {'Élevage', 'Iori', 'Momoko'}, 'name': 'Kyun! Fille vampire'},
{'member': {'vrai', 'Iori', 'Yayoi'}, 'name': 'Prince en attente'},
{'member': {'Miki', 'Iori', 'Takane'}, 'name': '99 Nights'},
{'member': {'vrai', 'vrai美', 'Haruka'}, 'name': 'Ne fleurissez pas! !! Maiden Juku'},
{'member': {'Miki', 'Chihaya', 'Haruka'}, 'name': 'Fate of the World'},
{'member': {'Mami', 'Suis-je', 'Yayoi'}, 'name': 'Funny Logic'},
{'member': {'Miki', 'Mami', 'Suis-je', 'Iori'}, 'name': 'Stepper Hoshisai'},
{'member': {'Miki', 'Haruka', 'vrai', 'Chihaya', 'Yayoi'}, 'name': 'Joyeux'},
{'member': {'Miki', 'Haruka', 'vrai', 'Chihaya', 'Emilie'}, 'name': 'World changer'},
{'member': {'Iori', 'Haruka', 'vrai', 'vrai美', 'Suis-je'}, 'name': 'Miracle Night'},
{'member': {'Miki', 'Takane', 'vrai', 'vrai美', 'Yayoi', 'Suis-je'}, 'name': 'SHOW à The Live Revolution!'}
]
Résolvons-le comme Problème d'enchères combinées.
import pandas as pd
from pulp import lpSum
from ortoolpy import model_max, addbinvars, addvals
df = pd.DataFrame([hand_unit['name'] for hand_unit in hand_unit_list],
columns=['name'])
for hand in hands:
df[hand] = False
for i, hand_unit in enumerate(hand_unit_list):
for member in hand_unit['member']:
df.loc[i, member] = True
addbinvars(df)
m = model_max()
m += lpSum(df.Var)
for hand in hands:
m += lpSum(df[df[hand] == True].Var) <= 1
m.solve()
addvals(df)
print(df[df.Val > 0])
name | Haruka | Chihaya | Miki | vrai | Takane | Yayoi | Festival | Mami | Emilie | Suis-je | Momoko | Iori | Élevage | Var | Val | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Charlotte Charlotte | False | False | False | False | False | False | True | False | True | False | False | False | False | v000002 | 1 |
2 | Veut → | False | False | False | False | False | True | False | True | False | False | False | False | False | v000003 | 1 |
3 | CRIMSON LOVERS | True | True | False | False | False | False | False | False | False | False | False | False | False | v000004 | 1 |
5 | Kyun! Fille vampire | False | False | False | False | False | False | False | False | False | False | True | True | True | v000006 | 1 |
J'ai obtenu le même résultat que l'article original.
Recommended Posts