public Operator AddOperator(bool OResultOmRightSide, MathFunction OMFunction, int OParameterIndex, float ORandomNumber, bool OUseRandomNumber, Connector OExtraMathFunction, OperatorHolder OHolder) { Operator toAdd = Eq.OPStorage.Pop(); toAdd.SetupOperator(OResultOmRightSide, OMFunction, OParameterIndex, ORandomNumber, OUseRandomNumber, NumberOfOperators, OExtraMathFunction, OHolder); return(toAdd); }
public void ChangeCleanup() { MFunction.StoreAndCleanup(this); // these actions might not be required yet but if there is any errors then it will be easier to spot if a null exception is thrown MFunction = null; //Holder = null; //ContainedIndex = -1; ResetMaxCalculated(); //NumberOfOperators = 0; }
public void ChangeOperator() { ResultOnRightSide = Eq.Randomizer.RandomBool(); do { MFunction = Eq.EInfo.Operators[Eq.Randomizer.Next(0, Eq.EInfo.Operators.Length)]; // should never be an infinete loop because this function should only be called when there is 1 or more operators left // and there should always be an operator that doesn't need a min of operators } while (!MFunction.CanUseOperator(this)); UseRandomNumber = Eq.Randomizer.RandomBool(); RandomNumber = Eq.Randomizer.Next(Eq.EInfo.NumberRangeMin, Eq.EInfo.NumberRangeMax); ParameterIndex = Eq.Randomizer.Next(0, Eq.EInfo.coordInfo.parameters.Length); MFunction.MakeRandom(this); }
public void SetupOperator(bool OResultOmRightSide, MathFunction OMFunction, int OParameterIndex, float ORandomNumber, bool OUseRandomNumber, int CIndex, Connector OExtraMathFunction, OperatorHolder OHolder) { ResultOnRightSide = OResultOmRightSide; MFunction = OMFunction; ParameterIndex = OParameterIndex; RandomNumber = ORandomNumber; UseRandomNumber = OUseRandomNumber; ExtraMathFunction = OExtraMathFunction; Holder = OHolder; Holder.AddOperatorToHolder(this); AllOperatorsContainedIndex = Eq.AddOperatorToAlloperators(this); ContainedIndex = CIndex; }
/// <summary> /// faster way of resetting the operator when all operatos in an equation are reset at once /// </summary> public void StoreAndCleanupAll() { Eq.OPStorage.Push(this); MFunction.StoreAndCleanupAll(this); MFunction = null; Holder.RemoveOperatorFromHolder(ContainedIndex); Holder = null; // these actions might not be required yet but if there is any errors then it will be easier to spot if a null exception is thrown ContainedIndex = -1; AllOperatorsContainedIndex = -1; ResetMaxCalculated(); //NumberOfOperators = 0; }
/// <summary> /// resets the operator so it can be used to make a new random operator /// </summary> public void StoreAndCleanup() { Eq.OPStorage.Push(this); Eq.RemoveOperatorFromAllOperators(AllOperatorsContainedIndex); MFunction.StoreAndCleanup(this); MFunction = null; Holder.RemoveOperatorFromHolder(ContainedIndex); Holder = null; ContainedIndex = -1; AllOperatorsContainedIndex = -1; ResetMaxCalculated(); //NumberOfOperators = 0; }
private void FindFunctionWithSpecies() { try { //MessageBox.Show(Vector<double>.Count.ToString()); //const string SequenceX = "x = {1,2,3,4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, 25}"; //const string SequenceY = "2,3,5,7,11,13,17,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101"; //const string SequenceX = "x = {1,2,3,4, 5, 6, 7, 8, 9,10}"; //const string SequenceY = "2,3,5,7,11,13,17,19,23,29"; //const string SequenceX = "x = { 1, 2, 3, 4, 5,6, 7,8, 9,10}"; //const string SequenceY = "432,4567,987,23,765,2,678,9,34,23"; //const string SequenceX = "x = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54}"; //const string SequenceY = " 1,0,1,0,1,0,0,0,1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1"; //const string SequenceX = " 2, 3, 4"; //const string SequenceY = "182014,364572,495989"; //const string SequenceX = "x = {1,2,3, 4, 5, 6, 7, 8, 9,10}"; //const string SequenceY = "2,4,6,2342238,10,23432,14,12232116,18,20"; const string SequenceX = "x = { 1, 2, 3, 4, 5, 6,7, 8, 9, 10}"; const string SequenceY = "74,143,34,243,23,52,9,253,224,231"; //const string SequenceX = "x = {384, 357, 221, 9, 18, 357, 221, 6}, y = {18, 357, 221, 6, 384, 357, 221, 9}"; //const string SequenceY = " 6, 1, 17, 3, 6, 1, 17, 3"; //const string SequenceX = "x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}"; //const string SequenceY = " 1, 3, 8, 21, 55, 144, 377, 987, 2584, 6765, 17711"; //const string SequenceX = "x = {1,2,3,4,5,6, 7, 8, 9,10,11}"; //const string SequenceY = " 1,1,2,3,5,8,13,21,34,55,89"; //const string SequenceX = "x = {1.1,1.5,2,2.1,10.8,200.8}"; //const string SequenceY = " 1, 2,2, 2, 11, 201"; //const string SequenceX = "x = {86, 86, 86, 86, 76, 76, 76, 76, 123, 123, 123, 123}, y = {1, 0.5, 0.25, 0.125, 1, 0.5, 0.25, 0.125, 1, 0.5, 0.25, 0.125}"; //const string SequenceY = " 86, 76, 66, 56, 76, 66, 56, 46, 123, 113, 103, 93"; //List<string> xx = new List<string>(); //List<string> yy = new List<string>(); //for (double i = -Math.PI; i < Math.PI; i += 0.2) //{ // xx.Add(i.ToString("N6", CultureInfo.InvariantCulture)); // yy.Add(Math.Sin(i).ToString("N6", CultureInfo.InvariantCulture)); //} //string SequenceX = "x = {" + String.Join(", ", xx) + "}"; //string SequenceY = String.Join(", ", yy); //const string SequenceX = "x = {2,3,4, 5, 6, 7, 8, 9,10,11}"; //const string SequenceY = " 1,3,6,10,15,21,28,36,45,55"; //const string SequenceX = "x = {1, 4, 3}, y = {1, 1, 3}, z = {1, 2, 3}"; //const string SequenceY = "3,2,1"; //const string SequenceX = "x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}"; //const string SequenceY = " 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377"; //const string SequenceX = "x = {0.0,0.1,0.2,0.7,0.8,0.9,1.0,1.6,1.7,1.8,1.9,2.0,2.1,2.2,2.3,2.9,3.0}"; //const string SequenceY = " 0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0"; //const string SequenceX = "0.0,0.1,0.2,0.7,0.8,0.9,1.0,1.6,1.7,1.8,1.9,2.0,2.1,2.2,2.3,2.9,3.0"; //const string SequenceY = "0.0,0.1,0.2,0.7,0.8,0.9,0.0,0.6,0.7,0.8,0.9,0.0,0.1,0.2,0.3,0.9,0.0"; //const string SequenceX = "x = {0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.999,1.0,1.001,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.999,2.0,2.001,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.0,4.0,5.0,5.0,6.0}"; //const string SequenceY = " 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, 0.0,1.0, 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0, 1.0,0.0, 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0"; //const string SequenceX = "x = {0.0,0.1,0.2,0.7,0.8,0.9,1.0,1.6,1.7,1.8,1.9,2.0,2.1,2.2,2.3,2.9,3.0}"; //const string SequenceY = " 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0"; //const string SequenceX = "x = {0.0,0.1,0.2,0.7,0.8,0.9,1.0,1.6,1.7,1.8,1.9,2.0,2.1,2.2,2.3,2.9,3.0,3.1,3.2,3.7,3.8,3.9,4.0,4.6,4.7,4.8,4.9,5.0,5.1,5.2,5.3,5.9,6.0,6.1,6.2,6.3,6.9,7.0,7.1,7.2,7.7,7.8,7.9,8.0}"; //const string SequenceY = " 0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0"; //const string SequenceX = " 1"; //const string SequenceY = "276"; //string str = "Math Memes"; //byte[] bytes = Encoding.ASCII.GetBytes(str); //byte[] bytes = new byte[str.Length * sizeof(char)]; //System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); //string SequenceX = "x = {" + String.Join(", ", Enumerable.Range(0, bytes.Length)) + "}"; //((string SequenceY = String.Join(", ", bytes); //List<double> SeqRX = new List<double>(); //List<double> SeqRY = new List<double>(); //for (double i = -Math.PI; i < Math.PI; i += 0.4) //{ // SeqRX.Add(i); // SeqRY.Add(Math.Sin(i)); //} //string SequenceX = "x = {" + String.Join(", ", SeqRX.Select(x => x.ToString("N2", CultureInfo.GetCultureInfo("en-US")))) + "}"; //string SequenceY = String.Join(", ", SeqRY.Select(x => x.ToString("N2", CultureInfo.GetCultureInfo("en-US")))); //for (double i = -30; i < 150; i += 10) //{ // SeqRX.Add(i); // SeqRY.Add(Math.Exp(i)); //} //VectorPoint[] Seq = GetSequence(SeqRX.ToArray(), SeqRY.ToArray()); CoordInfo Seq = new CoordInfo(SequenceX, SequenceY); MathFunction[] Operators = new MathFunction[] { new Plus(), new Subtract(), new Multiply(), new Divide(), new PowerOf(), new Root(), new Exponent(), new NaturalLog(), new Log(), //new Modulos(), //new Floor(), //new Ceil(), //new Round(), new Sin(), new Cos(), new Tan(), new ASin(), new ACos(), new ATan(), new Parentheses(), //new Constant(), //new Absolute(), //new AND(), //new NAND(), //new OR(), //new NOR(), //new XOR(), //new XNOR(), //new NOT() }; //EvolutionInfo EInfo = new EvolutionInfo( // Seq, // Sequence // 20, // MaxSize // 0.2, // MaxChange // 30000, // CandidatesPerGen // Math.Max(0, GetMaxNumber(Seq)) + 1, // NumberRangeMax // 0, // NumberRangeMin // 6, // SpeciesAmount // 100, // MaxStuckGens // 0.8, // EvolvedCandidatesPerGen // 0, // RandomCandidatesPerGen // 0.2, // SmartCandidatesPerGen // Operators // Operators that can be used in an equation //); //singleSpecieEnviroment = new IndividualSpecieEnviroment<SingleSpecieEvolutionMethod>(); //singleSpecieEnviroment.OnBestEquationChanged += SpecieEnviroment_OnBestEquationChanged; //singleSpecieEnviroment.OnSubscribeToSpecies += SpecieEnviroment_OnSubscribeToSpecies; //GeneralInfo GInfo = singleSpecieEnviroment.SetupEviroment(EInfo); //GeneralInfoControl.InsertInfo(GInfo); //singleSpecieEnviroment.SimulateEnviroment(); EvolutionInfo EInfo = new EvolutionInfo( Seq, // Sequence 20, // MaxSize 0.2, // MaxChange 400, // CandidatesPerGen Math.Max(0, GetMaxNumber(Seq)) + 1, // NumberRangeMax 0, // NumberRangeMin 100, // SpeciesAmount 100, // MaxStuckGens 0.8, // EvolvedCandidatesPerGen 0, // RandomCandidatesPerGen 0.2, // SmartCandidatesPerGen Operators // Operators that can be used in an equation ); familyEnviroment = new FamilyEnviroment <FamilySpecieEvolutionMethod>(); familyEnviroment.OnBestEquationChanged += SpecieEnviroment_OnBestEquationChanged; familyEnviroment.OnSubscribeToSpecies += SpecieEnviroment_OnSubscribeToSpecies; GeneralInfo GInfo = familyEnviroment.SetupEviroment(EInfo); GeneralInfoControl.InsertInfo(GInfo); familyEnviroment.SimulateEnviroment(); } catch (Exception e) { MessageBox.Show(e.Message + Environment.NewLine + e.StackTrace); throw; } MessageBox.Show("Done"); }