public virtual void Create() { mOperator = mProgram.OperatorSet.FindRandomOperator(); double p_const = 0.5; double r = Statistics.DistributionModel.GetUniform(); if (r < p_const) { mOperand1 = mProgram.ConstantSet.FindRandomRegister(); } else { mOperand1 = mProgram.RegisterSet.FindRandomRegister(); } if (mOperand1.IsConstant) { mOperand2 = mProgram.RegisterSet.FindRandomRegister(); } else { r = Statistics.DistributionModel.GetUniform(); if (r < p_const) { mOperand2 = mProgram.ConstantSet.FindRandomRegister(); } else { mOperand2 = mProgram.RegisterSet.FindRandomRegister(); } } mDestinationRegister = mProgram.RegisterSet.FindRandomRegister(); }
public LGPOperator FindRandomOperator(LGPOperator current_operator = null) { for (int attempts = 0; attempts < 10; attempts++) { double r = mWeightSum * Statistics.DistributionModel.GetUniform(); double current_sum = 0; foreach (KeyValuePair <LGPOperator, double> point in mOperators) { current_sum += point.Value; if (current_sum >= r) { if (point.Key != current_operator) { return(point.Key); } else { break; } } } } return(current_operator); }
public void Copy(LGPOperator rhs) { mOperatorIndex = rhs.mOperatorIndex; mIsConditionalConstruct = rhs.mIsConditionalConstruct; mSymbol = rhs.mSymbol; }
public void AddOperator(LGPOperator op, double weight = 1) { mOperators.Add(new KeyValuePair <LGPOperator, double>(op, weight)); op.mOperatorIndex = mOperators.Count - 1; mWeightSum += weight; }
public virtual void MutateOperator() { mOperator = mProgram.OperatorSet.FindRandomOperator(); }