[PYTHON] Allez voir les baleines avec l'optimisation des combinaisons

Qu'est-ce que c'est

Vous allez voir des baleines pendant les vacances d'été. Utilisez Optimisation de combinaison pour déterminer lequel des huit points choisir.

Afficher les informations de point avec python


import numpy as np, pandas as pd
from pulp import *
from ortoolpy import addbinvars
n = 8 #points
np.random.seed(639)
df = pd.DataFrame(np.random.rand(n,2).round(2)*[0.2,100], columns=['Prob','Time'])
df.insert(0,'Place', [chr(i+65) for i in range(n)])
print(df)
Place Prob Time
0 A 0.082 57.0
1 B 0.182 93.0
2 C 0.184 89.0
3 D 0.108 51.0
4 E 0.104 5.0
5 F 0.152 83.0
6 G 0.178 83.0
7 H 0.156 16.0

L'endroit représente le ** nom ** du point, Prob représente la ** probabilité ** de voir la baleine et le temps représente le ** temps ** (minutes) nécessaire pour se déplacer et observer le point.

Problème 1

Maximiser la somme des ** probabilités ** dans le temps total ** 140 minutes **

Réponse 1

Problème de sac à dos, résolvons-le rapidement.

python


m = LpProblem(sense=LpMaximize)
df['Var'] = addbinvars(n)
m += lpDot(df.Prob,df.Var)
m += lpDot(df.Time,df.Var) <= 140
m.solve()
df['Val'] = df.Var.apply(value)
print('%s found. Ave prob. = %.3f, Any prob. = %.3f'%(LpStatus[m.status],
      df[df.Val>0].Prob.sum(), 1-(1-df[df.Val>0].Prob).prod()))
print(df[df.Val>0])

résultat


Optimal found. Ave prob. = 0.450, Any prob. = 0.381
  Place   Prob  Time    Var  Val
0     A  0.082  57.0  v0001  1.0
3     D  0.108  51.0  v0004  1.0
4     E  0.104   5.0  v0005  1.0
7     H  0.156  16.0  v0008  1.0

Le nombre de fois prévu pour voir des baleines est de 0,45. Cependant, la probabilité de le voir plus d'une fois est de 0,381.

Problème n ° 2

Maximisez la probabilité de voir plus d'une fois dans le temps total ** 140 minutes **

Réponse 2

La probabilité de ne pas le voir même une fois est $ \ prod_i {(1-Prob_i)} $. En l'état, il n'est pas linéaire, mais linéarisons-le en utilisant $ \ log $ (qui est une fonction monotone).

python


m = LpProblem(sense=LpMaximize)
df['Var'] = addbinvars(n)
m += -lpDot(np.log(1-df.Prob),df.Var)
m += lpDot(df.Time,df.Var) <= 140
m.solve()
df['Val'] = df.Var.apply(value)
print('%s found. Ave prob. = %.3f, Any prob. = %.3f'%(LpStatus[m.status],
      df[df.Val>0].Prob.sum(), 1-(1-df[df.Val>0].Prob).prod()))
print(df[df.Val>0])

résultat


Optimal found. Ave prob. = 0.444, Any prob. = 0.383
  Place   Prob  Time    Var  Val
2     C  0.184  89.0  v0011  1.0
4     E  0.104   5.0  v0013  1.0
7     H  0.156  16.0  v0016  1.0

La probabilité de le voir plus d'une fois a légèrement augmenté de 0,381 à 0,383.

c'est tout

Recommended Posts

Allez voir les baleines avec l'optimisation des combinaisons
Jeux de regroupement avec optimisation des combinaisons
Optimisation combinée avec recuit quantique
Maximisez les ventes des restaurants grâce à l'optimisation combinée
Paver la route avec l'optimisation des combinaisons
Résolution de la théorie des jeux avec l'optimisation des combinaisons
Empilons les livres à plat avec l'optimisation des combinaisons
Résolution des problèmes de planification des infirmières grâce à l'optimisation des combinaisons
Python avec Go
Utiliser l'optimisation des combinaisons
Créer un programme académique avec optimisation des combinaisons
Résolution des problèmes d'organisation des districts scolaires grâce à l'optimisation des combinaisons
Résolution du problème N Queen avec l'optimisation continue / combinée
Résolution du problème N Queen avec l'optimisation des combinaisons
Aménagement routier par optimisation
Optimisation du regroupement par combinaison
Introduction à l'optimisation
Essayez l'optimisation des fonctions avec Optuna
Faire fonctionner le conteneur Db2 avec Go
Premiers pas avec Go Assembly
Enquête Star avec optimisation des combinaisons
Recherche de bits complète avec Go
Connectez-vous à Postgresql avec GO
Restaurez les photos décousues avec l'optimisation!
Optimisation globale à usage général avec Z3
Essayez d'implémenter le parfum avec Go
Ajuster les hyper paramètres avec l'optimisation bayésienne
Résolution des problèmes de sac à dos avec les outils OR de Google - Pratiquer les bases des problèmes d'optimisation combinée