private void GenerateMainFunction(EncogProgramNode node) { AddBreak(); AddLine("static void Main(string[] args)"); IndentLine("{"); GenerateForChildren(node); UnIndentLine("}"); }
private void GenerateClass(EncogProgramNode node) { AddBreak(); AddLine("public class " + node.Name); IndentLine("{"); GenerateForChildren(node); UnIndentLine("}"); }
private void GenerateCreateNetwork(EncogProgramNode node) { if (embed) { EmbedNetwork(node); } else { LinkNetwork(node); } }
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()); }
/** * 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); }
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("}"); }
/** * 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)); }
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()); }
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; } }
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("};"); }
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("};"); }
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>"); }
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("}"); }
private void GenerateComment(EncogProgramNode commentNode) { AddLine("// " + commentNode.Name); }
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("}"); }
private void GenerateMainFunction(EncogProgramNode node) { AddBreak(); GenerateForChildren(node); }