www.gusucode.com > matlab的GA工具箱与vc混和实现遗传算法源码程序 > ga.cpp

      #include "matlib.h"
  #pragma hdrstop
  
  #include "ga.h"
  #include "feval.h"
  #include "initializega.h"
  #include "calcbits.h"
  #include "parse.h"
  #include "b2f.h"
  
  
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, Mm mutFNs, Mm mutOps, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) \
     {
    begin_scope
    bounds.setname("bounds"); evalFN.setname("evalFN"); evalOps.setname("evalOps"); startPop.setname("startPop");  \
      opts.setname("opts"); termFN.setname("termFN"); termOps.setname("termOps"); selectFN.setname("selectFN"); selectOps.setname( \
      "selectOps"); xOverFNs.setname("xOverFNs"); xOverOps.setname("xOverOps"); mutFNs.setname("mutFNs"); mutOps.setname( \
      "mutOps"); 
    dMm(x); dMm(endPop); dMm(bPop); dMm(traceInfo); dMm(n); dMm(e1str); dMm(e2str); dMm(bits); dMm(xZomeLength);  \
      dMm(numVar); dMm(popSize); dMm(c1); dMm(c2); dMm(numXOvers); dMm(numMuts); dMm(epsilon); dMm(oval); dMm(bFoundIn) \
      ; dMm(done); dMm(gen); dMm(collectTrace); dMm(floatGA); dMm(display_); dMm(bval); dMm(bindx); dMm(best); dMm( \
      i_); dMm(i_ga_v0); dMm(j_); dMm(j_ga_v1); dMm(a); dMm(b); dMm(xN); dMm(i_ga_v2); dMm(j_ga_v3); dMm(i_ga_v4);  \
      dMm(cp); dMm(j_ga_v5); dMm(lhs_0); dMm(lhs_1); dMm(i_ga_v6); dMm(mN); dMm(j_ga_v7); 
    
    call_stack_begin;
    // nargin, nargout entry code
    double old_nargin=nargin_val; if (!nargin_set) nargin_val=13.0;
    nargin_set=0;
    double old_nargout=nargout_val; if (!nargout_set) nargout_val=4.0;
    nargout_set=0;
    
    // translated code
    
    // GA run a genetic algorithm
    // function [x,endPop,bPop,traceInfo]=ga(bounds,evalFN,evalOps,startPop,opts,
    //                                       termFN,termOps,selectFN,selectOps,
    //                                       xOverFNs,xOverOps,mutFNs,mutOps)
    //                                
    // Output Arguments:
    //   x            - the best solution found during the course of the run
    //   endPop       - the final population 
    //   bPop         - a trace of the best population
    //   traceInfo    - a matrix of best and means of the ga for each generation
    //
    // Input Arguments:
    //   bounds       - a matrix of upper and lower bounds on the variables
    //   evalFN       - the name of the evaluation .m function
    //   evalOps      - options to pass to the evaluation function ([NULL])
    //   startPop     - a matrix of solutions that can be initialized
    //                  from initialize.m
    //   opts         - [epsilon prob_ops display] change required to consider two 
    //                  solutions different, prob_ops 0 if you want to apply the
    //                  genetic operators probabilisticly to each solution, 1 if
    //                  you are supplying a deterministic number of operator
    //                  applications and display is 1 to output progress 0 for
    //                  quiet. ([1e-6 1 0])
    //   termFN       - name of the .m termination function (['maxGenTerm'])
    //   termOps      - options string to be passed to the termination function
    //                  ([100]).
    //   selectFN     - name of the .m selection function (['normGeomSelect'])
    //   selectOpts   - options string to be passed to select after
    //                  select(pop,#,opts) ([0.08])
    //   xOverFNS     - a string containing blank seperated names of Xover.m
    //                  files (['arithXover heuristicXover simpleXover']) 
    //   xOverOps     - A matrix of options to pass to Xover.m files with the
    //                  first column being the number of that xOver to perform
    //                  similiarly for mutation ([2 0;2 3;2 0])
    //   mutFNs       - a string containing blank seperated names of mutation.m 
    //                  files (['boundaryMutation multiNonUnifMutation ...
    //                           nonUnifMutation unifMutation'])
    //   mutOps       - A matrix of options to pass to Xover.m files with the
    //                  first column being the number of that xOver to perform
    //                  similiarly for mutation ([4 0 0;6 100 3;4 100 3;4 0 0])
    
    // Binary and Real-Valued Simulation Evolution for Matlab 
    // Copyright (C) 1996 C.R. Houck, J.A. Joines, M.G. Kay 
    //
    // C.R. Houck, J.Joines, and M.Kay. A genetic algorithm for function
    // optimization: A Matlab implementation. ACM Transactions on Mathmatical
    // Software, Submitted 1996.
    //
    // This program is free software; you can redistribute it and/or modify
    // it under the terms of the GNU General Public License as published by
    // the Free Software Foundation; either version 1, or (at your option)
    // any later version.
    //
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    // GNU General Public License for more details. A copy of the GNU 
    // General Public License can be obtained from the 
    // Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
    //%$Log: ga.m,v $
    //Revision 1.10  1996/02/02  15:03:00  jjoine
    // Fixed the ordering of imput arguments in the comments to match
    // the actual order in the ga function.
    //
    //Revision 1.9  1995/08/28  20:01:07  chouck
    // Updated initialization parameters, updated mutation parameters to reflect
    // b being the third option to the nonuniform mutations
    //
    //Revision 1.8  1995/08/10  12:59:49  jjoine
    //Started Logfile to keep track of revisions
    //
    
    
    n = nargin();
    if (istrue(n<2.0)||istrue(n==6.0)||istrue(n==10.0)||istrue(n==12.0)) {
      display( disp(TM("Insufficient arguements")) );
    }
    if (istrue(n<3.0)) {
      //Default evalation opts.
      evalOps = nop_M;
    }
    if (istrue(n<5.0)) {
      opts = (BR(1e-06),1.0,0.0);
    }
    if (istrue(isempty(opts))) {
      opts = (BR(1e-06),1.0,0.0);
    }
    
    if (istrue(any(evalFN<48.0))) {
      //Not using a .m file
      if (istrue(opts(2.0)==1.0)) {
        //Float ga
        e1str = (BR(TM("x=c1; c1(xZomeLength)=")),evalFN,TM(";"));
        
        e2str = (BR(TM("x=c2; c2(xZomeLength)=")),evalFN,TM(";"));
        
      } else {
        //Binary ga
        e1str = (BR(TM("x=b2f(endPop(j,:),bounds,bits); endPop(j,xZomeLength)=")),evalFN,TM(";"));
      }
    } else {
      //Are using a .m file
      if (istrue(opts(2.0)==1.0)) {
        //Float ga
        e1str = (BR(TM("[c1 c1(xZomeLength)]=")),evalFN,TM("(c1,[gen evalOps]);"));
        
        e2str = (BR(TM("[c2 c2(xZomeLength)]=")),evalFN,TM("(c2,[gen evalOps]);"));
        
      } else {
        //Binary ga
        e1str = (BR(TM("x=b2f(endPop(j,:),bounds,bits);[x v]=")),evalFN,TM("(x,[gen evalOps]); endPop(j,:)=[f2b(x,bounds,bits) v];") \
          );
        
      }
    }
    
    
    if (istrue(n<6.0)) {
      //Default termination information
      termOps = (BR(100.0));
      termFN = TM("maxGenTerm");
    }
    if (istrue(n<12.0)) {
      //Default muatation information
      if (istrue(opts(2.0)==1.0)) {
        //Float GA
        mutFNs = (BR(TM("boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation")));
        mutOps = (BR(4.0),0.0,0.0,semi,
        6.0,termOps(1.0),3.0,semi,
        4.0,termOps(1.0),3.0,semi,
        4.0,0.0,0.0);
      } else {
        //Binary GA
        mutFNs = (BR(TM("binaryMutation")));
        mutOps = (BR(0.05));
      }
    }
    if (istrue(n<10.0)) {
      //Default crossover information
      if (istrue(opts(2.0)==1.0)) {
        //Float GA
        xOverFNs = (BR(TM("arithXover heuristicXover simpleXover")));
        xOverOps = (BR(2.0),0.0,semi,
        2.0,3.0,semi,
        2.0,0.0);
      } else {
        //Binary GA
        xOverFNs = (BR(TM("simpleXover")));
        xOverOps = (BR(0.6));
      }
    }
    if (istrue(n<9.0)) {
      //Default select opts only i.e. roullete wheel.
      selectOps = nop_M;
    }
    if (istrue(n<8.0)) {
      //Default select info
      selectFN = (BR(TM("normGeomSelect")));
      selectOps = (BR(0.08));
    }
    if (istrue(n<6.0)) {
      //Default termination information
      termOps = (BR(100.0));
      termFN = TM("maxGenTerm");
    }
    if (istrue(n<4.0)) {
      //No starting population passed given
      startPop = nop_M;
    }
    if (istrue(isempty(startPop))) {
      //Generate a population at random
      //startPop=zeros(80,size(bounds,1)+1);
      startPop = initializega(80.0,bounds,evalFN,evalOps,opts(colon(1.0,1.0,2.0)));
    }
    
    if (istrue(opts(2.0)==0.0)) {
      //binary
      bits = calcbits(bounds,opts(1.0));
    }
    
    xOverFNs = parse(xOverFNs);
    mutFNs = parse(mutFNs);
    
    xZomeLength = size(startPop,2.0);
    //Length of the xzome=numVars+fittness
    numVar = xZomeLength-1.0;
    //Number of variables
    popSize = size(startPop,1.0);
    //Number of individuals in the pop
    endPop = zeros(popSize,xZomeLength);
    //A secondary population matrix
    c1 = zeros(1.0,xZomeLength);
    //An individual
    c2 = zeros(1.0,xZomeLength);
    //An individual
    numXOvers = size(xOverFNs,1.0);
    //Number of Crossover operators
    numMuts = size(mutFNs,1.0);
    //Number of Mutation operators
    epsilon = opts(1.0);
    //Threshold for two fittness to differ
    oval = max(startPop(c_p,xZomeLength));
    //Best value in start pop
    bFoundIn = 1.0;
    //Number of times best has changed
    done = 0.0;
    //Done with simulated evolution
    gen = 1.0;
    //Current Generation Number
    collectTrace = (nargout()>3.0);
    //Should we collect info every gen
    floatGA = opts(2.0)==1.0;
    //Probabilistic application of ops
    display_ = opts(3.0);
    //Display progress 
    
    while (istrue(!done)) {
      //Elitist Model
      /*[bval,bindx] = */max(startPop(c_p,xZomeLength),i_o,bval,bindx);
      //Best of current pop
      best = startPop(bindx,c_p);
      
      if (istrue(collectTrace)) {
        traceInfo(gen,1.0) = gen;
        //current generation
        traceInfo(gen,2.0) = startPop(bindx,xZomeLength);
        //Best fittness
        traceInfo(gen,3.0) = mean(startPop(c_p,xZomeLength));
        //Avg fittness
        traceInfo(gen,4.0) = stdM(startPop(c_p,xZomeLength));
        
      }
      
      if (istrue((abs(bval-oval)>epsilon))||istrue((gen==1.0))) {
        //If we have a new best sol
        if (istrue(display_)) {
          fprintf(1.0,TM("\\n%d %f\\n"),(CL(gen),bval));
          //Update the display
        }
        if (istrue(floatGA)) {
          bPop(bFoundIn,c_p) = (BR(gen),startPop(bindx,c_p));
          //Update bPop Matrix
        } else {
          
          bPop(bFoundIn,c_p) = (BR(gen),b2f(startPop(bindx,colon(1.0,1.0,numVar)),bounds,bits),startPop(bindx,xZomeLength) \
            );
        }
        bFoundIn = bFoundIn+1.0;
        //Update number of changes
        oval = bval;
        //Update the best val
      } else {
        
        if (istrue(display_)) {
          fprintf(1.0,TM("%d "),(CL(gen)));
          //Otherwise just update num gen
        }
      }
      
      endPop = feval(selectFN,(CL(startPop),(BR(gen),selectOps)));
      //Select
      
      if (istrue(floatGA)) {
        //Running with the model where the parameters are numbers of ops
        i_ga_v0 = colon(1.0,1.0,numXOvers); int i_ga_i0;
        for (i_ga_i0=0;i_ga_i0<i_ga_v0.cols();i_ga_i0++) {
          forelem(i_,i_ga_v0,i_ga_i0);
          j_ga_v1 = colon(1.0,1.0,xOverOps(i_,1.0)); int j_ga_i1;
          for (j_ga_i1=0;j_ga_i1<j_ga_v1.cols();j_ga_i1++) {
            forelem(j_,j_ga_v1,j_ga_i1);
            a = round(rand()*(popSize-1.0)+1.0);
            //Pick a parent
            b = round(rand()*(popSize-1.0)+1.0);
            //Pick another parent
            xN = deblank(xOverFNs(i_,c_p));
            //Get the name of crossover function
            /*[c1,c2] = */feval(xN,(CL(endPop(a,c_p)),endPop(b,c_p),bounds,(BR(gen),xOverOps(i_,c_p))),i_o,c1,c2) \
              ;
            
            if (istrue(c1(colon(1.0,1.0,numVar))==endPop(a,(colon(1.0,1.0,numVar))))) {
              //Make sure we created a new 
              c1(xZomeLength) = endPop(a,xZomeLength);
              //solution before evaluating
            } else
            if (istrue(c1(colon(1.0,1.0,numVar))==endPop(b,(colon(1.0,1.0,numVar))))) {
              c1(xZomeLength) = endPop(b,xZomeLength);
            } else {
              
              //[c1(xZomeLength) c1] = feval(evalFN,c1,[gen evalOps]);
              eval(e1str);
            }
            if (istrue(c2(colon(1.0,1.0,numVar))==endPop(a,(colon(1.0,1.0,numVar))))) {
              c2(xZomeLength) = endPop(a,xZomeLength);
            } else
            if (istrue(c2(colon(1.0,1.0,numVar))==endPop(b,(colon(1.0,1.0,numVar))))) {
              c2(xZomeLength) = endPop(b,xZomeLength);
            } else {
              
              //[c2(xZomeLength) c2] = feval(evalFN,c2,[gen evalOps]);
              eval(e2str);
            }
            
            endPop(a,c_p) = c1;
            endPop(b,c_p) = c2;
          }
        }
        
        i_ga_v2 = colon(1.0,1.0,numMuts); int i_ga_i2;
        for (i_ga_i2=0;i_ga_i2<i_ga_v2.cols();i_ga_i2++) {
          forelem(i_,i_ga_v2,i_ga_i2);
          j_ga_v3 = colon(1.0,1.0,mutOps(i_,1.0)); int j_ga_i3;
          for (j_ga_i3=0;j_ga_i3<j_ga_v3.cols();j_ga_i3++) {
            forelem(j_,j_ga_v3,j_ga_i3);
            a = round(rand()*(popSize-1.0)+1.0);
            c1 = feval(deblank(mutFNs(i_,c_p)),(CL(endPop(a,c_p)),bounds,(BR(gen),mutOps(i_,c_p))));
            if (istrue(c1(colon(1.0,1.0,numVar))==endPop(a,(colon(1.0,1.0,numVar))))) {
              c1(xZomeLength) = endPop(a,xZomeLength);
            } else {
              
              //[c1(xZomeLength) c1] = feval(evalFN,c1,[gen evalOps]);
              eval(e1str);
            }
            endPop(a,c_p) = c1;
          }
        }
        
      } else {
        //We are running a probabilistic model of genetic operators
        i_ga_v4 = colon(1.0,1.0,numXOvers); int i_ga_i4;
        for (i_ga_i4=0;i_ga_i4<i_ga_v4.cols();i_ga_i4++) {
          forelem(i_,i_ga_v4,i_ga_i4);
          xN = deblank(xOverFNs(i_,c_p));
          //Get the name of crossover function
          cp = find(rand(popSize,1.0)<xOverOps(i_,1.0)==1.0);
          if (istrue(rem(size(cp,1.0),2.0))) {
            cp = cp(colon(1.0,1.0,(size(cp,1.0)-1.0)));
          }
          cp = reshape(cp,size(cp,1.0)/2.0,2.0);
          j_ga_v5 = colon(1.0,1.0,size(cp,1.0)); int j_ga_i5;
          for (j_ga_i5=0;j_ga_i5<j_ga_v5.cols();j_ga_i5++) {
            forelem(j_,j_ga_v5,j_ga_i5);
            a = cp(j_,1.0);
            b = cp(j_,2.0);
            
            /*[endPop(a,c_p),endPop(b,c_p)] = */feval(xN,(CL(endPop(a,c_p)),endPop(b,c_p),bounds,(BR(gen),xOverOps( \
              i_,c_p))),i_o,lhs_0,lhs_1); endPop(a,c_p) = lhs_0; endPop(b,c_p) = lhs_1;
          }
        }
        i_ga_v6 = colon(1.0,1.0,numMuts); int i_ga_i6;
        for (i_ga_i6=0;i_ga_i6<i_ga_v6.cols();i_ga_i6++) {
          forelem(i_,i_ga_v6,i_ga_i6);
          mN = deblank(mutFNs(i_,c_p));
          j_ga_v7 = colon(1.0,1.0,popSize); int j_ga_i7;
          for (j_ga_i7=0;j_ga_i7<j_ga_v7.cols();j_ga_i7++) {
            forelem(j_,j_ga_v7,j_ga_i7);
            endPop(j_,c_p) = feval(mN,(CL(endPop(j_,c_p)),bounds,(BR(gen),mutOps(i_,c_p))));
            eval(e1str);
          }
        }
      }
      
      gen = gen+1.0;
      done = feval(termFN,(CL((BR(gen),termOps)),bPop,endPop));
      //See if the ga is done
      startPop = endPop;
      //Swap the populations
      
      /*[bval,bindx] = */min(startPop(c_p,xZomeLength),i_o,bval,bindx);
      //Keep the best solution
      startPop(bindx,c_p) = best;
      //replace it with the worst
    }
    
    /*[bval,bindx] = */max(startPop(c_p,xZomeLength),i_o,bval,bindx);
    if (istrue(display_)) {
      fprintf(1.0,TM("\\n%d %f\\n"),(CL(gen),bval));
      
    }
    
    x = startPop(bindx,c_p);
    if (istrue(opts(2.0)==0.0)) {
      //binary
      x = b2f(x,bounds,bits);
      bPop(bFoundIn,c_p) = (BR(gen),b2f(startPop(bindx,colon(1.0,1.0,numVar)),bounds,bits),startPop(bindx,xZomeLength) \
        );
    } else {
      
      bPop(bFoundIn,c_p) = (BR(gen),startPop(bindx,c_p));
    }
    
    if (istrue(collectTrace)) {
      traceInfo(gen,1.0) = gen;
      //current generation
      traceInfo(gen,2.0) = startPop(bindx,xZomeLength);
      //Best fittness
      traceInfo(gen,3.0) = mean(startPop(c_p,xZomeLength));
      //Avg fittness
    }
    
    
    
    
    
    
    
    call_stack_end;
    
    // nargin, nargout exit code
    nargin_val=old_nargin; nargout_val=old_nargout;
    
    // function exit code
    bounds.setname(NULL); evalFN.setname(NULL); evalOps.setname(NULL); startPop.setname(NULL); opts.setname(NULL) \
      ; termFN.setname(NULL); termOps.setname(NULL); selectFN.setname(NULL); selectOps.setname(NULL); xOverFNs.setname( \
      NULL); xOverOps.setname(NULL); mutFNs.setname(NULL); mutOps.setname(NULL); 
    x__o=x; endPop__o=endPop; bPop__o=bPop; traceInfo__o=traceInfo; 
    return x_M;
    end_scope
  }
  
  
  Mm ga() {
    begin_scope
    double old_nargin=nargin_val; nargin_val=0.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(bounds); dMm(evalFN); dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm( \
      selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(x__o); dMm(endPop__o); dMm(bPop__o);  \
      dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=1.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(evalFN); dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps) \
      ; dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(x__o); dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o) \
      ; 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=2.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs) \
      ; dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(x__o); dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=3.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps) \
      ; dMm(mutFNs); dMm(mutOps); dMm(x__o); dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=4.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs) \
      ; dMm(mutOps); dMm(x__o); dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=5.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps) \
      ; dMm(x__o); dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=6.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(x__o) \
      ; dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=7.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(x__o); dMm(endPop__o) \
      ; dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=8.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(x__o); dMm(endPop__o); dMm(bPop__o) \
      ; dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps) \
     {
    begin_scope
    double old_nargin=nargin_val; nargin_val=9.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(x__o); dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o) \
      ; 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=10.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(x__o); dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=11.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(mutFNs); dMm(mutOps); dMm(x__o); dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, Mm mutFNs) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=12.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(mutOps); dMm(x__o); dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, Mm mutFNs, Mm mutOps) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=13.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=1.0; nargout_set=1;
    dMm(x__o); dMm(endPop__o); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return(x__o);
    end_scope
  }
  
  Mm ga(i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=0.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(bounds); dMm(evalFN); dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm( \
      selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=1.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(evalFN); dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps) \
      ; dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=2.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs) \
      ; dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=3.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps) \
      ; dMm(mutFNs); dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=4.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs) \
      ; dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=5.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps) \
      ; dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=6.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(bPop__o) \
      ; dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, i_o_t, Mm& x__o, Mm& endPop__o) \
     {
    begin_scope
    double old_nargin=nargin_val; nargin_val=7.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o) \
      ; 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, i_o_t, Mm& x__o, \
     Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=8.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=9.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=10.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=11.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(mutFNs); dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, Mm mutFNs, i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=12.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(mutOps); dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, Mm mutFNs, Mm mutOps, i_o_t, Mm& x__o, Mm& endPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=13.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=2.0; nargout_set=1;
    dMm(bPop__o); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=0.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(bounds); dMm(evalFN); dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm( \
      selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=1.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(evalFN); dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps) \
      ; dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=2.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs) \
      ; dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=3.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps) \
      ; dMm(mutFNs); dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=4.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs) \
      ; dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=5.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps) \
      ; dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) \
     {
    begin_scope
    double old_nargin=nargin_val; nargin_val=6.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(traceInfo__o) \
      ; 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, i_o_t, Mm& x__o, Mm& endPop__o, \
     Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=7.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, i_o_t, Mm& x__o, \
     Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=8.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=9.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=10.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(xOverOps); dMm(mutFNs); dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=11.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(mutFNs); dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, Mm mutFNs, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=12.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(mutOps); dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, Mm mutFNs, Mm mutOps, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=13.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=3.0; nargout_set=1;
    dMm(traceInfo__o); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=0.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(bounds); dMm(evalFN); dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm( \
      selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=1.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(evalFN); dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps) \
      ; dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=2.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(evalOps); dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs) \
      ; dMm(xOverOps); dMm(mutFNs); dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=3.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(startPop); dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps) \
      ; dMm(mutFNs); dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) \
     {
    begin_scope
    double old_nargin=nargin_val; nargin_val=4.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(opts); dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs) \
      ; dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm&  \
    traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=5.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(termFN); dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps) \
      ; 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, \
     Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=6.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(termOps); dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, i_o_t, Mm& x__o, Mm& endPop__o, \
     Mm& bPop__o, Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=7.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(selectFN); dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, i_o_t, Mm& x__o, \
     Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=8.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(selectOps); dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=9.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(xOverFNs); dMm(xOverOps); dMm(mutFNs); dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=10.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(xOverOps); dMm(mutFNs); dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=11.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(mutFNs); dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }
  
  Mm ga(Mm bounds, Mm evalFN, Mm evalOps, Mm startPop, Mm opts, Mm termFN, Mm termOps, Mm selectFN, Mm selectOps, \
     Mm xOverFNs, Mm xOverOps, Mm mutFNs, i_o_t, Mm& x__o, Mm& endPop__o, Mm& bPop__o, Mm& traceInfo__o) {
    begin_scope
    double old_nargin=nargin_val; nargin_val=12.0; nargin_set=1;
    double old_nargout=nargout_val; nargout_val=4.0; nargout_set=1;
    dMm(mutOps); 
    ga(bounds, evalFN, evalOps, startPop, opts, termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, \
       mutOps, i_o, x__o, endPop__o, bPop__o, traceInfo__o);
    nargout_val=old_nargout;
    nargin_val=old_nargin;
    return x_M;
    end_scope
  }