  Cyber-physical systems come with increasingly complex architectures and
failure modes, which complicates the task of obtaining accurate system
reliability models. At the same time, with the emergence of the (industrial)
Internet-of-Things, systems are more and more often being monitored via
advanced sensor systems. These sensors produce large amounts of data about the
components' failure behaviour, and can, therefore, be fruitfully exploited to
learn reliability models automatically. This paper presents an effective
algorithm for learning a prominent class of reliability models, namely fault
trees, from observational data. Our algorithm is evolutionary in nature; i.e.,
is an iterative, population-based, randomized search method among fault-tree
structures that are increasingly more consistent with the observational data.
We have evaluated our method on a large number of case studies, both on
synthetic data, and industrial data. Our experiments show that our algorithm
outperforms other methods and provides near-optimal results.
