Exemple #1
0
 public abstract string GenCode(EnvironmentGenerator env, DPRLAgent agent);
Exemple #2
0
        public override string GenCode(EnvironmentGenerator gen, DPRLAgent agent)
        {
            string head = System.IO.File.ReadAllText("Assets/baseline/baselineppo2_head.tpl");
            string text = System.IO.File.ReadAllText("Assets/baseline/baselineppo2.tpl");

            int dim = inputs.Count;

            if (dim == 1)
            {
                if (!inputs[0].isImage)   //only linear input
                {
                    string code;
                    int    shape = 0;
                    if (sensorsExtractor.ComputingLinearInput(agent, out code, out shape))
                    {
                        text = head + text;
                        text = text.Replace("#DISABLE51", "");
                        text = text.Replace("#TPL_RETURN_STATE", "return[np.array(" + code + "), None]");
                        text = text.Replace("#TPL_INPUT_SHAPE", "(" + shape + ", )");
                        text = text.Replace("#IW", "0");
                        text = text.Replace("#IH", "0");
                        text = text.Replace("#ARRAY_SIZE", "" + shape);
                        text = text.Replace("#MODELNAME", modelName);
                        text = text.Replace("#OUTPUT_LOG", outputLogName);
                        text = text.Replace("#TIMESTEPS", "" + timeSteps);
                        text = text.Replace("#INPUT_PORT", "" + inputPort);
                        text = text.Replace("#OUTPUT_PORT", "" + outputPort);
                        if (useLSTM)
                        {
                            text = text.Replace("#PPO2POLICY", "MlpLstmPolicy");
                        }
                        else
                        {
                            text = text.Replace("#PPO2POLICY", "MlpPolicy");
                        }
                    }
                    else
                    {
                        Debug.LogWarning("BaselinePPO2Template error: there is no enough information to generate agent program!!!");
                    }
                }
                else     //only image input
                {
                    string code;
                    int[]  shape;
                    int    numObjects = 0;
                    if (sensorsExtractor.ComputingImageInput(agent, out code, out shape, out numObjects))
                    {
                        string neuralCode = System.IO.File.ReadAllText("Assets/baseline/baselineppo2_imageInput.tpl");
                        text = head + neuralCode + text;
                        text = text.Replace("#IW", "" + shape[0]);
                        text = text.Replace("#IH", "" + shape[1]);
                        text = text.Replace("#TPL_RETURN_STATE", "return [None, " + code + "]");
                        text = text.Replace("#TPL_INPUT_SHAPE", "(" + shape[0] + ", " + shape[1] + ", " + shape[2] + ")");
                        text = text.Replace("#NUMOBJ", "" + numObjects);
                        text = text.Replace("#LINEARINPUTNORM", "" + linearInputNorm);
                        text = text.Replace("#MODELNAME", modelName);
                        text = text.Replace("#OUTPUT_LOG", outputLogName);
                        text = text.Replace("#TIMESTEPS", "" + timeSteps);
                        text = text.Replace("#INPUT_PORT", "" + inputPort);
                        text = text.Replace("#OUTPUT_PORT", "" + outputPort);
                        if (useLSTM)
                        {
                            text = text.Replace("#PPO2POLICY", "MlpLstmPolicy");
                        }
                        else
                        {
                            text = text.Replace("#PPO2POLICY", "MlpPolicy");
                        }
                    }
                    else
                    {
                        Debug.LogWarning("BaselinePPO2 error: there is no enough information to generate agent program!!!");
                    }
                }
            }
            else if (dim == 2)     //two inputs: image, and linear array.
            {
                string code1;
                int    shape1;
                string code2;
                int[]  shape2;
                int    numObjects;
                if (sensorsExtractor.ComputingLinearInput(agent, out code1, out shape1) &&
                    sensorsExtractor.ComputingImageInput(agent, out code2, out shape2, out numObjects))
                {
                    Debug.LogWarning("BaselinePPO2 warning: BaselinePPO2 does not yet support multiple entries. You will have to adapt the generated code to support this functionality. See more at https://github.com/hill-a/stable-baselines/issues/133");

                    string neuralCode = System.IO.File.ReadAllText("Assets/baseline/baselineppo2_linearImageInput.tpl");
                    text = head + neuralCode + text;
                    text = text.Replace("#IW", "" + shape2[0]);
                    text = text.Replace("#IH", "" + shape2[1]);
                    text = text.Replace("#TPL_RETURN_STATE", "return [" + code1 + ", " + code2 + "]");
                    text = text.Replace("#ARRAY_SIZE", "" + shape1);
                    text = text.Replace("#TPL_INPUT_SHAPE", "(" + shape2[0] + ", " + shape2[1] + ", " + shape2[2] + ")");
                    text = text.Replace("#DISABLE51", "");
                    text = text.Replace("#DISABLE52", "");
                    text = text.Replace("#RAYCASTING1", "");
                    text = text.Replace("#RAYCASTING2", "");
                    text = text.Replace("#HISTSIZE", "" + shape2[2]);
                    text = text.Replace("#SHAPE1", "" + shape2[0]);
                    text = text.Replace("#SHAPE2", "" + shape2[1]);
                    text = text.Replace("#NETWORK", "");
                    text = text.Replace("#NUMOBJ", "" + numObjects);
                    text = text.Replace("#LINEARINPUTNORM", "" + linearInputNorm);
                    text = text.Replace("#MODELNAME", modelName);
                    text = text.Replace("#OUTPUT_LOG", outputLogName);
                    text = text.Replace("#TIMESTEPS", "" + timeSteps);
                    text = text.Replace("#INPUT_PORT", "" + inputPort);
                    text = text.Replace("#OUTPUT_PORT", "" + outputPort);
                    if (useLSTM)
                    {
                        text = text.Replace("#PPO2POLICY", "MlpLstmPolicy");
                    }
                    else
                    {
                        text = text.Replace("#PPO2POLICY", "MlpPolicy");
                    }
                }
                else
                {
                    Debug.LogWarning("BaselinePPO2 error: there is no enough information to generate agent program!!!");
                }
            }
            else
            {
                text = text.Replace("#IW", "0");
                text = text.Replace("#IH", "0");
            }
            if (outputs.Count > 0)
            {
                text = text.Replace("#TPL_OUTPUT_SHAPE", "(" + outputs[0].size + ", )");
            }
            if (gen.actions.Length > 0)
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("[");
                for (int i = 0; i < gen.actions.Length; i++)
                {
                    sb.Append("('").Append(gen.actions[i].name).Append("',").Append(gen.actions[i].value).Append(")");
                    if (i + 1 < gen.actions.Length)
                    {
                        sb.Append(',');
                    }
                }
                sb.Append("]");
                text = text.Replace("#TPL_ACTIONS", sb.ToString());
            }
            else
            {
                text = text.Replace("#TPL_ACTIONS", "[('Move', [1, 0, 0]), ('Move', [-1, 0, 0]), ('Move', [0, 1, 0]), ('Move', [0, -1, 0]), ('Move', [0, 0, 1]),  ('Move', [0, 0, -1])]");
                text = text.Replace("#TPL_OUTPUT_SHAPE", "(6, )");
            }
            text = text.Replace("#SKIP_FRAMES", "" + gen.skipFrames);
            for (int i = 0; i < replacement.Length; i++)
            {
                text = text.Replace(replacement[i].name, replacement[i].value);
            }
            text += "\n";
            return(text);
        }
Exemple #3
0
        public override string GenCode(EnvironmentGenerator gen, DPRLAgent agent)
        {
            string head = System.IO.File.ReadAllText("Assets/baseline/builtina3c_head.tpl");
            string text = System.IO.File.ReadAllText("Assets/baseline/builtina3c.tpl");

            int dim = inputs.Count;

            if (dim == 1)
            {
                if (!inputs[0].isImage)   //only linear input
                {
                    string code;
                    int    shape = 0;
                    if (sensorsExtractor.ComputingLinearInput(agent, out code, out shape))
                    {
                        text = head + text;
                        text = text.Replace("#DISABLE51", "");
                        text = text.Replace("#TPL_RETURN_STATE", "return[np.array(" + code + "), None]");
                        text = text.Replace("#TPL_INPUT_SHAPE", "(" + shape + ", )");
                        text = text.Replace("#ARRAY_SIZE", "" + shape);
                        text = text.Replace("#IW", "0");
                        text = text.Replace("#IH", "0");
                    }
                    else
                    {
                        Debug.LogWarning("A3CBuiltInGenerator error: there is no enough information to generate agent program!!!");
                    }
                }
                else     //only image input
                {
                    string code;
                    int[]  shape;
                    int    numObjects = 0;
                    if (sensorsExtractor.ComputingImageInput(agent, out code, out shape, out numObjects))
                    {
                        string neuralCode = System.IO.File.ReadAllText("Assets/baseline/builtina3c_imageInput.tpl");
                        text = head + neuralCode + text;
                        text = text.Replace("#IW", "" + shape[0]);
                        text = text.Replace("#IH", "" + shape[1]);
                        text = text.Replace("#TPL_RETURN_STATE", "return [None, " + code + "]");
                        text = text.Replace("#TPL_INPUT_SHAPE", "(" + shape[0] + ", " + shape[1] + ", " + shape[2] + ")");
                        text = text.Replace("#DISABLE51", "");
                        text = text.Replace("#RAYCASTING1", "");
                        text = text.Replace("#RAYCASTING2", "");
                        text = text.Replace("#HISTSIZE", "" + shape[2]);
                        text = text.Replace("#SHAPE1", "" + shape[0]);
                        text = text.Replace("#SHAPE2", "" + shape[1]);
                        text = text.Replace("#NETWORK", "");
                        text = text.Replace("#NUMOBJ", "" + numObjects);
                        text = text.Replace("#LINEARINPUTNORM", "" + linearInputNorm);
                    }
                    else
                    {
                        Debug.LogWarning("A3CBuiltInGenerator error: there is no enough information to generate agent program!!!");
                    }
                }
            }
            else if (dim == 2)     //two inputs: image, and linear array.
            {
                string code1;
                int    shape1;
                string code2;
                int[]  shape2;
                int    numObjects;
                if (sensorsExtractor.ComputingLinearInput(agent, out code1, out shape1) &&
                    sensorsExtractor.ComputingImageInput(agent, out code2, out shape2, out numObjects))
                {
                    string neuralCode = System.IO.File.ReadAllText("Assets/baseline/builtina3c_linearImageInput.tpl");
                    text = head + neuralCode + text;
                    text = text.Replace("#IW", "" + shape2[0]);
                    text = text.Replace("#IH", "" + shape2[1]);
                    text = text.Replace("#TPL_RETURN_STATE", "return [" + code1 + ", " + code2 + "]");
                    text = text.Replace("#ARRAY_SIZE", "" + shape1);
                    text = text.Replace("#TPL_INPUT_SHAPE", "(" + shape2[0] + ", " + shape2[1] + ", " + shape2[2] + ")");
                    text = text.Replace("#DISABLE51", "");
                    text = text.Replace("#DISABLE52", "");
                    text = text.Replace("#RAYCASTING1", "");
                    text = text.Replace("#RAYCASTING2", "");
                    text = text.Replace("#HISTSIZE", "" + shape2[2]);
                    text = text.Replace("#SHAPE1", "" + shape2[0]);
                    text = text.Replace("#SHAPE2", "" + shape2[1]);
                    text = text.Replace("#NETWORK", "");
                    text = text.Replace("#NUMOBJ", "" + numObjects);
                    text = text.Replace("#LINEARINPUTNORM", "" + linearInputNorm);
                }
                else
                {
                    Debug.LogWarning("A3CBuiltInGenerator error: there is no enough information to generate agent program!!!");
                }
            }
            else
            {
                text = text.Replace("#IW", "0");
                text = text.Replace("#IH", "0");
            }
            if (outputs.Count > 0)
            {
                text = text.Replace("#TPL_OUTPUT_SHAPE", "(" + outputs[0].size + ", )");
            }
            if (gen.actions.Length > 0)
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("[");
                for (int i = 0; i < gen.actions.Length; i++)
                {
                    sb.Append("('").Append(gen.actions[i].name).Append("',").Append(gen.actions[i].value).Append(")");
                    if (i + 1 < gen.actions.Length)
                    {
                        sb.Append(',');
                    }
                }
                sb.Append("]");
                text = text.Replace("#TPL_ACTIONS", sb.ToString());
            }
            else
            {
                text = text.Replace("#TPL_ACTIONS", "[('Move', [1, 0, 0]), ('Move', [-1, 0, 0]), ('Move', [0, 1, 0]), ('Move', [0, -1, 0]), ('Move', [0, 0, 1]),  ('Move', [0, 0, -1])]");
                text = text.Replace("#TPL_OUTPUT_SHAPE", "(6, )");
            }
            text = text.Replace("#SKIP_FRAMES", "" + gen.skipFrames);
            for (int i = 0; i < replacement.Length; i++)
            {
                text = text.Replace(replacement[i].name, replacement[i].value);
            }
            text += "\n";
            return(text);
        }