void Update() { PSORender psoRender = FindObjectOfType <PSORender>(); if (psoRender) { var pso = psoRender.pso; if (pso != null) { bestFitText.text = "Best Fit = " + pso.BestSoFar.fitness; avgFitText.text = "Avg Fit = " + pso.AvgFitCurr; } } }
void Start() { float speed = 1.0f; bool connectivity = false; GameObject activeObject = null; float scale = 1.0f; bool isCustom = false; int materialPreset = 0; bool fof = false; float limitX = 100.0f; int seed = 12345; bool seedParam = false; customPreset.perlinOffset.x = UnityEngine.Random.Range(-1000.0f, 1000.0f); customPreset.perlinOffset.y = UnityEngine.Random.Range(-1000.0f, 1000.0f); //string cmdLine = "-imagevalue -image\"d:\\temp\\test folder\\download.jpg\" -material3"; //string cmdLine = "-weierstrass -material2"; //string cmdLine = "-rastrigin -material2"; //string cmdLine = "-experiment7"; //string cmdLine = "-ackley -material3"; string cmdLine = string.Join(" ", Environment.GetCommandLineArgs()); var args = ParseText(cmdLine, ' ', '"'); for (int i = 0; i < args.Count; i++) { if (args[i].StartsWith("-preset")) { if (int.TryParse(args[i].Substring(7), out int presetIndex)) { activeObject = presets[presetIndex]; } } else if (args[i].StartsWith("-experiment")) { if (int.TryParse(args[i].Substring(11), out int experimentIndex)) { activeObject = experiments[experimentIndex - 1]; } } else if (args[i].StartsWith("-speed")) { if (float.TryParse(args[i].Substring(6), out speed)) { } } else if (args[i] == "-random") { } else if (args[i] == "-connectivity") { connectivity = true; } else if (args[i] == "-landscape") { customPreset.problem = PSOConfig.Problem.PerlinLandscape; isCustom = true; } else if (args[i] == "-imagevalue") { customPreset.problem = PSOConfig.Problem.ImageValue; isCustom = true; } else if (args[i] == "-imagesaturation") { customPreset.problem = PSOConfig.Problem.ImageSaturation; isCustom = true; } else if (args[i] == "-sphere") { customPreset.problem = PSOConfig.Problem.Sphere; scale = 0.01f; isCustom = true; } else if (args[i] == "-quadric") { customPreset.problem = PSOConfig.Problem.Quadric; scale = 0.01f; isCustom = true; } else if (args[i] == "-hyperellipsoid") { customPreset.problem = PSOConfig.Problem.Hyper; scale = 0.01f; isCustom = true; } else if (args[i] == "-rastrigin") { customPreset.problem = PSOConfig.Problem.Rastrigin; scale = 0.1f; limitX = 10.0f; customPreset.vMax = 0.25f; isCustom = true; } else if (args[i] == "-griewank") { customPreset.problem = PSOConfig.Problem.Griewank; isCustom = true; } else if (args[i] == "-schaffer") { customPreset.problem = PSOConfig.Problem.Schaffer; limitX = 10.0f; customPreset.vMax = 0.25f; isCustom = true; } else if (args[i] == "-ackley") { customPreset.problem = PSOConfig.Problem.Ackley; scale = 0.25f; limitX = 10.0f; customPreset.vMax = 0.25f; isCustom = true; } else if (args[i] == "-weierstrass") { customPreset.problem = PSOConfig.Problem.Weierstrass; scale = 0.25f; limitX = 10.0f; customPreset.vMax = 0.25f; isCustom = true; } else if (args[i] == "-ralphmean") { customPreset.problem = PSOConfig.Problem.RalphBellCurveMean; scale = 20.0f; isCustom = true; } else if (args[i] == "-ralphvar") { customPreset.problem = PSOConfig.Problem.RalphBellCurveVariance; scale = 20.0f; isCustom = true; } else if (args[i] == "-fof") { fof = true; isCustom = true; } else if (args[i] == "-usestimulus") { customPreset.useStimulus = true; isCustom = true; } else if (args[i] == "-useresponse") { customPreset.useStimulus = false; isCustom = true; } else if (args[i].StartsWith("-sampleradius")) { int.TryParse(args[i].Substring(13), out customPreset.sampleRadius); isCustom = true; } else if (args[i].StartsWith("-image")) { if (int.TryParse(args[i].Substring(6), out int imageSelection)) { customPreset.image = images[imageSelection]; customPreset.invertImage = true; } else { // Check if this is a path var filename = args[i].Substring(6); if (filename[0] == '"') { filename = filename.Substring(1); } if (filename[filename.Length - 1] == '"') { filename = filename.Substring(0, filename.Length - 1); } if (System.IO.File.Exists(filename)) { // Load this file var data = System.IO.File.ReadAllBytes(filename); if (data.Length > 0) { Texture2D tex = new Texture2D(2, 2, TextureFormat.RGBA32, false); if (tex.LoadImage(data)) { customPreset.image = tex; customPreset.invertImage = true; } } } } } else if (args[i].StartsWith("-material")) { int.TryParse(args[i].Substring(9), out materialPreset); } else if (args[i].StartsWith("-octaves")) { int.TryParse(args[i].Substring(8), out customPreset.perlinOctaves); } else if (args[i].StartsWith("-amplitude")) { float.TryParse(args[i].Substring(10), out customPreset.perlinAmplitude); } else if (args[i].StartsWith("-frequency")) { float.TryParse(args[i].Substring(10), out customPreset.perlinFrequency.x); customPreset.perlinFrequency.y = customPreset.perlinFrequency.x; } else if (args[i].StartsWith("-scale")) { float.TryParse(args[i].Substring(6), out scale); } else if (args[i].StartsWith("-chi")) { float.TryParse(args[i].Substring(4), out customPreset.chi); } else if (args[i].StartsWith("-w")) { float.TryParse(args[i].Substring(2), out customPreset.omega); } else if (args[i].StartsWith("-c")) { float.TryParse(args[i].Substring(2), out customPreset.c1); float.TryParse(args[i].Substring(2), out customPreset.c2); } else if (args[i].StartsWith("-c1")) { float.TryParse(args[i].Substring(2), out customPreset.c1); } else if (args[i].StartsWith("-c2")) { float.TryParse(args[i].Substring(2), out customPreset.c2); } else if (args[i].StartsWith("-vmax")) { float.TryParse(args[i].Substring(5), out customPreset.vMax); } else if (args[i].StartsWith("-rngseed")) { if (int.TryParse(args[i].Substring(8), out seed)) { seedParam = true; } } else { Console.WriteLine($"Unknown argument ${args[i]}"); } } if (isCustom) { customPreset.initialX = new Vector2(-limitX, limitX); customPreset.xMax = limitX; var cameraController = FindObjectOfType <PSOCameraController>(); cameraController.SetScale(limitX / 100.0f); activeObject = customPreset.gameObject; } else if (activeObject == null) { activeObject = randomPreset.gameObject; MakeRandom((seedParam)?(seed):((int)DateTime.UtcNow.Ticks)); } activeObject.SetActive(true); PSOConfig config = activeObject.GetComponent <PSOConfig>(); if (seedParam) { config.seed = seed; PSOCameraController controller = FindObjectOfType <PSOCameraController>(); if (controller) { controller.SetSeed(seed); } } PSORender psoRender = activeObject.GetComponent <PSORender>(); psoRender.playSpeed = speed; if (isCustom) { psoRender.displayConnectivity = connectivity; if ((customPreset.problem == PSOConfig.Problem.ImageSaturation) || (customPreset.problem == PSOConfig.Problem.ImageValue)) { psoRender.materialOverride = materialsImage[materialPreset]; psoRender.yScale = -20.0f * scale; } else { psoRender.materialOverride = materialsLandscape[materialPreset]; psoRender.yScale = scale; } psoRender.fogOfFunction = fof; } }
override public bool Restart(int seed, float estimatedTime) { int tries = 0; int maxTries = 25; rndGen = new System.Random(seed); while (tries < maxTries) { elapsedTime = 0; PSORender psoRender = FindObjectOfType <PSORender>(); startLookPos = new Vector3(rndGen.Range(-1, 1), rndGen.Range(0.5f, 1.5f), rndGen.Range(-1, 1)).normalized *outerRadius *scale; startLookPos.y = Mathf.Max(startLookPos.y, psoRender.extentsY.y); PSOParticle particle = null; switch (targetParticle) { case TargetParticle.None: targetPos = rndGen.onUnitSphere() * innerRadius * scale; if (targetPos.y < 0) { targetPos.y = Mathf.Abs(targetPos.y); } break; case TargetParticle.Best: particle = psoRender.GetBestParticle(); break; case TargetParticle.Worst: particle = psoRender.GetBestParticle(); break; case TargetParticle.Random: int index = rndGen.Range(0, psoRender.GetParticleCount()); particle = psoRender.GetParticle(index); break; default: break; } transform.position = startLookPos; if (particle) { if (usePrediction) { targetPos = particle.Predict(estimatedTime); } else { particleTransform = particle.transform; targetPos = particleTransform.position; } Vector3 toTarget = targetPos - startLookPos; Vector3 dir = toTarget.normalized; float maxDist = toTarget.magnitude; if (dir.y < -0.1f) { // Check raycast if (!Physics.Raycast(startLookPos, dir, maxDist)) { break; } } tries++; } else { Vector3 toTarget = targetPos - startLookPos; Vector3 dir = toTarget.normalized; float maxDist = toTarget.magnitude; if (dir.y < -0.1f) { break; } } } if (tries == maxTries) { return(false); } FixedUpdate(); return(true); }