Redundancy strategies assessment and optimization of k-out-of-n systems based on Markov chains and genetic algorithms