Vous êtes ingénieur en inspection de fabrication. J'ai 100 données de mesure obtenues à partir d'un certain capteur. En raison de diverses circonstances, je voudrais montrer que ces données de mesure ** "peuvent varier" **. Je veux maximiser la dispersion en choisissant 10 sur 100. Cependant, je veux dire que le capteur est normal, donc je veux le rendre ** "la valeur moyenne est exacte" **.
Créez des données de mesure avec des nombres aléatoires.
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np, pandas as pd
np.random.seed(1)
données de mesure= np.random.normal(50,1,100)
plt.hist(données de mesure)
print('écart-type',données de mesure.std())
>>>
Écart type 0.885156213832
Maximisez la distribution. Normalement, il est difficile à résoudre car il s'agit d'une optimisation quadratique entière. En supposant que la moyenne est exacte, $ (valeur-moyenne) ^ 2 $ est une valeur fixe, donc le modèle est une optimisation linéaire ou mixte.
from pulp import *
from ortoolpy import addbinvars
Nombre de sélections= 10
eps = 0.0001
m = LpProblem(sense=LpMaximize)
x = addbinvars(len(données de mesure))
m += lpDot((données de mesure-50)**2, x)
m += lpSum(x) ==Nombre de sélections
e = lpDot(données de mesure, x) /Nombre de sélections
m += 50-eps <= e
m += e <= 50+eps
m.solve()
%time m.solve() #Solution
r = np.vectorize(value)(x).astype(int) #résultat
print(LpStatus[m.status])
>>>
Wall time: 181 ms
Optimal
print('moyenne',données de mesure[r>0].mean())
print('écart-type',données de mesure[r>0].std())
>>>
49 en moyenne.9999119632
Écart type 1.82811635001
La moyenne était exacte et l'écart type était plus du double des données d'origine.
c'est tout
Recommended Posts