/** | |
* @classdesc CPPN class. | |
*/ | |
class CPPN { | |
/** | |
* @constructor | |
* @param x_dim {number} - Number of terrain steps to generate | |
* @param input_dim {number} - Dimension of the input encoding vector | |
*/ | |
constructor(x_dim, input_dim){ | |
this.x_dim = x_dim; | |
this.input_dim = input_dim; | |
this.cppn_model = window.cppn_model; | |
} | |
/** | |
* Generates the terrain shapes with the CPPN model. | |
* @param input_vector {Array} - 3-dimensional array that encodes the CPPN | |
* @returns {Array} - Array of y-coordinates of the terrain shapes : [[y_ground, y_ceiling] | |
*/ | |
generate(input_vector){ | |
let x = [...Array(this.x_dim).keys()]; | |
let scaled_x = x.map(e => e / (this.x_dim - 1)); | |
let x_vec = scaled_x.map(e => [e]); | |
let final_input = []; | |
for(let i = 0; i < this.x_dim; i++){ | |
final_input.push([x_vec[i].concat(input_vector)]); | |
} | |
final_input = tf.tensor(final_input); | |
return this.cppn_model.predict(final_input.reshape([this.x_dim, this.input_dim + 1])); | |
} | |
} |