테스트에 리소스 할당
이게 뭐야
당신은 소프트웨어 시험 담당입니다. 소프트웨어는 4개의 모듈로 이루어져 있습니다.
또한 테스트는 A, B, C, D, E의 다섯 가지 범주로 나뉩니다.
자, 당신은 어떤 카테고리의 테스트를 어떤 비율로 할지 결정해야합니다.
정책
과거의 경험에서 모듈과 테스트의 상관 관계가 표 A에 주어진다고 가정한다.
이 때, 각 테스트를 백분율 $p$ 로 실시했을 때, 모듈 1 에서의 장해의 발견 확률은, $A_1 \cdot p$ 로 구해지는 것으로 합니다.
데이터 작성
난수로 표 A를 만듭니다.
python3import numpy as np, pandas as pd
from pulp import *
from ortoolpy import addvar, addvars
np.random.seed(4)
nm, nt = 4, 5 # モジュール数、テスト数
A = pd.DataFrame(np.maximum(np.random.normal
(-0.05,0.2,(nt,nm)), np.zeros((nt,nm))),
columns=['モジュール%d'%(i+1) for i in range(nm)],
index=['テスト%s'%chr(i+65) for i in range(nt)])
print(A)
발견 확률
모듈 1
모듈 2
모듈 3
모듈 4
테스트 A
0.000000
0.049990
0.000000
0.088720
테스트 B
0.000000
0.000000
0.000000
0.069715
테스트 C
0.016450
0.000000
0.073734
0.000000
테스트 D
0.035014
0.016451
0.000000
0.020199
테스트 E
0.000000
0.259396
0.094668
0.000000
계산 그 1
전체 합계를 극대화하기 위해 파이썬으로 계산해 보겠습니다.
python3m = LpProblem(sense=LpMaximize) # 数理モデル
x = addvars(nt) # 変数(テストの割合)
m += lpDot(A.sum(1),x) # 目的関数
m += lpSum(x) == 1
m.solve()
r = np.vectorize(value)(x)
print('%s 総和 %.4f 最低 %.4f'%(LpStatus[m.status],
r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
print('%sの作業量 %.4f'%(i,v))
>>>
Optimal 総和 0.3541 最低 0.0000
テストAの作業量 0.0000
テストBの作業量 0.0000
テストCの作業量 0.0000
テストDの作業量 0.0000
テストEの作業量 1.0000
가장 효율적인 테스트 E만 하는 결과가 되었습니다.
검토
테스트 E에서는 모듈 1과 모듈 2의 장애를 발견할 수 없습니다.
품질 보증이란 어떤 최저 라인의 품질을 담보하는 것으로 생각됩니다.
'계산 그 1'에서는 붉은 분포와 같이 평균적인 품질이 올라가도록 테스트를 합니다만, 저품질이 될 가능성을 남기고 있습니다.
``계산 2''로서 파란색 분포와 같이 평균 품질을 높이는 대신 저품질을 피하는 테스트를 생각해 봅시다.
계산 2
모듈 당 품질의 최소값을 극대화하기 위해 계산해 봅시다.
python3m = LpProblem(sense=LpMaximize) # 数理モデル
x = addvars(nt) # 変数(テストの割合)
y = addvar() # 変数(最低ライン)
m += y + lpDot(A.sum(1),x)*0.01 # 目的関数
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 総和 %.4f 最低 %.4f'%(LpStatus[m.status],
r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
print('%sの作業量 %.4f'%(i,v))
>>>
Optimal 総和 0.0948 最低 0.0237
テストAの作業量 0.1434
テストBの作業量 0.0000
テストCの作業量 0.2838
テストDの作業量 0.5435
テストEの作業量 0.0293
그 1과 비교해, 총화는 내려갔습니다만, 최저가 올랐습니다.
이 아이디어는 "조합 최적으로 게임 이론을 풀다"과 동일합니다.
이상
Reference
이 문제에 관하여(테스트에 리소스 할당), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SaitoTsutomu/items/5a851cfcaa1c3ba82976
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
과거의 경험에서 모듈과 테스트의 상관 관계가 표 A에 주어진다고 가정한다.
이 때, 각 테스트를 백분율 $p$ 로 실시했을 때, 모듈 1 에서의 장해의 발견 확률은, $A_1 \cdot p$ 로 구해지는 것으로 합니다.
데이터 작성
난수로 표 A를 만듭니다.
python3import numpy as np, pandas as pd
from pulp import *
from ortoolpy import addvar, addvars
np.random.seed(4)
nm, nt = 4, 5 # モジュール数、テスト数
A = pd.DataFrame(np.maximum(np.random.normal
(-0.05,0.2,(nt,nm)), np.zeros((nt,nm))),
columns=['モジュール%d'%(i+1) for i in range(nm)],
index=['テスト%s'%chr(i+65) for i in range(nt)])
print(A)
발견 확률
모듈 1
모듈 2
모듈 3
모듈 4
테스트 A
0.000000
0.049990
0.000000
0.088720
테스트 B
0.000000
0.000000
0.000000
0.069715
테스트 C
0.016450
0.000000
0.073734
0.000000
테스트 D
0.035014
0.016451
0.000000
0.020199
테스트 E
0.000000
0.259396
0.094668
0.000000
계산 그 1
전체 합계를 극대화하기 위해 파이썬으로 계산해 보겠습니다.
python3m = LpProblem(sense=LpMaximize) # 数理モデル
x = addvars(nt) # 変数(テストの割合)
m += lpDot(A.sum(1),x) # 目的関数
m += lpSum(x) == 1
m.solve()
r = np.vectorize(value)(x)
print('%s 総和 %.4f 最低 %.4f'%(LpStatus[m.status],
r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
print('%sの作業量 %.4f'%(i,v))
>>>
Optimal 総和 0.3541 最低 0.0000
テストAの作業量 0.0000
テストBの作業量 0.0000
テストCの作業量 0.0000
テストDの作業量 0.0000
テストEの作業量 1.0000
가장 효율적인 테스트 E만 하는 결과가 되었습니다.
검토
테스트 E에서는 모듈 1과 모듈 2의 장애를 발견할 수 없습니다.
품질 보증이란 어떤 최저 라인의 품질을 담보하는 것으로 생각됩니다.
'계산 그 1'에서는 붉은 분포와 같이 평균적인 품질이 올라가도록 테스트를 합니다만, 저품질이 될 가능성을 남기고 있습니다.
``계산 2''로서 파란색 분포와 같이 평균 품질을 높이는 대신 저품질을 피하는 테스트를 생각해 봅시다.
계산 2
모듈 당 품질의 최소값을 극대화하기 위해 계산해 봅시다.
python3m = LpProblem(sense=LpMaximize) # 数理モデル
x = addvars(nt) # 変数(テストの割合)
y = addvar() # 変数(最低ライン)
m += y + lpDot(A.sum(1),x)*0.01 # 目的関数
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 総和 %.4f 最低 %.4f'%(LpStatus[m.status],
r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
print('%sの作業量 %.4f'%(i,v))
>>>
Optimal 総和 0.0948 最低 0.0237
テストAの作業量 0.1434
テストBの作業量 0.0000
テストCの作業量 0.2838
テストDの作業量 0.5435
テストEの作業量 0.0293
그 1과 비교해, 총화는 내려갔습니다만, 최저가 올랐습니다.
이 아이디어는 "조합 최적으로 게임 이론을 풀다"과 동일합니다.
이상
Reference
이 문제에 관하여(테스트에 리소스 할당), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SaitoTsutomu/items/5a851cfcaa1c3ba82976
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import numpy as np, pandas as pd
from pulp import *
from ortoolpy import addvar, addvars
np.random.seed(4)
nm, nt = 4, 5 # モジュール数、テスト数
A = pd.DataFrame(np.maximum(np.random.normal
(-0.05,0.2,(nt,nm)), np.zeros((nt,nm))),
columns=['モジュール%d'%(i+1) for i in range(nm)],
index=['テスト%s'%chr(i+65) for i in range(nt)])
print(A)
전체 합계를 극대화하기 위해 파이썬으로 계산해 보겠습니다.
python3
m = LpProblem(sense=LpMaximize) # 数理モデル
x = addvars(nt) # 変数(テストの割合)
m += lpDot(A.sum(1),x) # 目的関数
m += lpSum(x) == 1
m.solve()
r = np.vectorize(value)(x)
print('%s 総和 %.4f 最低 %.4f'%(LpStatus[m.status],
r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
print('%sの作業量 %.4f'%(i,v))
>>>
Optimal 総和 0.3541 最低 0.0000
テストAの作業量 0.0000
テストBの作業量 0.0000
テストCの作業量 0.0000
テストDの作業量 0.0000
テストEの作業量 1.0000
가장 효율적인 테스트 E만 하는 결과가 되었습니다.
검토
테스트 E에서는 모듈 1과 모듈 2의 장애를 발견할 수 없습니다.
품질 보증이란 어떤 최저 라인의 품질을 담보하는 것으로 생각됩니다.
'계산 그 1'에서는 붉은 분포와 같이 평균적인 품질이 올라가도록 테스트를 합니다만, 저품질이 될 가능성을 남기고 있습니다.
``계산 2''로서 파란색 분포와 같이 평균 품질을 높이는 대신 저품질을 피하는 테스트를 생각해 봅시다.
계산 2
모듈 당 품질의 최소값을 극대화하기 위해 계산해 봅시다.
python3m = LpProblem(sense=LpMaximize) # 数理モデル
x = addvars(nt) # 変数(テストの割合)
y = addvar() # 変数(最低ライン)
m += y + lpDot(A.sum(1),x)*0.01 # 目的関数
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 総和 %.4f 最低 %.4f'%(LpStatus[m.status],
r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
print('%sの作業量 %.4f'%(i,v))
>>>
Optimal 総和 0.0948 最低 0.0237
テストAの作業量 0.1434
テストBの作業量 0.0000
テストCの作業量 0.2838
テストDの作業量 0.5435
テストEの作業量 0.0293
그 1과 비교해, 총화는 내려갔습니다만, 최저가 올랐습니다.
이 아이디어는 "조합 최적으로 게임 이론을 풀다"과 동일합니다.
이상
Reference
이 문제에 관하여(테스트에 리소스 할당), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SaitoTsutomu/items/5a851cfcaa1c3ba82976
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
모듈 당 품질의 최소값을 극대화하기 위해 계산해 봅시다.
python3
m = LpProblem(sense=LpMaximize) # 数理モデル
x = addvars(nt) # 変数(テストの割合)
y = addvar() # 変数(最低ライン)
m += y + lpDot(A.sum(1),x)*0.01 # 目的関数
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 総和 %.4f 最低 %.4f'%(LpStatus[m.status],
r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
print('%sの作業量 %.4f'%(i,v))
>>>
Optimal 総和 0.0948 最低 0.0237
テストAの作業量 0.1434
テストBの作業量 0.0000
テストCの作業量 0.2838
テストDの作業量 0.5435
テストEの作業量 0.0293
그 1과 비교해, 총화는 내려갔습니다만, 최저가 올랐습니다.
이 아이디어는 "조합 최적으로 게임 이론을 풀다"과 동일합니다.
이상
Reference
이 문제에 관하여(테스트에 리소스 할당), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SaitoTsutomu/items/5a851cfcaa1c3ba82976텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)