public void ResolveClassificationMLP()
    {
        object myModel = MyFirstDLLWrapper.mlp_create_model(3, new int[] { 2, 3, 1 });

        double[][] inputs  = new double[blueSamples.Count + redSamples.Count][];
        double[]   outputs = new double[blueSamples.Count + redSamples.Count];
        int        i       = 0;

        foreach (var blue in blueSamples)
        {
            inputs[i]    = new double[2];
            inputs[i][0] = blue.transform.position.x / 10;
            inputs[i][1] = blue.transform.position.z / 10;
            outputs[i++] = 1;
        }
        foreach (var red in redSamples)
        {
            inputs[i]    = new double[2];
            inputs[i][0] = red.transform.position.x / 10;
            inputs[i][1] = red.transform.position.z / 10;
            outputs[i++] = -1;
        }

        MyFirstDLLWrapper.mlp_fit_classification_backdrop(myModel, inputs, outputs, 100000, 0.01);

        foreach (var white in whiteSamples)
        {
            Destroy(white);
        }
        whiteSamples.Clear();

        for (int a = 1; a <= 10; a++)
        {
            for (int b = 1; b <= 10; b++)
            {
                var rslt = MyFirstDLLWrapper.mlp_classify(myModel, new double[] { a / 10f, b / 10f });
                if (rslt[0] > 0)
                {
                    whiteSamples.Add(Instantiate(bluePrefab, new Vector3(a, 0, b), Quaternion.identity));
                }
                else
                {
                    whiteSamples.Add(Instantiate(redPrefab, new Vector3(a, 0, b), Quaternion.identity));
                }
            }
        }
    }
Пример #2
0
    public void ResolveClassification()
    {
        double[,] inputs = new double[blueSamples.Count + redSamples.Count, 2];
        double[] outputs = new double[blueSamples.Count + redSamples.Count];
        int      i       = 0;

        foreach (var blue in blueSamples)
        {
            inputs[i, 0] = blue.transform.position.x;
            inputs[i, 1] = blue.transform.position.z;
            outputs[i++] = 1;
        }
        foreach (var red in redSamples)
        {
            inputs[i, 0] = red.transform.position.x;
            inputs[i, 1] = red.transform.position.z;
            outputs[i++] = -1;
        }

        MyFirstDLLWrapper.linear_fit_classification_rosenblatt(ref myModelClassification, inputs, outputs, 1000, 0.1);

        foreach (var white in whiteSamples)
        {
            Destroy(white);
        }
        whiteSamples.Clear();

        for (int a = 1; a <= 10; a++)
        {
            for (int b = 1; b <= 10; b++)
            {
                var rslt = MyFirstDLLWrapper.linear_classify(ref myModelClassification, new double[] { a, b });

                if (rslt > 0)
                {
                    whiteSamples.Add(Instantiate(bluePrefab, new Vector3(a, 0, b), Quaternion.identity));
                }
                else
                {
                    whiteSamples.Add(Instantiate(redPrefab, new Vector3(a, 0, b), Quaternion.identity));
                }
            }
        }
    }
    public void GenerateCross()
    {
        foreach (var blue in blueSamples)
        {
            Destroy(blue);
        }
        foreach (var red in redSamples)
        {
            Destroy(red);
        }
        foreach (var plotPoint in plotSamples)
        {
            Destroy(plotPoint);
        }
        redSamples.Clear();
        blueSamples.Clear();
        plotSamples.Clear();
        for (var i = 0; i < trainingSetLength; i++)
        {
            var xRdm = Random.Range(-10f, 10f);
            var zRdm = Random.Range(-10f, 10f);

            if (Mathf.Abs(xRdm) <= 2.5f || Mathf.Abs(zRdm) <= 2.5f)
            {
                blueSamples.Add(
                    Instantiate(bluePrefab, new Vector3(xRdm, 0f, zRdm), Quaternion.identity));
            }
            else
            {
                redSamples.Add(
                    Instantiate(redPrefab, new Vector3(xRdm, 0f, zRdm), Quaternion.identity));
            }
        }
        for (var x = -10; x <= 10; x++)
        {
            for (var z = -10; z <= 10; z++)
            {
                plotSamples.Add(
                    Instantiate(plotPrefab, new Vector3(x, -2f, z), Quaternion.identity));
            }
        }

        myModelClassification = MyFirstDLLWrapper.linear_create_model(2);
    }
    public void ResolveRegressionMLP()
    {
        object myModel = MyFirstDLLWrapper.mlp_create_model(3, new int[] { 2, 20, 1 });

        double[][] inputs  = new double[blueSamples.Count + redSamples.Count][];
        double[]   outputs = new double[blueSamples.Count + redSamples.Count];
        int        i       = 0;

        foreach (var blue in blueSamples)
        {
            inputs[i]    = new double[2];
            inputs[i][0] = blue.transform.position.x / 10;
            inputs[i][1] = blue.transform.position.z / 10;
            outputs[i++] = 0;
        }
        foreach (var red in redSamples)
        {
            inputs[i]    = new double[2];
            inputs[i][0] = red.transform.position.x / 10;
            inputs[i][1] = red.transform.position.z / 10;
            outputs[i++] = 1;
        }
        MyFirstDLLWrapper.mlp_fit_regression_backdrop(myModel, inputs, outputs, 10000, 0.1);



        foreach (var white in whiteSamples)
        {
            Destroy(white);
        }
        whiteSamples.Clear();

        for (int a = 1; a <= 10; a++)
        {
            for (int b = 1; b <= 10; b++)
            {
                var rslt = MyFirstDLLWrapper.mlp_predict(myModel, new double[] { a / 10f, b / 10f });
                var elt  = Instantiate(whitePrefab, new Vector3(a, 0f, b), Quaternion.identity);
                elt.GetComponent <Renderer>().material.color = new Color((float)rslt[0], 0, 1 - (float)rslt[0]);
                whiteSamples.Add(elt);
            }
        }
    }
Пример #5
0
    public void ResolveLinear()
    {
        double[] myModel = MyFirstDLLWrapper.linear_create_model(2);

        double[,] inputs = new double[blueSamples.Count + redSamples.Count, 2];
        double[] outputs = new double[blueSamples.Count + redSamples.Count];
        int      i       = 0;

        foreach (var blue in blueSamples)
        {
            inputs[i, 0] = blue.transform.position.x;
            inputs[i, 1] = blue.transform.position.z;
            outputs[i++] = 0;
        }
        foreach (var red in redSamples)
        {
            inputs[i, 0] = red.transform.position.x;
            inputs[i, 1] = red.transform.position.z;
            outputs[i++] = 1;
        }
        MyFirstDLLWrapper.linear_fit_regression(ref myModel, inputs, outputs);



        foreach (var white in whiteSamples)
        {
            Destroy(white);
        }
        whiteSamples.Clear();

        for (int a = 1; a <= 10; a++)
        {
            for (int b = 1; b <= 10; b++)
            {
                var rslt = MyFirstDLLWrapper.linear_predict(ref myModel, new double[] { a, b });

                var elt = Instantiate(whitePrefab, new Vector3(a, 0f, b), Quaternion.identity);
                elt.GetComponent <Renderer>().material.color = new Color((float)rslt, 0, 1 - (float)rslt);
                whiteSamples.Add(elt);
            }
        }
    }
 // Use this for initialization
 void Start()
 {
     myModelClassification = MyFirstDLLWrapper.linear_create_model(2);
 }