Je veux avoir un rendez-vous amusant sans dépenser trop d'argent et de temps.
Budget: jusqu'à 5 000 yens à la fin du mois avant le salaire. Temps requis: en semaine et tôt le matin le lendemain, donc si vous vous réunissez à 7h00, ce sera jusqu'à 12h00. Cours: Si possible, une date de cuisson dans votre appartement est courte et facile.
J'ai résumé les cours populaires à partir de ces données statistiques, et ajouté le coût par heure et le temps requis de la règle empirique pour créer le tableau suivant au format CSV. ninki Nombre de femmes qui font 2-3 fois par mois (milliers) jikan, coût Ajouter le temps et le budget normalement requis (¥ / h) comme règle empirique Obtenez-le sous forme de DataFrame avec des pandas et intégrez-le dans le modèle d'optimisation. De plus, ninki a été traité comme une variable catégorielle par le binning comme une quantité de caractéristiques plutôt que comme une mesure un peu comme une valeur numérique.
import pandas as pd
from pulp import LpVariable,LpStatus,value
from ortoolpy import model_min
syuko = pd.read_csv('C:\StaticData\syuko.csv',index_col='estat')
ninki = []
syumi = []
for i in syuko.columns:
ninki.append(syuko.iloc[0][i])
# binning
bin=pd.cut(ninki,3,labels=False,precision=0,duplicates='drop')+1
syumi=list(syuko.columns)
dic = dict(zip(syumi,bin))
Passons maintenant à la création d'un modèle optimisé. Soit les variables x, y et z les heures programmées pour les films, le karaoké et la cuisine, respectivement. Je veux me concentrer sur la cuisine, alors augmentons la variable Z.
#Définition du modèle de minimisation
mod = model_min()
#Réglage variable
x=LpVariable('x',lowBound=0)
y=LpVariable('y',lowBound=0)
z=LpVariable('z',lowBound=0)
#Réglage de la fonction objectif
mod += syuko.iloc[2][0]*x + syuko.iloc[2][1]*y + syuko.iloc[2][2]*z
#Contraintes
mod += x + y <= 3
mod += y + z >= 3.5
mod += z + x >= 4
mod += x + y + z <= 5
#Exécution du solveur
mod.solve()
mst = mod.status
st = LpStatus[mst]
Cela signifie que la solution optimale a été obtenue lorsque Optimal a été renvoyé de LpStatus après avoir changé diverses conditions de contrainte. Il est donc intéressant de l'utiliser comme simulateur. Au fait Impossible si Infensible est retourné Unbounded est illimité (une solution illimitée et optimale peut être améliorée) Optimal produit la combinaison du coût et du temps requis pour la solution optimale.
#Sortie de solution optimale
if st=='Optimal' and value(mod.objective) < 5000:
print("Budget optimal" + str(value(mod.objective))+"Cercle")
plist=[]
con=0
for k,v in dic.items():
print(k,"Niveau de recommandation",v,"Temps de trajet efficace",value(mod.variables()[con]),"h")
con += 1
Résultat de sortie Il semble que la cuisine coûtera 3320 yens pour 4 heures à la maison! (Est-ce que ça marche?)
Recommended Posts