Sie sind ein Software-Tester. Die Software besteht aus vier Modulen. Die Tests sind auch in fünf Kategorien unterteilt: A, B, C, D und E.
Jetzt müssen Sie entscheiden, welche Kategorie von Tests mit welcher Geschwindigkeit durchgeführt werden soll.
Aus früheren Erfahrungen wird angenommen, dass die Korrelation zwischen Modulen und Tests in Tabelle A angegeben ist. Zu diesem Zeitpunkt, wenn jeder Test in einem Verhältnis von $ p $ durchgeführt wird, wird die Fehlererkennungswahrscheinlichkeit in Modul 1 mit $ A_1 \ cdot p $ berechnet.
Machen Sie Tabelle A mit Zufallszahlen.
python3
import numpy as np, pandas as pd
from pulp import *
from ortoolpy import addvar, addvars
np.random.seed(4)
nm, nt = 4, 5 #Anzahl der Module, Anzahl der Tests
A = pd.DataFrame(np.maximum(np.random.normal
(-0.05,0.2,(nt,nm)), np.zeros((nt,nm))),
columns=['Modul%d'%(i+1) for i in range(nm)],
index=['Prüfung%s'%chr(i+65) for i in range(nt)])
print(A)
Entdeckungswahrscheinlichkeit th> | Modul 1 th> | Modul 2 th> | Modul 3 th> | Modul 4 th> |
---|---|---|---|---|
Test A th> | 0.000000 | 0.049990 | 0.000000 | 0.088720 |
Test B th> | 0.000000 | 0.000000 | 0.000000 | 0.069715 |
Test C th> | 0.016450 | 0.000000 | 0.073734 | 0.000000 |
Test D th> | 0.035014 | 0.016451 | 0.000000 | 0.020199 |
Test E th> | 0.000000 | 0.259396 | 0.094668 | 0.000000 |
Berechnen wir in Python, um die Gesamtsumme zu maximieren.
python3
m = LpProblem(sense=LpMaximize) #Mathematisches Modell
x = addvars(nt) #Variable(Testprozentsatz)
m += lpDot(A.sum(1),x) #Zielfunktion
m += lpSum(x) == 1
m.solve()
r = np.vectorize(value)(x)
print('%s Summe%.4f Minimum%.4f'%(LpStatus[m.status],
r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
print('%Arbeitsbelastung von s%.4f'%(i,v))
>>>
Optimale Summe 0.3541 Minimum 0.0000
Test A Workload 0.0000
Test B Workload 0.0000
Test C Workload 0.0000
Test D Workload 0.0000
Test E Workload 1.0000
Das Ergebnis ist, dass nur der effizienteste Test E durchgeführt wird.
Test E kann keine Fehler in Modul 1 und Modul 2 finden. Qualitätssicherung garantiert die Qualität einer bestimmten Mindestlinie.
In "Berechnung Nr. 1" testen wir, um die durchschnittliche Qualität wie die Verteilung von Rot zu verbessern, aber wir haben immer noch die Möglichkeit einer geringen Qualität. Betrachten Sie als "Berechnung Nr. 2" einen Test, bei dem eine geringe Qualität vermieden wird, anstatt die durchschnittliche Qualität wie in der blauen Verteilung zu erhöhen.
Berechnen wir, um die Mindestqualität pro Modul zu maximieren.
python3
m = LpProblem(sense=LpMaximize) #Mathematisches Modell
x = addvars(nt) #Variable(Testprozentsatz)
y = addvar() #Variable(Niedrigste Linie)
m += y + lpDot(A.sum(1),x)*0.01 #Zielfunktion
m += lpSum(x) == 1
for j in range(nm):
m += y <= lpDot(A.ix[:,j],x)
m.solve()
r = np.vectorize(value)(x)
print('%s Summe%.4f Minimum%.4f'%(LpStatus[m.status],
r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
print('%Arbeitsbelastung von s%.4f'%(i,v))
>>>
Optimale Summe 0.0948 Minimum 0.0237
Test A Workload 0.1434
Test B Workload 0.0000
Test C Workload 0.2838
Test D Workload 0.5435
Test E Workload 0.0293
Im Vergleich zu Teil 1 war die Gesamtzahl niedriger, aber die niedrigste höher.
Diese Idee ist dieselbe wie "Spieltheorie mit optimaler Kombination lösen".
das ist alles
Recommended Posts