Sie sind Inspektionsingenieur eines Herstellers. Ich habe 100 Messdaten von einem bestimmten Sensor erhalten. Aufgrund verschiedener Umstände möchte ich zeigen, dass diese Messdaten ** "variieren können" **. Ich möchte die Streuung maximieren, indem ich 10 von 100 auswähle. Ich möchte jedoch sagen, dass der Sensor normal ist, also möchte ich ihn ** "Durchschnittswert ist genau" ** machen.
Erstellen Sie Messdaten mit Zufallszahlen.
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np, pandas as pd
np.random.seed(1)
Messdaten= np.random.normal(50,1,100)
plt.hist(Messdaten)
print('Standardabweichung',Messdaten.std())
>>>
Standardabweichung 0.885156213832
Maximieren Sie die Verteilung. Normalerweise ist es schwierig zu lösen, da es sich um eine quadratische Ganzzahloptimierung handelt. Unter der Annahme, dass der Mittelwert genau ist, ist $ (Wertmittelwert) ^ 2 $ ein fester Wert, sodass das Modell eine lineare oder gemischte Ganzzahloptimierung ist.
from pulp import *
from ortoolpy import addbinvars
Anzahl der Auswahlen= 10
eps = 0.0001
m = LpProblem(sense=LpMaximize)
x = addbinvars(len(Messdaten))
m += lpDot((Messdaten-50)**2, x)
m += lpSum(x) ==Anzahl der Auswahlen
e = lpDot(Messdaten, x) /Anzahl der Auswahlen
m += 50-eps <= e
m += e <= 50+eps
m.solve()
%time m.solve() #Lösung
r = np.vectorize(value)(x).astype(int) #Ergebnis
print(LpStatus[m.status])
>>>
Wall time: 181 ms
Optimal
print('durchschnittlich',Messdaten[r>0].mean())
print('Standardabweichung',Messdaten[r>0].std())
>>>
49 im Durchschnitt.9999119632
Standardabweichung 1.82811635001
Der Durchschnitt war genau und die Standardabweichung war mehr als doppelt so hoch wie die ursprünglichen Daten.
das ist alles
Recommended Posts