Exemplo n.º 1
0
        public bool SaveActionMemories(string fileName, ICollection <IActionMemory> actionMemories)
        {
            StringBuilder fileContent = new StringBuilder();

            foreach (IActionMemory actionMemory in actionMemories)
            {
                fileContent.AppendLine(FileActionMemory.Convert(actionMemory));
            }

            System.IO.File.WriteAllText(fileName, fileContent.ToString());
            return(true);
        }
Exemplo n.º 2
0
        static public IList <IActionMemory> Parse(IList <string> lines, ICollection <IActionMemory> actionMemories)
        {
            _fileActionMemories.Clear();
            if (actionMemories != null)
            {
                foreach (var actionMemory in actionMemories)
                {
                    if (!(actionMemory is FileActionMemory fileActionMemory))
                    {
                        fileActionMemory = new FileActionMemory(actionMemory);
                    }
                    _fileActionMemories.Add(fileActionMemory);
                }
            }

            return(Parse(lines));
        }
Exemplo n.º 3
0
        public ICollection <IActionMemory> LoadActionMemories(string fileName, ICollection <IActionMemory> actionMemories = null)
        {
            List <IActionMemory> result = new List <IActionMemory>();
            List <string>        lines  = new List <string>();

            System.IO.StreamReader file = new System.IO.StreamReader(fileName);
            string line;

            while ((line = file.ReadLine()) != null)
            {
                lines.Add(line);
            }
            file.Close();

            result.AddRange(FileActionMemory.Parse(lines, actionMemories));

            return(result);
        }
Exemplo n.º 4
0
        static public IList <IActionMemory> Parse(IList <string> lines)
        {
            if (lines == null)
            {
                return(null);
            }
            IList <IActionMemory> result = new List <IActionMemory>();

            IPuzzleAction    action           = null;
            FileActionMemory fileActionMemory = null;
            int parseType = 0;
            FieldOfVisionTypes fieldOfVision = FieldOfVisionTypes.Single;

            foreach (var line in lines)
            {
                if (line.StartsWith(IdentifierIPuzzleAction))
                {
                    action           = PuzzleAction.Parse(line.Substring(IdentifierIPuzzleAction.Length));
                    fileActionMemory = _fileActionMemories.Where(e => e.Action.Equals(action))?.FirstOrDefault();
                    if (fileActionMemory == null)
                    {
                        fileActionMemory = new FileActionMemory(action);
                        _fileActionMemories.Add(fileActionMemory);
                    }
                    result.Add(fileActionMemory);
                    continue;
                }
                if (fileActionMemory == null)
                {
                    continue;
                }

                if (line.StartsWith(IdentifierDifferenceCount))
                {
                    fileActionMemory.DifferenceCount += int.Parse(line.Substring(IdentifierDifferenceCount.Length));
                }
                else if (line.StartsWith(IdentifierNoDifferenceCount))
                {
                    fileActionMemory.NoDifferenceCount += int.Parse(line.Substring(IdentifierNoDifferenceCount.Length));
                }
                else if (line.StartsWith(IdentifierPositiveFeedbackCount))
                {
                    fileActionMemory.PositiveFeedbackCount += int.Parse(line.Substring(IdentifierPositiveFeedbackCount.Length));
                }
                else if (line.StartsWith(IdentifierNegativeFeedbackCount))
                {
                    fileActionMemory.NegativeFeedbackCount += int.Parse(line.Substring(IdentifierNegativeFeedbackCount.Length));
                }
                else if (line.StartsWith(IdentifierDifferentUnits))
                {
                    parseType = 1;
                }
                else if (line.StartsWith(IdentifierNoDifferentUnits))
                {
                    parseType = 2;
                }
                else if (line.StartsWith(IdentifierNGetNoDifferencePattern))
                {
                    fieldOfVision = (FieldOfVisionTypes)Enum.Parse(typeof(FieldOfVisionTypes), line.Substring(IdentifierNGetNoDifferencePattern.Length));
                    parseType     = 3;
                }
                else if (line.StartsWith(IdentifierPositveDictPartialSnapshotCompressions))
                {
                    parseType = 4;
                }
                else if (line.StartsWith(IdentifierNegativeDictPartialSnapshotCompressions))
                {
                    parseType = 5;
                }
                else
                {
                    var splitedLine = line.Split(new[] { '\t' });
                    if (splitedLine.Length < 4)
                    {
                        continue;
                    }

                    switch (parseType)
                    {
                    case 1:     // DifferentUnits
                        ISensoryUnit differentUnit      = SensoryUnit.Parse(splitedLine[2]);
                        int          differentUnitCount = int.Parse(splitedLine[3]);
                        if (!fileActionMemory.DifferentUnits.ContainsKey(differentUnit))
                        {
                            fileActionMemory.DifferentUnits.Add(differentUnit, 0);
                        }
                        fileActionMemory.DifferentUnits[differentUnit] += differentUnitCount;
                        break;

                    case 2:     // NoDifferentUnits
                        ISensoryUnit noDifferentUnit      = SensoryUnit.Parse(splitedLine[2]);
                        int          noDifferentUnitCount = int.Parse(splitedLine[3]);
                        if (!fileActionMemory.NoDifferentUnits.ContainsKey(noDifferentUnit))
                        {
                            fileActionMemory.NoDifferentUnits.Add(noDifferentUnit, 0);
                        }
                        fileActionMemory.NoDifferentUnits[noDifferentUnit] += noDifferentUnitCount;
                        break;

                    case 3:     // DifferentUnits
                        Dictionary <ISensoryPattern, int> dictionarySensoryPatternCount = fileActionMemory.GetNoDifferencePattern(fieldOfVision);
                        ISensoryPattern noDifferentPattern      = SensoryPattern.Parse(splitedLine[2]);
                        int             noDifferentPatternCount = int.Parse(splitedLine[3]);
                        if (!dictionarySensoryPatternCount.ContainsKey(noDifferentPattern))
                        {
                            dictionarySensoryPatternCount.Add(noDifferentPattern, 0);
                        }
                        dictionarySensoryPatternCount[noDifferentPattern] += noDifferentPatternCount;
                        break;

                    case 4:     // PositveDictPartialSnapshotCompressions
                        IPartialSnapshotCompression positveDictPartialSnapshotCompression = PartialSnapshotCompression.Parse(splitedLine[2]);
                        FeedbackCounter             positiveFeedback = FeedbackCounter.Parse(splitedLine[3]) as FeedbackCounter;
                        if (!fileActionMemory.PositveDictPartialSnapshotCompressions.ContainsKey(positveDictPartialSnapshotCompression))
                        {
                            fileActionMemory.PositveDictPartialSnapshotCompressions.Add(positveDictPartialSnapshotCompression, new FeedbackCounter(0, 0));
                        }
                        positiveFeedback += fileActionMemory.PositveDictPartialSnapshotCompressions[positveDictPartialSnapshotCompression] as FeedbackCounter;
                        fileActionMemory.PositveDictPartialSnapshotCompressions[positveDictPartialSnapshotCompression] = positiveFeedback;
                        break;

                    case 5:     // NegativeDictPartialSnapshotCompressions
                        IPartialSnapshotCompression negativeDictPartialSnapshotCompression = PartialSnapshotCompression.Parse(splitedLine[2]);
                        FeedbackCounter             negativeFeedback = FeedbackCounter.Parse(splitedLine[3]) as FeedbackCounter;
                        if (!fileActionMemory.NegativeDictPartialSnapshotCompressions.ContainsKey(negativeDictPartialSnapshotCompression))
                        {
                            fileActionMemory.NegativeDictPartialSnapshotCompressions.Add(negativeDictPartialSnapshotCompression, new FeedbackCounter(0, 0));
                        }
                        negativeFeedback += fileActionMemory.NegativeDictPartialSnapshotCompressions[negativeDictPartialSnapshotCompression] as FeedbackCounter;
                        fileActionMemory.NegativeDictPartialSnapshotCompressions[negativeDictPartialSnapshotCompression] = negativeFeedback;
                        break;
                    }
                }
            }

            return(result);
        }