static void AddNEGO()
    {
        var obj1 = new GameObject("LearningModel_NE");

        obj1.AddComponent <SupervisedLearningModel>();
        var obj2 = new GameObject("Trainer_NE");

        obj2.AddComponent <TrainerNeuralEvolution>();

        var obj3 = new GameObject("NE_Learning");

        obj1.transform.parent = obj3.transform;
        obj2.transform.parent = obj3.transform;

        //try to create parameter assets
        TrainerParamsNeuralEvolution    trainerParam = null;
        SupervisedLearningNetworkSimple network      = null;

        CreateAssets <TrainerParamsNeuralEvolution, SupervisedLearningNetworkSimple>("TrainerParamNE_" + obj1.scene.name + ".asset",
                                                                                     "NetworkNE_" + obj1.scene.name + ".asset",
                                                                                     out trainerParam, out network);
        network.hiddenLayers = new List <UnityNetwork.SimpleDenseLayerDef>();
        network.hiddenLayers.Add(new UnityNetwork.SimpleDenseLayerDef());


        var trainer = obj2.GetComponent <TrainerNeuralEvolution>();

        trainer.modelRef                  = obj1.GetComponent <SupervisedLearningModel>();
        trainer.parameters                = trainerParam;
        trainer.checkpointPath            = checkpointPath;
        trainer.checkpointFileName        = "Checkpoint_" + obj1.scene.name + ".bytes";
        trainer.evolutionDataSaveFileName = "NeuralEvolutionData_" + obj1.scene.name + ".bytes";

        ((SupervisedLearningModel)trainer.modelRef).network = network;
    }
    static void AddSLGO()
    {
        var obj1 = new GameObject("LearningModel_SL");

        obj1.AddComponent <SupervisedLearningModel>();
        var obj2 = new GameObject("Trainer_SL");

        obj2.AddComponent <TrainerMimic>();

        var obj3 = new GameObject("SL_Learning");

        obj1.transform.parent = obj3.transform;
        obj2.transform.parent = obj3.transform;

        //try to create parameter assets
        SupervisedLearningNetworkSimple network = null;
        TrainerParamsMimic trainerParam         = null;

        CreateAssets <TrainerParamsMimic, SupervisedLearningNetworkSimple>("TrainerParamSL_" + obj1.scene.name + ".asset",
                                                                           "NetworkSL_" + obj1.scene.name + ".asset",
                                                                           out trainerParam, out network);
        network.hiddenLayers = new List <UnityNetwork.SimpleDenseLayerDef>();
        network.hiddenLayers.Add(new UnityNetwork.SimpleDenseLayerDef());

        var trainer = obj2.GetComponent <TrainerMimic>();

        trainer.modelRef                 = obj1.GetComponent <SupervisedLearningModel>();
        trainer.parameters               = trainerParam;
        trainer.checkpointPath           = checkpointPath;
        trainer.checkpointFileName       = "Checkpoint_" + obj1.scene.name + ".bytes";
        trainer.trainingDataSaveFileName = "Collected_SL_Data_" + obj1.scene.name + ".bytes";

        ((SupervisedLearningModel)trainer.modelRef).network = network;
    }