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