示例#1
0
 private void GenerateMainFunction(EncogProgramNode node)
 {
     AddBreak();
     AddLine("static void Main(string[] args)");
     IndentLine("{");
     GenerateForChildren(node);
     UnIndentLine("}");
 }
示例#2
0
 private void GenerateClass(EncogProgramNode node)
 {
     AddBreak();
     AddLine("public class " + node.Name);
     IndentLine("{");
     GenerateForChildren(node);
     UnIndentLine("}");
 }
示例#3
0
 private void GenerateCreateNetwork(EncogProgramNode node)
 {
     if (embed)
     {
         EmbedNetwork(node);
     }
     else
     {
         LinkNetwork(node);
     }
 }
示例#4
0
        private void GenerateConst(EncogProgramNode node)
        {
            var line = new StringBuilder();

            line.Append("var ");
            line.Append(node.Name);
            line.Append(" = \"");
            line.Append(node.Args[0].Value);
            line.Append("\";");

            AddLine(line.ToString());
        }
示例#5
0
        /**
         * Generate from a method and data.
         *
         * @param method
         *            The machine learning method to generate from.
         * @param data
         *            The data to use perform generation.
         */

        public void Generate(FileInfo method, FileInfo data)
        {
            EncogProgramNode createNetworkFunction = null;

            program.AddComment("Code generated by Encog v"
                               + EncogFramework.Instance.Properties[EncogFramework.EncogVersion]);
            program.AddComment("Generation Date: " + new DateTime().ToString());
            program.AddComment("Generated code may be used freely");
            program.AddComment("http://www.heatonresearch.com/encog");
            EncogProgramNode mainClass = program.CreateClass("EncogExample");

            if (targetLanguage == TargetLanguage.MQL4 ||
                targetLanguage == TargetLanguage.NinjaScript)
            {
                throw new AnalystCodeGenerationError(
                          "MQL4 and Ninjascript can only be generated from Encog Analyst");
            }

            if (data != null)
            {
                mainClass.EmbedTraining(data);
                if (!(generator is GenerateEncogJavaScript))
                {
                    mainClass.GenerateLoadTraining(data);
                }
            }

            if (method != null)
            {
                createNetworkFunction = GenerateForMethod(mainClass, method);
            }

            EncogProgramNode mainFunction = mainClass.CreateMainFunction();

            if (createNetworkFunction != null)
            {
                mainFunction.CreateFunctionCall(createNetworkFunction, "MLMethod",
                                                "method");
            }

            if (data != null)
            {
                if (!(generator is GenerateEncogJavaScript))
                {
                    mainFunction.CreateFunctionCall("createTraining", "MLDataSet",
                                                    "training");
                }
            }
            mainFunction
            .AddComment("Network and/or data is now loaded, you can add code to train, evaluate, etc.");

            ((IProgramGenerator)generator).Generate(program, EmbedData);
        }
示例#6
0
        private void GenerateFunction(EncogProgramNode node)
        {
            AddBreak();

            var line = new StringBuilder();

            line.Append("public static void ");
            line.Append(node.Name);
            line.Append("() {");
            IndentLine(line.ToString());

            GenerateForChildren(node);
            UnIndentLine("}");
        }
示例#7
0
        /**
         * GEnerate from a machine learning method.
         *
         * @param mainClass
         *            The main class.
         * @param method
         *            The filename of the method.
         * @return The newly created node.
         */

        private EncogProgramNode GenerateForMethod(
            EncogProgramNode mainClass, FileInfo method)
        {
            if (EmbedData)
            {
                var encodable = (IMLEncodable)EncogDirectoryPersistence
                                .LoadObject(method);
                var weights = new double[encodable.EncodedArrayLength()];
                encodable.EncodeToArray(weights);
                mainClass.CreateArray("WEIGHTS", weights);
            }

            return(mainClass.CreateNetworkFunction("createNetwork", method));
        }
示例#8
0
        private void GenerateFunctionCall(EncogProgramNode node)
        {
            AddBreak();
            var line = new StringBuilder();

            if (node.Args[0].Value.ToString().Length > 0)
            {
                line.Append("var ");
                line.Append(node.Args[1].Value);
                line.Append(" = ");
            }

            line.Append(node.Name);
            line.Append("();");
            AddLine(line.ToString());
        }
示例#9
0
        private void GenerateNode(EncogProgramNode node)
        {
            switch (node.Type)
            {
            case NodeType.Comment:
                GenerateComment(node);
                break;

            case NodeType.Class:
                GenerateClass(node);
                break;

            case NodeType.MainFunction:
                GenerateMainFunction(node);
                break;

            case NodeType.Const:
                GenerateConst(node);
                break;

            case NodeType.StaticFunction:
                GenerateFunction(node);
                break;

            case NodeType.FunctionCall:
                GenerateFunctionCall(node);
                break;

            case NodeType.CreateNetwork:
                GenerateCreateNetwork(node);
                break;

            case NodeType.InitArray:
                GenerateArrayInit(node);
                break;

            case NodeType.EmbedTraining:
                GenerateEmbedTraining(node);
                break;

            case NodeType.LoadTraining:
                GenerateLoadTraining(node);
                break;
            }
        }
示例#10
0
        private void GenerateArrayInit(EncogProgramNode node)
        {
            var line = new StringBuilder();

            line.Append("public static final double[] ");
            line.Append(node.Name);
            line.Append(" = {");
            IndentLine(line.ToString());

            var a = (double[])node.Args[0].Value;

            line.Length = 0;

            int lineCount = 0;

            for (int i = 0; i < a.Length; i++)
            {
                line.Append(CSVFormat.EgFormat.Format(a[i],
                                                      EncogFramework.DefaultPrecision));
                if (i < (a.Length - 1))
                {
                    line.Append(",");
                }

                lineCount++;
                if (lineCount >= 10)
                {
                    AddLine(line.ToString());
                    line.Length = 0;
                    lineCount   = 0;
                }
            }

            if (line.Length > 0)
            {
                AddLine(line.ToString());
                line.Length = 0;
            }

            UnIndentLine("};");
        }
示例#11
0
        private void EmbedTraining(EncogProgramNode node)
        {
            var        dataFile = (FileInfo)node.Args[0].Value;
            IMLDataSet data     = EncogUtility.LoadEGB2Memory(dataFile);

            // generate the input data

            IndentLine("public static final double[][] INPUT_DATA = {");
            foreach (IMLDataPair pair in data)
            {
                IMLData item = pair.Input;

                var line = new StringBuilder();

                NumberList.ToList(CSVFormat.EgFormat, line, item);
                line.Insert(0, "{ ");
                line.Append(" },");
                AddLine(line.ToString());
            }
            UnIndentLine("};");

            AddBreak();

            // generate the ideal data

            IndentLine("public static final double[][] IDEAL_DATA = {");
            foreach (IMLDataPair pair in data)
            {
                IMLData item = pair.Ideal;

                var line = new StringBuilder();

                NumberList.ToList(CSVFormat.EgFormat, line, item);
                line.Insert(0, "{ ");
                line.Append(" },");
                AddLine(line.ToString());
            }
            UnIndentLine("};");
        }
示例#12
0
        private void GenerateClass(EncogProgramNode node)
        {
            AddBreak();

            AddLine("<!DOCTYPE html>");
            AddLine("<html>");
            AddLine("<head>");
            AddLine("<title>Encog Generated Javascript</title>");
            AddLine("</head>");
            AddLine("<body>");
            AddLine("<script src=\"../encog.js\"></script>");
            AddLine("<script src=\"../encog-widget.js\"></script>");
            AddLine("<pre>");
            AddLine("<script type=\"text/javascript\">");

            GenerateForChildren(node);

            AddLine("</script>");
            AddLine(
                "<noscript>Your browser does not support JavaScript! Note: if you are trying to view this in Encog Workbench, right-click file and choose \"Open as Text\".</noscript>");
            AddLine("</pre>");
            AddLine("</body>");
            AddLine("</html>");
        }
示例#13
0
        private void EmbedNetwork(EncogProgramNode node)
        {
            AddBreak();

            var methodFile = (FileInfo)node.Args[0].Value;

            var method = (IMLMethod)EncogDirectoryPersistence
                         .LoadObject(methodFile);

            if (!(method is IMLFactory))
            {
                throw new EncogError("Code generation not yet supported for: "
                                     + method.GetType().Name);
            }

            var factoryMethod = (IMLFactory)method;

            String methodName         = factoryMethod.FactoryType;
            String methodArchitecture = factoryMethod.FactoryArchitecture;

            // header
            AddInclude("org.encog.ml.MLMethod");
            AddInclude("org.encog.persist.EncogDirectoryPersistence");

            var line = new StringBuilder();

            line.Append("public static MLMethod ");
            line.Append(node.Name);
            line.Append("() {");
            IndentLine(line.ToString());

            // create factory
            line.Length = 0;
            AddInclude("org.encog.ml.factory.MLMethodFactory");
            line.Append("MLMethodFactory methodFactory = new MLMethodFactory();");
            AddLine(line.ToString());

            // factory create
            line.Length = 0;
            line.Append("MLMethod result = ");

            line.Append("methodFactory.create(");
            line.Append("\"");
            line.Append(methodName);
            line.Append("\"");
            line.Append(",");
            line.Append("\"");
            line.Append(methodArchitecture);
            line.Append("\"");
            line.Append(", 0, 0);");
            AddLine(line.ToString());

            line.Length = 0;
            AddInclude("org.encog.ml.MLEncodable");
            line.Append("((MLEncodable)result).decodeFromArray(WEIGHTS);");
            AddLine(line.ToString());

            // return
            AddLine("return result;");

            UnIndentLine("}");
        }
示例#14
0
 private void GenerateComment(EncogProgramNode commentNode)
 {
     AddLine("// " + commentNode.Name);
 }
示例#15
0
        private void EmbedNetwork(EncogProgramNode node)
        {
            AddBreak();

            var methodFile = (FileInfo)node.Args[0].Value;

            var method = (IMLMethod)EncogDirectoryPersistence
                         .LoadObject(methodFile);

            if (!(method is IMLFactory))
            {
                throw new EncogError("Code generation not yet supported for: "
                                     + method.GetType().Name);
            }

            FlatNetwork flat = ((IContainsFlat)method).Flat;

            // header
            var line = new StringBuilder();

            line.Append("public static MLMethod ");
            line.Append(node.Name);
            line.Append("() {");
            IndentLine(line.ToString());

            // create factory
            line.Length = 0;

            AddLine("var network = ENCOG.BasicNetwork.create( null );");
            AddLine("network.inputCount = " + flat.InputCount + ";");
            AddLine("network.outputCount = " + flat.OutputCount + ";");
            AddLine("network.layerCounts = "
                    + ToSingleLineArray(flat.LayerCounts) + ";");
            AddLine("network.layerContextCount = "
                    + ToSingleLineArray(flat.LayerContextCount) + ";");
            AddLine("network.weightIndex = "
                    + ToSingleLineArray(flat.WeightIndex) + ";");
            AddLine("network.layerIndex = "
                    + ToSingleLineArray(flat.LayerIndex) + ";");
            AddLine("network.activationFunctions = "
                    + ToSingleLineArray(flat.ActivationFunctions) + ";");
            AddLine("network.layerFeedCounts = "
                    + ToSingleLineArray(flat.LayerFeedCounts) + ";");
            AddLine("network.contextTargetOffset = "
                    + ToSingleLineArray(flat.ContextTargetOffset) + ";");
            AddLine("network.contextTargetSize = "
                    + ToSingleLineArray(flat.ContextTargetSize) + ";");
            AddLine("network.biasActivation = "
                    + ToSingleLineArray(flat.BiasActivation) + ";");
            AddLine("network.beginTraining = " + flat.BeginTraining + ";");
            AddLine("network.endTraining=" + flat.EndTraining + ";");
            AddLine("network.weights = WEIGHTS;");
            AddLine("network.layerOutput = "
                    + ToSingleLineArray(flat.LayerOutput) + ";");
            AddLine("network.layerSums = " + ToSingleLineArray(flat.LayerSums)
                    + ";");

            // return
            AddLine("return network;");

            UnIndentLine("}");
        }
示例#16
0
 private void GenerateMainFunction(EncogProgramNode node)
 {
     AddBreak();
     GenerateForChildren(node);
 }