public Simulator(string path)
        {
            graph     = new FileParser().ParseFile(path);
            network   = new BayesianNetwork(graph);
            evidences = new List <Evidence>();

            commandsMapper = new[]
            {
                UserAction.Of("Reset", Reset),
                UserAction.Of("Add Evidence", AddEvidence),
                UserAction.Of("Probabilistic Reasoning", ProbabilisticReasoning),
                UserAction.Of("Quit", Quit)
            };

            probabilisticReasoning = new[]
            {
                UserFunction.Of("What is the probability that each of the vertices contains evacuees?", () => QueryNodes(network.EvacueeNodes)),
                UserFunction.Of("What is the probability that each of the vertices is flooded?", () => QueryNodes(network.FloodingNodes)),
                UserFunction.Of("What is the probability that each of the edges is blocked?", () => QueryNodes(network.BlockageNodes)),
                UserFunction.Of("What is the probability that a certain path is free from blockages?", IsPathFree),
                UserFunction.Of(
                    "What is the path from a given location to a goal that has the highest probability of being free from blockages?",
                    BestPath),
                UserFunction.Of("All", () =>
                                probabilisticReasoning[0].Action()
                                .Concat(probabilisticReasoning[1].Action()).ToList()
                                .Concat(probabilisticReasoning[2].Action()).ToList())
            };

            Start();
        }