// Crossover // // crossover - crossover // // ⎧ -1 if x0_i < x1_i and x0_i-1 > x1_i-1 // y_i = ⎨ 0 if x = 0 // ⎩ 1 if x0_i > x1_i and x0_i-1 < x1_i-1 // // Inputs: 2 // Outputs: 1 // Constants: 0 #include #include "ts.h" ts_parameter_t const ts_crossover_p = { .n_inputs = 2, .n_outputs = 1, .n_constants = 0, .params_size = 0 }; uint_t ts_crossover_offset( ts_constant_t const *c ) { ( void )c; return ( 1 ); } int ts_crossover( fp_t * const *y, uint_t y_n, fp_t const * const *x, uint_t x_n, uint_t n, ts_constant_t const *c ) { TS_PROLOGUE( ts_crossover_p ); (void)c; if ( n < 2 ) return -1; uint_t xi; uint_t yi; xi = 1; yi = 1; y[0][0] = 0; for( ; xi < n; xi++, yi++ ) { if( x[0][xi] > x[1][xi] && x[0][xi - 1] <= x[1][xi - 1] ) y[0][yi] = 1; else if( x[0][xi] < x[1][xi] && x[0][xi - 1] >= x[1][xi - 1] ) y[0][yi] = -1; else y[0][yi] = 0; } return 0; }