// 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; }
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()); }