예제 #1
0
파일: Class1.cs 프로젝트: chargen/AGI-X0
        void testALS()
        {
            prepare();

            //joinIrc1();

            var absolute                 = PathHelper.AssemblyDirectory.Uri.AbsoluteUri;
            var absoluteWithoutFile      = absolute.Substring(8);
            var pathParts                = new List <string>(absoluteWithoutFile.Split(new char[] { '/' }));
            var pathPartsWithoutSpecific = pathParts;

            for (;;)
            {
                string lastPathPart = pathPartsWithoutSpecific[pathPartsWithoutSpecific.Count - 1];
                if (lastPathPart == "bin")
                {
                    break;
                }
                pathPartsWithoutSpecific.RemoveAt(pathPartsWithoutSpecific.Count - 1);
            }
            pathPartsWithoutSpecific.RemoveAt(pathPartsWithoutSpecific.Count - 1);
            pathPartsWithoutSpecific.RemoveAt(pathPartsWithoutSpecific.Count - 1);

            pathPartsWithoutSpecific.AddRange(new string[] { "MetaNixCore", "functionalSrc", "problems" });


            string directoryPath = string.Join("\\", pathPartsWithoutSpecific.ToArray());

            string[] problemsFilenames = Directory.GetFiles(directoryPath);


            PatternSymbolContext patternSymbolContext = new PatternSymbolContext();

            patternSymbolContext.lookupOrCreateSymbolIdAndUniqueIdForName("null");  // must have 0 as uniqueId
            patternSymbolContext.lookupOrCreateSymbolIdAndUniqueIdForName("true");  // must have 1 as uniqueId
            patternSymbolContext.lookupOrCreateSymbolIdAndUniqueIdForName("false"); // must have 2 as uniqueId


            Scheduler scheduler = new Scheduler();

            AdvancedAdaptiveLevinSearchProgramDatabase levinSearchProblemDatabase = new AdvancedAdaptiveLevinSearchProgramDatabase();

            SparseArrayProgramDistribution          sparseArrayProgramDistribution = new SparseArrayProgramDistribution();
            AdvancedAdaptiveLevinSearchTaskProvider levinSearchTaskProvider        = new AdvancedAdaptiveLevinSearchTaskProvider(scheduler, sparseArrayProgramDistribution, levinSearchProblemDatabase, logger);


            // overwrite for testing
            problemsFilenames = new string[] {
                @"C:\Users\r0b3\github\AGI-X0\code\c#\MetaNixCore\functionalSrc\problems\Induction_array_verticalAddition.txt",
                @"C:\Users\r0b3\github\AGI-X0\code\c#\MetaNixCore\functionalSrc\problems\level1\Induction_array_integer_exists.txt",

                /*
                 *
                 *
                 * @"C:\Users\r0b3\github\AGI-X0\code\c#\MetaNixCore\functionalSrc\problems\Induction_linkedlist_next.txt",
                 * @"C:\Users\r0b3\github\AGI-X0\code\c#\MetaNixCore\functionalSrc\problems\Induction_linkedlist_append.txt",
                 * @"C:\Users\r0b3\github\AGI-X0\code\c#\MetaNixCore\functionalSrc\problems\Induction_array_appendBeginningAndEnding.txt",
                 * @"C:\Users\r0b3\github\AGI-X0\code\c#\MetaNixCore\functionalSrc\problems\Induction_array_removeEqual.txt",
                 * @"C:\Users\r0b3\github\AGI-X0\code\c#\MetaNixCore\functionalSrc\problems\Induction_array_subReg0.txt",
                 * @"C:\Users\r0b3\github\AGI-X0\code\c#\MetaNixCore\functionalSrc\problems\Induction_array_multiplication.txt",
                 * @"C:\Users\r0b3\github\AGI-X0\code\c#\MetaNixCore\functionalSrc\problems\induction_array_binaryNegation.txt",
                 * @"C:\Users\r0b3\github\AGI-X0\code\c#\MetaNixCore\functionalSrc\problems\Induction_array_negation.txt",
                 */
            };

            foreach (string iterationPath in problemsFilenames)
            {
                string fileContent = File.ReadAllText(iterationPath);

                Lexer lexer = new Lexer();
                lexer.setSource(fileContent);

                Functional2LexerAndParser parser = new Functional2LexerAndParser(patternSymbolContext);
                parser.lexer = lexer;
                parser.parse();

                Pattern <Decoration> problemRootElement = parser.rootPattern;

                MetaNix.framework.pattern.Interpreter.vmAssert(problemRootElement.isBranch, false, "Must be branch!");
                MetaNix.framework.pattern.Interpreter.vmAssert(problemRootElement.decoration == null, false, "Must be pure branch!");

                Pattern <Decoration> configurationPattern = problemRootElement.referenced[0];


                AdvancedAdaptiveLevinSearchProblem levinSearchProblem = new AdvancedAdaptiveLevinSearchProblem();

                var iterationPathParts = new List <string>(iterationPath.Split(new char[] { '\\' }));

                string taskname = iterationPathParts[iterationPathParts.Count - 1].Substring(0, iterationPathParts[iterationPathParts.Count - 1].Length - 4);

                levinSearchProblem.humanReadableTaskname = taskname;


                //levinSearchProblem.enumerationMaxProgramLength = 5;
                levinSearchProblem.instructionsetCount = InstructionInfo.getNumberOfInstructions() - 16;                          /*because no call*/

                levinSearchProblem.maxNumberOfRetiredInstructions = Conversion.convertToUint(configurationPattern.referenced[1]); // TODO< derive by propability with some formula from schmidhuber >


                // read hints for indirect call candidates
                Pattern <Decoration> hintIndirectCallCandidatesPattern = configurationPattern.referenced[2];
                foreach (var iHintPattern in hintIndirectCallCandidatesPattern.referenced)
                {
                    string iHint = Conversion.convertPatternToString(iHintPattern);

                    levinSearchProblem.humanReadableIndirectlyCallableProgramNames.Add(iHint);
                }



                //levinSearchProblem.localInitialInterpreterState = new LocalInterpreterState();
                //levinSearchProblem.localInitialInterpreterState.registers = new int[3];

                //levinSearchProblem.initialInterpreterState.debugExecution = false;


                levinSearchProblem.enumerationMaxProgramLength = Conversion.convertToUint(configurationPattern.referenced[0]);

                for (int trainingSampleI = 1; trainingSampleI < problemRootElement.referenced.Length; trainingSampleI++)
                {
                    var trainingSamplePattern = problemRootElement.referenced[trainingSampleI];

                    MetaNix.framework.pattern.Interpreter.vmAssert(trainingSamplePattern.isBranch, false, "Must be branch!");
                    MetaNix.framework.pattern.Interpreter.vmAssert(trainingSamplePattern.decoration == null, false, "Must be pure branch!");

                    Pattern <Decoration> questionArrayPattern     = trainingSamplePattern.referenced[0],
                                         questionRegistersPattern = trainingSamplePattern.referenced[1],
                                         answerArrayPattern       = trainingSamplePattern.referenced[3],
                                         answerRegistersPattern   = trainingSamplePattern.referenced[4];

                    // append

                    TrainingSample createdTrainingSample = new TrainingSample();
                    createdTrainingSample.questionArray      = new List <int>(Conversion.convertToIntArray(questionArrayPattern));
                    createdTrainingSample.questionRegisters  = Conversion.convertToOptionalIntArray(questionRegistersPattern);
                    createdTrainingSample.questionArrayIndex = Conversion.convertToOptionalInt(trainingSamplePattern.referenced[2]);
                    createdTrainingSample.answerRegisters    = Conversion.convertToOptionalIntArray(answerRegistersPattern);
                    createdTrainingSample.answerArray        = new List <int>(Conversion.convertToIntArray(answerArrayPattern));
                    createdTrainingSample.answerArrayIndex   = Conversion.convertToOptionalInt(trainingSamplePattern.referenced[5]);

                    levinSearchProblem.trainingSamples.Add(createdTrainingSample);
                }



                levinSearchTaskProvider.problems.Add(levinSearchProblem);
            }



            levinSearchTaskProvider.submitFirstTask();

            for (; ;)
            {
                scheduler.process();
            }
        }
예제 #2
0
 public Functional2LexerAndParser(PatternSymbolContext patternSymbolContext) : base()
 {
     this.patternSymbolContext = patternSymbolContext;
 }