-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreliability_4.py
More file actions
54 lines (46 loc) · 1.59 KB
/
reliability_4.py
File metadata and controls
54 lines (46 loc) · 1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Collective Reliability Demo - 4
import time
from random import random
# Create a random set of individual reliabilities
def make_set(num_elements: int):
element_set = []
for a in range(num_elements):
element_set.append(random())
return element_set
# Collective Reliability - Recursive with 5 rules + MEMOIZATION
def coll_rel(element_set, target: int, memory):
if target == 0: # Zero target rule
return 1.0
size_of_set = len(element_set)
if target > size_of_set: # High target rule
return 0.0
if target == size_of_set: # Equal target rule
total = 1.0
for value in element_set:
total = total * value
return total
if target == 1: # One target rule
total = 1.0
for value in element_set:
total = total * (1.0 - value)
return 1.0 - total
# Check memory
problem = (size_of_set, target)
if problem in memory:
return memory.get(problem)
# Simplification rule
elements_copy = element_set.copy()
value = elements_copy[0]
elements_copy.pop(0)
reliability: float = value * coll_rel(elements_copy, target - 1, memory) \
+ (1.0 - value) * coll_rel(elements_copy, target, memory)
memory[problem] = reliability
return reliability
# Main test loop
for size in range(100, 5001, 100):
elements = make_set(size)
start_time = time.time()
result = coll_rel(elements, size // 2, {})
complete_time = time.time() - start_time
print("Size = {}, Time = {:.2f}".format(size, complete_time))
print("The program has finished!")