示例#1
0
 /// <summary>
 /// Signal all peripherals
 /// </summary>
 /// <param name="signal"></param>
 public void Signal(ControlSignal signal)
 {
     foreach (var peripheral in _peripherals)
     {
         peripheral.Signal(signal);
     }
 }
示例#2
0
        void Awake()
        {
            signalControl = new ControlSignal();
            path          = "Save/DroneSession/" + "Task-" + task + "/Seed-" + fromSeed + "/";
            rndGenerator  = new SystemRandomSource(fromSeed);
            taskObject    = (DroneTask)Activator.CreateInstance(Type.GetType("Lexmou.MachineLearning.Drone" + task), rndGenerator, task);

            mlp = new MultiLayerMathsNet(fromSeed, null, taskObject.shapes, 1, 0);
            float[] floatArr = new float[taskObject.individualSize];

            //float[] floatArr = new float[] {0,-0.33f,0,0,-0.33f,0,0,0,0,0,0.5f,0,0,-1,0,0,-1,0,0,0.5f,0,1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0.5f};

            Genetic.LoadBest(path, fromGeneration, floatArr);
            BuildCustomWeights(mlp.weights, taskObject.shapes, Vector <float> .Build.DenseOfArray(floatArr));
            //Debug.Log(mlp.weights[0]);

            /*if (stabilizationGeneration != 0)
             * {
             *  Debug.Log("Gene Move");
             *  gene = new Genetic(stabilizationSeed, null, 100, 40, 1.0f, 0.1f, 0.1f, 0.1f, 0.1f, "Save/DroneSession/Task-stabilization/", false);
             * }
             * if (moveGeneration != 0)
             * {
             *  Debug.Log("Gene Move");
             *  gene = new Genetic(moveSeed, null, 100, 52, 1.0f, 0.1f, 0.1f, 0.1f, 0.1f, "Save/DroneSession/Task-move/", false);
             * }
             * deltaDistribution = new ContinuousUniform(-2, 2);
             * tmpBuildCustomWeights = new List<Matrix<float>>();*/

            Restart();
        }
示例#3
0
        public override void Build()
        {
            if (save)
            {
                writerEnv = UIO.CreateStreamWriter(GeneratePath(task, true), "GeneSessionResults.csv", false);
                UIO.WriteLine(writerEnv, "Generation;Angle Random Rotation;Wind");
            }
            Debug.Log("Build DroneSession");
            signal  = new ControlSignal();
            tsignal = new ThrustSignal();
            tmpBuildCustomWeights = new List <Matrix <float> >();
            externalEvaluations   = Vector <float> .Build.Dense(populationSize);

            //Debug.Log(fromTask);
            taskObject = (DroneTask)Activator.CreateInstance(Type.GetType("Lexmou.MachineLearning.Drone" + task), rndGenerator, fromTask);
            //Debug.Log(taskObject.fromTask);
            dronePopulation = new GameObject[populationSize];
            droneRigid      = new Rigidbody[populationSize];
            targetPosition  = new Vector3[populationSize];
            mlpPopulation   = new MultiLayerMathsNet[populationSize];

            gene = new Genetic(seed, rndGenerator, populationSize, taskObject.individualSize, initialValueWeights, mutationRate, randomIndividualsRate, bestIndividualsRate, emptyRate, GeneratePath(task, false), save);
            if (loadGeneration != 0)
            {
                float[,] floatArr = new float[taskObject.individualSize - taskObject.rowIndex, populationSize];
                Debug.Log(taskObject.fromTask);
                //Debug.Log(taskObject.individualSize);
                gene.LoadGeneration(GeneratePath(taskObject.fromTask, true), loadGeneration, floatArr, taskObject.rowIndex);
                gene.generation = loadGeneration;
            }
        }
示例#4
0
 public void SendControlSignal(ControlSignal signal)
 {
     resultControl = signal;
     foreach (Drone.Hardware.Component <ControlSignal> component in ControlSignalBus)
     {
         resultControl = component.ProcessSignal(resultControl);
     }
 }
示例#5
0
 public void SendControlSignal(ControlSignal signal)
 {
     ControlSignal result = signal;
     foreach (Drone.Hardware.Component<ControlSignal> component in ControlSignalBus)
     {
         result = component.ProcessSignal (result);
     }
 }
示例#6
0
        private ControlSignalViewModel CreateControlSignalViewModelViewModel(
            ControlSignal controlSignal, string groupName)
        {
            var res = new ControlSignalViewModel();

            res.Id        = controlSignal.Id;
            res.Header    = controlSignal.Name.ToUpper();
            res.GroupName = groupName;
            return(res);
        }
    void FixedUpdate()
    {
        ControlSignal signal = new ControlSignal ();

        signal.Throttle = Input.GetAxis ("LeftY");
        signal.Rudder = Input.GetAxis ("LeftX");
        signal.Elevator = Input.GetAxis ("RightY");
        signal.Aileron = Input.GetAxis ("RightX");

        MainBoard.SendControlSignal (signal);
    }
    void FixedUpdate()
    {
        ControlSignal signal = new ControlSignal();

        signal.Throttle = Input.GetAxis("LeftY");
        signal.Rudder   = Input.GetAxis("LeftX");
        signal.Elevator = Input.GetAxis("RightY");
        signal.Aileron  = Input.GetAxis("RightX");

        MainBoard.SendControlSignal(signal);
    }
示例#9
0
    void FixedUpdate()
    {
        if (constant)
        {
            ControlSignal signal = new ControlSignal();
            signal.Throttle = constantThrottle;
            signal.Rudder   = constantRudder;
            signal.Elevator = constantElevator;
            signal.Aileron  = constantAileron;
            MainBoard.SendControlSignal(signal);
        }
        else
        {
            if (manual)
            {
                ControlSignal signal = new ControlSignal();

                if (stabilization || move)
                {
                    Rigidbody rigid = this.gameObject.GetComponentInChildren <Rigidbody>();

                    if (stabilization)
                    {
                        Debug.Log("Stable !");
                        MainBoard.inputMLP = Vector <float> .Build.DenseOfArray(new float[] { UAngle.SteerAngle(rigid.transform.eulerAngles.x), UAngle.SteerAngle(rigid.transform.eulerAngles.y), UAngle.SteerAngle(rigid.transform.eulerAngles.z), rigid.angularVelocity.x, rigid.angularVelocity.y, rigid.angularVelocity.z, rigid.velocity.x, rigid.velocity.y, rigid.velocity.z });
                    }
                    else
                    {
                        Debug.Log("Move !");
                        MainBoard.inputMLP = Vector <float> .Build.DenseOfArray(new float[] { MainBoard.deltaPosition.x, MainBoard.deltaPosition.y, MainBoard.deltaPosition.z, UAngle.SteerAngle(rigid.transform.eulerAngles.x), UAngle.SteerAngle(rigid.transform.eulerAngles.y), UAngle.SteerAngle(rigid.transform.eulerAngles.z), rigid.angularVelocity.x, rigid.angularVelocity.y, rigid.angularVelocity.z, rigid.velocity.x, rigid.velocity.y, rigid.velocity.z });
                    }

                    signal.Throttle = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1][3, 0];
                    signal.Rudder   = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1][0, 0];
                    signal.Elevator = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1][1, 0];
                    signal.Aileron  = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1][2, 0];
                }
                else
                {
                    signal.Throttle = Input.GetAxis("LeftY");
                    signal.Rudder   = Input.GetAxis("LeftX");
                    signal.Elevator = Input.GetAxis("RightY");
                    signal.Aileron  = Input.GetAxis("RightX");
                }
                MainBoard.SendControlSignal(signal);
            }
        }
    }
示例#10
0
        /// <summary>
        /// Sends the specified signal to the peripheral.
        /// </summary>
        /// <param name="signal">The signal.</param>
        /// <exception cref="System.ArgumentOutOfRangeException">null</exception>
        public void Signal(ControlSignal signal)
        {
            switch (signal)
            {
            case ControlSignal.Halt:
                Gpu.Halt();
                break;

            case ControlSignal.Resume:
                Gpu.Resume();
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(signal), signal, null);
            }
        }
示例#11
0
    public void SendSignalWithMLP(Vector <float> input)
    {
        MainBoard.inputMLP = input;
        ControlSignal signal = new ControlSignal();

        signal.Throttle = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1]
                          [3, 0];
        signal.Rudder = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1]
                        [0, 0];
        signal.Elevator = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1]
                          [1, 0];
        signal.Aileron = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1]
                         [2, 0];

        MainBoard.SendControlSignal(signal);
    }
示例#12
0
 /// <summary>
 /// Sends the specified signal to the peripheral.
 /// </summary>
 /// <param name="signal">The signal.</param>
 public void Signal(ControlSignal signal)
 {
     // Don't listen.
 }
示例#13
0
 public void AddControl(ControlSignal controlSignal, Behavior behavior)
 {
     mBehaviors.Add(new KeyValuePair<ControlSignal, Behavior>(controlSignal, behavior));
 }