Beispiel #1
0
        private List <Diagnosis> generateDiagsFromGrounded(List <List <Gate> > grounded)
        {
            List <Diagnosis> ans = new List <Diagnosis>();
            int numOfGroups      = 0;

            grounded.ForEach(list =>
            {
                if (list.Count > 1)
                {
                    numOfGroups++;
                }
            });
            if (numOfGroups == 0)
            {
                List <Diagnosis> diagnoses = new List <Diagnosis>();
                Diagnosis        diag      = new Diagnosis();
                grounded.ForEach(x =>
                {
                    if (x.Count == 1)
                    {
                        diag.AddCompToDiagnosis(x.First());
                    }
                });
                diagnoses.Add(diag);
                return(diagnoses);
            }
            else if (numOfGroups == 1)
            {
                List <Diagnosis> diagnoses = new List <Diagnosis>();
                List <Gate>      bigGroup  = grounded.Find(x => x.Count > 1);
                foreach (Gate g in bigGroup)
                {
                    Diagnosis diag = new Diagnosis();
                    diag.AddCompToDiagnosis(g);
                    grounded.Where(x => x.Count == 1).ToList().ForEach(x =>
                    {
                        diag.AddCompToDiagnosis(x.First());
                    });
                    diagnoses.Add(diag);
                }
                return(diagnoses);
            }
            else
            {
                List <Diagnosis>    diagnoses   = new List <Diagnosis>();
                List <Gate>         bigGroup    = grounded.Find(x => x.Count > 1);
                List <List <Gate> > newGrounded = new List <List <Gate> >(grounded);
                newGrounded.Remove(bigGroup);
                foreach (Gate g in bigGroup)
                {
                    List <Gate> single = new List <Gate>();
                    single.Add(g);
                    newGrounded.Add(single);
                    diagnoses.AddRange(generateDiagsFromGrounded(newGrounded));
                    newGrounded.Remove(single);
                }
                return(diagnoses);
            }
        }
Beispiel #2
0
        private DiagnosisSet computeNextState(List <Gate> action)
        {
            if (m_diagnoses == null || m_diagnoses.Count == 0 || action == null || action.Count == 0)
            {
                return(null);
            }
            DiagnosisSet ans = new DiagnosisSet();

            foreach (Diagnosis diag in m_diagnoses.Diagnoses)
            {
                Diagnosis toAdd = new Diagnosis();
                foreach (Gate g in diag.TheDiagnosis)
                {
                    if (!action.Contains(g))
                    {
                        toAdd.AddCompToDiagnosis(g);
                    }
                }
                if (toAdd.TheDiagnosis.Count == diag.TheDiagnosis.Count) //to save space and time
                {
                    toAdd = diag;
                }
                if (toAdd.TheDiagnosis.Count != 0)
                {
                    ans.AddDiagnosis(toAdd);
                }
            }
            return(ans);
        }
Beispiel #3
0
        private DiagnosisSet computeNextState(RepairAction action) //the resulted diagnoses could be not subset minimal!
        {
            if (m_diagnoses == null || m_diagnoses.Count == 0 || action == null || action.Count == 0)
            {
                return(null);
            }
            DiagnosisSet ans = new DiagnosisSet();

            foreach (Diagnosis diag in m_diagnoses.Diagnoses)
            {
                Diagnosis toAdd = new Diagnosis();
                foreach (Comp g in diag.Comps)
                {
                    if (!action.Contains(g))
                    {
                        toAdd.AddCompToDiagnosis(g);
                    }
                }
                if (toAdd.Comps.Count != 0)
                {
                    ans.AddDiagnosis(toAdd);
                }
            }
            return(ans);
        }
Beispiel #4
0
        public DiagnosisSet ReadTLDiagnosisFile(string fileName, Dictionary <int, Cone> conesDic)
        {
            FileStream   fs      = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            StreamReader reader  = new StreamReader(fs);
            string       allText = reader.ReadToEnd();

            fs.Close();
            reader.Close();
            fs     = null;
            reader = null;
            DiagnosisSet ans = new DiagnosisSet();

            char[] delrow = new char[2];
            delrow[0] = '\n';
            delrow[1] = '\r';
            List <string> rows = allText.Split(delrow, StringSplitOptions.RemoveEmptyEntries).ToList();

            if (rows == null || rows.Count == 0)
            {
                return(null);
            }
            foreach (string row in rows)
            {
                if (!row.StartsWith("[gate"))
                {
                    continue;
                }
                List <string> delDiag = new List <string>();
                delDiag.Add("[");
                delDiag.Add("]");
                delDiag.Add(".");
                delDiag.Add(",");
                delDiag.Add("gate");
                List <string> diagString = row.Split(delDiag.ToArray(), StringSplitOptions.RemoveEmptyEntries).ToList();
                Diagnosis     diag       = new Diagnosis();
                bool          addDiag    = true;
                foreach (string comp in diagString)
                {
                    int compId = 0;
                    if (!Int32.TryParse(comp, out compId))
                    {
                        //in case of not numeric id:
                        string toascii = "";
                        foreach (char c in comp)
                        {
                            int i = c;
                            toascii += i;
                        }
                        if (!Int32.TryParse(toascii, out compId))
                        {
                            Console.WriteLine("Parsing error");
                            return(null);
                        }
                    }
                    if (conesDic.ContainsKey(compId))
                    {
                        diag.AddCompToDiagnosis(conesDic[compId]);
                    }
                    else
                    {
                        addDiag = false;
                        break;
                    }
                }
                if (addDiag)
                {
                    ans.AddDiagnosis(diag);
                }
            }
            return(ans);
        }