/// <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)); }
/// <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)); }
/// <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)); }
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(); }
public static int NextId(this FaultTree.FaultTree ft) { return(ft.Reduce(new FaultTreeMaxIdTransformer()) + 1); }
public static int NextBasicEvent(this FaultTree.FaultTree ft) { return(ft.Reduce(new MaxTerminalTransformer()) + 1); }
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);