public FSMNet <TInput, TOutput> Solve() { if (FSM == null) { throw new NullReferenceException(); } FSMNet <TInput, TOutput> result = null; try { RefreshWorkSets(); result = new FSMNet <TInput, TOutput>(FSM); result.DecomposeAlg = this; foreach (var pi in PIs) { result.AddToEnd(new FSMNet <TInput, TOutput> .NetComponent(new ComponentFSM <TInput, TOutput>(this, pi.Value, FSM.InitialState, pi.Key)) { }); } } catch (Exception exc) { EPSs.Clear(); TAUs.Clear(); Ns.Clear(); TTs.Clear(); throw exc; } if (result != null) { result.FSM.CalcIsProbabilityMachine(); } return(result); }