/// <summary>
 /// Constructor
 /// </summary>
 /// <param name="os">The function set of the GP</param>
 /// <param name="ts">The named variable set of the GP, part of the terminal set</param>
 /// <param name="cs">The part of the terminal  set that contains constants and 0-arity functions</param>
 public TGPProgram(TGPOperatorSet os, TGPVariableSet ts, TGPConstantSet cs, List <KeyValuePair <TGPPrimitive, double> > primitives)
 {
     mOperatorSet  = os;
     mVariableSet  = ts;
     mConstantSet  = cs;
     mPrimitiveSet = primitives;
 }
        public TGPOperatorSet Clone()
        {
            TGPOperatorSet clone = new TGPOperatorSet();

            clone.mWeightSum = mWeightSum;
            foreach (KeyValuePair <TGPOperator, double> point in mOperators)
            {
                clone.mOperators.Add(new KeyValuePair <TGPOperator, double>(point.Key.Clone(), point.Value));
            }

            return(clone);
        }