// events

        public ThreadedSearch(IMetaHeuristic mh)
        {
            this.mh = mh;
            tr = new Thread(mh.Start);
        }
 public ThreadedSearch(IMetaHeuristic mh, string threadName)
 {
     this.mh = mh;
     tr = new Thread(mh.Start);          
     tr.Name = threadName;
 }
Пример #3
0
        private void Start()
        {
            _originalMeshes = new List <Mesh>();
            _meshes         = new List <Mesh>();

            Renderer[] renderers = gameObject.GetComponentsInChildren <Renderer>();

            HashSet <Mesh> uniqueMeshes = new HashSet <Mesh>();

            foreach (Renderer renderer in renderers)
            {
                if (renderer is MeshRenderer meshRenderer)
                {
                    MeshFilter meshFilter = renderer.gameObject.GetComponent <MeshFilter>();
                    if (!meshFilter)
                    {
                        continue;
                    }

                    Mesh mesh = meshFilter.sharedMesh;

                    if (!uniqueMeshes.Add(mesh))
                    {
                        continue;
                    }

                    _originalMeshes.Add(mesh);

                    // Clone mesh
                    mesh = meshFilter.sharedMesh = UnityConverter.ToSharedMesh(mesh).ToUnityMesh();
                    _meshes.Add(mesh);
                }
                else if (renderer is SkinnedMeshRenderer skinnedMeshRenderer)
                {
                    Mesh mesh = skinnedMeshRenderer.sharedMesh;

                    if (!uniqueMeshes.Add(mesh))
                    {
                        continue;
                    }

                    _originalMeshes.Add(mesh);

                    // Clone mesh
                    mesh = skinnedMeshRenderer.sharedMesh = mesh.ToSharedMesh().ToUnityMesh();
                    _meshes.Add(mesh);
                }
            }

            _camera = Camera.main;

            Texture2D textureOriginal = CalibrationUtils.CaptureScreenshot(_camera, 1000, 1000);

            _originalDigest = ImagePhash.ComputeDigest(CalibrationUtils.ToLuminanceImage(textureOriginal));

            switch (metaHeuristicAlgo)
            {
            case MetaHeuristicAlgo.GeneticAlgorithm:
                _metaheuristicAlgorithm = new GeneticAlgorithm <Dictionary <string, float> >(Crossover);
                break;

            case MetaHeuristicAlgo.HillClimbing:
                _metaheuristicAlgorithm = new HillClimb <Dictionary <string, float> >();
                break;
            }

            var config = new Configuration <Dictionary <string, float> >();

            config.initializeSolutionFunction = GetInitialState;
            config.cloneFunction        = Clone;
            config.mutationFunction     = Mutate;
            config.movement             = Search.Direction.Optimization;
            config.selectionFunction    = Selection.RankBased;
            config.objectiveFunction    = GetFitness;
            config.populationSize       = populationSize;
            config.noOfIterations       = iterations;
            config.writeToConsole       = false;
            config.enforceHardObjective = false;
            _metaheuristicAlgorithm.Create(config);

            StartCoroutine(Run());
        }