Beispiel #1
0
        public ProcessChain(EpistemicModel epistemicModel)
        {
            _epistemicModel = epistemicModel;
            _epistemicModel.GenerateAllActionModelsFromInfos();
            _actionModels = _epistemicModel.GetActionModels();
            ModelConfiguration rawModel = CreateNewModel("RawModel");

            rawModel.CopyFrom(_epistemicModel.GeneratRawModelConfiguration("RawModel"));
        }
Beispiel #2
0
        public static EpistemicModel FromText(ref string[] lines)
        {
            EpistemicModel model = new EpistemicModel();

            try
            {
                int lineNum = 0;
                if (lines[lineNum++] == "START_AGENTS")
                {
                    int agentCount = int.Parse(lines[lineNum++]);
                    int i;
                    for (i = lineNum; i < agentCount + lineNum; i++)
                    {
                        model.AddAgent(lines[i]);
                    }
                    lineNum = i;
                    if (lines[lineNum++] != "END_AGENTS")
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }
                if (lines[lineNum++] == "START_ATOMICS")
                {
                    int atomicCount = int.Parse(lines[lineNum++]);
                    int i;
                    for (i = lineNum; i < atomicCount + lineNum; i++)
                    {
                        model.AddAtomic(lines[i]);
                    }
                    lineNum = i;
                    if (lines[lineNum++] != "END_ATOMICS")
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }


                if (lines[lineNum++] == "START_ANN_INFO")
                {
                    int infoCount = int.Parse(lines[lineNum++]);
                    for (int i = 0; i < infoCount; i++)
                    {
                        if (lines[lineNum] == "Secret")
                        {
                            lineNum++;
                            SecretAnnouncementInfo info = new SecretAnnouncementInfo();
                            string infoName             = lines[lineNum++];
                            info.Announcement.Expression = lines[lineNum++];
                            int audienceCount = int.Parse(lines[lineNum++]);
                            for (int j = 0; j < audienceCount; j++)
                            {
                                info.AddNewAudience(lines[lineNum++]);
                            }
                            model._secretAnnouncementInfos.Add(infoName, info);
                        }
                        else if (lines[lineNum] == "Public")
                        {
                            lineNum++;
                            PublicAnnouncementInfo info = new PublicAnnouncementInfo();
                            string infoName             = lines[lineNum++];
                            info.Announcement.Expression = lines[lineNum++];
                            int audienceCount = int.Parse(lines[lineNum++]);
                            for (int j = 0; j < audienceCount; j++)
                            {
                                info.AddNewAudience(lines[lineNum++]);
                            }
                            model._publicAnnouncementInfos.Add(infoName, info);
                        }
                    }
                    if (lines[lineNum++] != "END_ANN_INFO")
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }

                List <string> newData = lines.ToList();
                newData.RemoveRange(0, lineNum);
                lines = newData.ToArray();
            }
            catch (FormatException)
            {
                return(null);
            }
            catch (IndexOutOfRangeException)
            {
                return(null);
            }

            return(model);
        }
Beispiel #3
0
 public ProcessChain()
 {
     _epistemicModel = new EpistemicModel();
 }
Beispiel #4
0
        public static ProcessChain FromText(string[] lines)
        {
            EpistemicModel epistemicModel = EpistemicModel.FromText(ref lines);

            if (epistemicModel == null)
            {
                return(null);
            }
            ProcessChain processChain = new ProcessChain(epistemicModel);
            int          ln           = 0;

            try
            {
                if (!lines.Any())
                {
                    return(processChain);
                }

                if (lines[ln++] != "START_MODEL_VARS")
                {
                    return(null);
                }
                int modelCount = int.Parse(lines[ln++]);
                for (int i = 0; i < modelCount; i++)
                {
                    processChain.CreateNewModel(lines[ln++]);
                }
                if (lines[ln++] != "END_MODEL_VARS")
                {
                    return(null);
                }

                if (lines[ln++] != "START_PROCESS")
                {
                    return(null);
                }
                int procCount = int.Parse(lines[ln++]);
                for (int i = 0; i < procCount; i++)
                {
                    string           procName = lines[ln++];
                    EpistemicProcess ep       = processChain.CreateNewProcess(procName);
                    ep.Start   = new ModelConfiguration(lines[ln++]);
                    ep.Resault = new ModelConfiguration(lines[ln++]);
                    int actionCount = int.Parse(lines[ln++]);
                    for (int j = 0; j < actionCount; j++)
                    {
                        ep.AddActionModel(processChain._actionModels[lines[ln++]]);
                    }
                }
                if (lines[ln++] != "END_PROCESS")
                {
                    return(null);
                }
            }
            catch (IndexOutOfRangeException)
            {
                return(null);
            }

            return(processChain);
        }