ClementRomac's picture
ClementRomac HF staff
Added interactive demo with some policies
09a6f7f
/**
* @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]));
}
}