Beispiel #1
0
        /// <summary>
        /// Create <see cref="BinaryDecisionDiagram"/> from <see cref="FaultTreeAnalysis.FaultTree"/>.
        /// </summary>
        /// <param name="ft">
        /// The ft.
        /// </param>
        /// <returns>
        /// The <see cref="BDDNode"/>.
        /// </returns>
        public override BDDNode CreateBDD(FaultTree.FaultTree ft)
        {
            // ft = new FaultTree.FaultTree(ft.reduce<FaultTreeNode>(new AddTransformer(1)));
            BDDNodeFactory nodeFactory = new BDDNodeFactory();

            return(this.CreateBDD(ft, nodeFactory));
        }
Beispiel #2
0
        /// <summary>
        /// Converts Fault Tree to BDD.
        /// </summary>
        /// <param name="ft">
        /// The ft.
        /// </param>
        /// <returns>
        /// The <see cref="BDDNode"/>.
        /// </returns>
        public override BDDNode CreateBDD(FaultTree.FaultTree ft)
        {
            int            maxBasicEventNumber = ft.MarkovChain.InitialDistribution.Count + 1;
            BDDNodeFactory nodeFactory         = new BDDNodeFactory();

            nodeFactory.SetBasicEventCount(maxBasicEventNumber);
            return(this.CreateBDD(ft.Root, nodeFactory));
        }
Beispiel #3
0
        /// <summary>
        /// Private helper for BDD construction.
        /// </summary>
        /// <param name="ft">
        /// The ft.
        /// </param>
        /// <param name="nodeFactory">
        /// The node factory.
        /// </param>
        /// <returns>
        /// The <see cref="BDDNode"/>.
        /// </returns>
        private BDDNode CreateBDD(FaultTree.FaultTree ft, BDDNodeFactory nodeFactory)
        {
            int nextVariable = ft.Reduce(new MinTerminalTransformer());

            if (nextVariable == int.MaxValue)
            {
                // ft should consist of only terminal node
                return(nodeFactory.CreateNode(((FaultTreeLiteralNode)ft.Root).Value));
            }

            FaultTree.FaultTree high = ft.DeepCopy().Replace(nextVariable, true).Simplify();
            FaultTree.FaultTree low  = ft.DeepCopy().Replace(nextVariable, false).Simplify();

            BDDNode highNode = this.CreateBDD(high, nodeFactory);
            BDDNode lowNode  = this.CreateBDD(low, nodeFactory);

            return(nodeFactory.CreateNode(nextVariable, highNode, lowNode));
        }
Beispiel #4
0
        public async void Initialize(FaultTree.FaultTree faultTree)
        {
            if (this.Timer != null)
            {
                this.Timer.IsEnabled = false;
            }
            await Task.Delay(40);

            this.Input    = faultTree.Analyze(Config.Instance.SamplingRate, Config.Instance.TimeSpan, Config.Instance.ErrorTolerance).ToList();
            this.AxisMax  = Config.Instance.TimeSpan;
            this.AxisStep = Config.Instance.TimeSpan * 0.2d;

            this.Values.Clear();

            this.Timer = new DispatcherTimer {
                Interval = TimeSpan.FromMilliseconds(2800 / this.Input.Count)
            };
            this.Timer.Tick += TimerOnTick;
            this.Timer.Start();
        }
Beispiel #5
0
 public static int NextId(this FaultTree.FaultTree ft)
 {
     return(ft.Reduce(new FaultTreeMaxIdTransformer()) + 1);
 }
Beispiel #6
0
 public static int NextBasicEvent(this FaultTree.FaultTree ft)
 {
     return(ft.Reduce(new MaxTerminalTransformer()) + 1);
 }
Beispiel #7
0
        object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var graph = new Graph <FaultTreeNode>();

            if (value == null)
            {
                return(graph);
            }

            Console.WriteLine(@"Converting tree");

            FaultTree.FaultTree  faultTree = ((FaultTree.FaultTree)value);
            List <FaultTreeNode> nodes     = faultTree.Traverse().ToList();

            foreach (FaultTreeNode n in nodes)
            {
                if (n is FaultTreeTerminalNode)
                {
                    continue;
                }
                graph.AddVertex(n);

                foreach (FaultTreeNode c in n.Childs)
                {
                    graph.AddEdge(new StyledEdge <FaultTreeNode>(n, c));
                }
            }

            var terminalNodes = nodes.OfType <FaultTreeTerminalNode>();

            var components = faultTree.MarkovChain.GetComponents(terminalNodes);

            var componentList = components as IList <IEnumerable <FaultTreeTerminalNode> > ?? components.ToList();

            foreach (var component in componentList.Where(c => c.Count() == 1))
            {
                graph.AddVertex(component.ToList()[0]);
            }

            foreach (var sub in componentList.Where(c => c.Count() > 1))
            {
                SubGraph <FaultTreeNode> subGraph = new SubGraph <FaultTreeNode>();
                sub.ToList().ForEach(vertex => subGraph.AddVertex(vertex));
                graph.AddSubGraph(subGraph);
                //sub.ToList().ForEach(vertex => graph.AddVertex(vertex));
            }


            var markovEdges = faultTree.MarkovChain.GetAllEdges();

            foreach (var mEdge in markovEdges)
            {
                var edge = new Edge <FaultTreeNode>(mEdge.Item1, mEdge.Item3, new Arrow())
                {
                    Label = faultTree.MarkovChain[mEdge.Item1, mEdge.Item3].ToString(CultureInfo.InvariantCulture)
                };
                graph.AddEdge(edge);
            }

            return(graph);
        }
 /// <summary>
 /// Creates <see cref="BinaryDecisionDiagram"/> from <see cref="FaultTreeAnalysis.FaultTree"/>
 /// </summary>
 /// <param name="ft">
 /// The ft.
 /// </param>
 /// <returns>
 /// The <see cref="BDDNode"/>.
 /// </returns>
 public abstract BDDNode CreateBDD(FaultTree.FaultTree ft);