-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjsllab.min.js
More file actions
1 lines (1 loc) · 4.48 KB
/
jsllab.min.js
File metadata and controls
1 lines (1 loc) · 4.48 KB
1
function sleep(e){return new Promise(i=>setTimeout(i,e))}class Model{constructor(e){this.filename=e,this._filename=_malloc(4),_wasm_string_allocation(this._filename,this.filename.length+1);for(var i=0;i<this.filename.length;i++)_wasm_insert_character_in_str(this._filename,this.filename.length,i,new TextEncoder().encode(this.filename)[i]);_wasm_string_insert_terminator(this._filename,this.filename.length+1,i),this._model=_malloc(4);try{_wasm_load_model(this._model,this._filename)}catch{_wasm_free_array(this._filename),_free(this._filename),_free(this._model)}this.number_of_models=0,this._models=null}free(){try{_wasm_free_model(this._model),number_of_models>0&&(_wasm_free_multiple_model_without_learning_parameters(this._models,this.number_of_models),_free(this._models)),_wasm_free_array(this._filename),_free(this._filename),_free(this._model)}catch{this.number_of_models>0&&_free(this._models),_wasm_free_array(this._filename),_free(this._filename),_free(this._model)}}make_multi_thread(e){e<1||this.number_of_models>0||(this._models=_malloc(4),_wasm_copy_multiple_model_without_learning_parameters(this._model,this._models,e))}reset(){_wasm_reset_model(this._model),_wasm_reset_multiple_model_without_learning_parameters(this._models,this,number_of_threads)}single_feed_forward(e,i,t,s){var h=_malloc(4),l=i*t*s;_wasm_init_float_array(h,l);for(var m=0;m<l;m++)_wasm_fill_float_array(h,m,e[m]);_wasm_feed_forward(this._model,i,t,s,h);for(var n=_wasm_get_output_dimension_from_model(this._model),a=[],m=0;m<n;m++)a.push(_wasm_get_float_value_from_model_output(this._model,m));return _wasm_free_array(h),_free(h),a}multiple_feed_forward(e,i,t,s){if(this.number_of_threads<1)return null;var h=_malloc(4),l=i*t*s;_wasm_init_float_matrix(h,this.number_of_threads,this._models,i,t,s,h);for(var m=0;m<this.number_of_threads;m++)for(var n=0;n<l;n++)_wasm_fill_float_matrix(h,m,n,e[m][n]);_wasm_feed_forward_opt_multi_thread(this._model,this._models,this.number_of_threads,i,t,s,h),_wasm_get_output_dimension_from_model(this._model);for(var a=[],m=0;m<this.number_of_threads;m++){for(var f=[],n=0;n<output_dimension;n++)f.push(_wasm_get_float_value_from_models_output(this._models,m,n));a.push(f)}return _wasm_free_matrix(h,this.number_of_threads),_free(h),a}}class DQN{constructor(e){this.filename=e,this._filename=_malloc(4),_wasm_string_allocation(this._filename,this.filename.length+1);for(var i=0;i<this.filename.length;i++)_wasm_insert_character_in_str(this._filename,this.filename.length,i,new TextEncoder().encode(this.filename)[i]);_wasm_string_insert_terminator(this._filename,this.filename.length+1,i),this._model=_malloc(4);try{_wasm_load_dueling_categorical_dqn(this._model,this._filename)}catch{_wasm_free_array(this._filename),_free(this._filename),_free(this._model)}}free(){try{_wasm_free_dueling_categorical_dqn(this._model),_wasm_free_array(this._filename),_free(this._filename),_free(this._model)}catch{_wasm_free_array(this._filename),_free(this._filename),_free(this._model)}}reset(){_wasm_reset_dueling_categorical_dqn(this._model)}q_function(e,i,t){var s=_malloc(4),h=i;_wasm_init_float_array(s,h);for(var l=0;l<h;l++)_wasm_fill_float_array(s,l,e[l]);var m=_malloc(4);_wasm_init_float_array(m,t),_wasm_compute_q_function(this._model,s,m,i,t);for(var n=t,a=[],l=0;l<n;l++)a.push(_wasm_get_float_value_from_array(this.c_outputs,l));return _wasm_free_array(s),_wasm_free_array(m),_free(s),_free(m),a}get_best_action(e){for(var i=0,t=e[0],s=1;s<e.length;s++)e[s]>t&&(t=e[s],i=s);return i}}class Genome{constructor(e,i,t){this.filename=e,this.input_size=i,this.output_size=t,this._filename=_malloc(4),_wasm_string_allocation(this._filename,this.filename.length+1);for(var s=0;s<this.filename.length;s++)_wasm_insert_character_in_str(this._filename,this.filename.length,s,new TextEncoder().encode(this.filename)[s]);_wasm_string_insert_terminator(this._filename,this.filename.length+1,s),this._model=_malloc(4);try{_wasm_load_genome(this._model,this._filename,i,t)}catch{_wasm_free_array(this._filename),_free(this._filename),_free(this._model)}}free(){try{_wasm_free_genome(this._model),_wasm_free_array(this._filename),_free(this._filename),_free(this._model)}catch{_wasm_free_array(this._filename),_free(this._filename),_free(this._model)}}ff(e){var i=_malloc(4),t=_malloc(4),s=this.input_size;_wasm_init_float_array(i,s);for(var h=0;h<s;h++)_wasm_fill_float_array(i,h,e[h]);_wasm_ff_genome(this._model,i,t);for(var l=this.output_size,m=[],h=0;h<l;h++)m.push(_wasm_get_float_value_from_array(t,h));return _wasm_free_array(i),_wasm_free_array(t),_free(i),_free(t),m}}