From ce9e1d876af8b772944ad4a5186f4ef210a6abdf Mon Sep 17 00:00:00 2001 From: axapaxa123 <49201376+axapaxa123@users.noreply.github.com> Date: Wed, 10 Apr 2019 01:14:39 +0200 Subject: [PATCH] Updated neural network and interface --- lib/dole_nn_base.js | 68 +++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 36 deletions(-) diff --git a/lib/dole_nn_base.js b/lib/dole_nn_base.js index 0aeaf97c..e4dda0b6 100644 --- a/lib/dole_nn_base.js +++ b/lib/dole_nn_base.js @@ -38,47 +38,41 @@ function sigmoid3(x) //0.Number of items to give in that dose //1.New dole for item X //2.New carry for item X slave Y -function Dose(numreq,instore,store_last_tick,dole,carry,prev_req,doleinfo_last) +function Dose(numreq,instore,store_last_tick,dole,carry,prev_req,numreq_total_adj) { + numreq=Number(numreq); + instore=Number(instore); var instore_adj=instore; if (instore_adj==0) instore_adj=0.1; - var numreq_total_adj=doleinfo_last.numreq; - if (numreq_total_adj==0) numreq_total_adj=0.1; - var a=(doleinfo_last.numslave)*numreq; - if (a>0) {a=(doleinfo_last.numreq)/a;} else {a=1000;} var b=Math.trunc(prev_req/instore_adj*numreq); - var inputs=[numreq,instore_adj,store_last_tick/numreq,dole,carry,prev_req/numreq,doleinfo_last.numslave,numreq/numreq_total_adj,a,store_last_tick/numreq_total_adj,prev_req/instore,b]; + var inp1=[numreq,instore_adj,store_last_tick/numreq,dole,carry];//0..4 + var inp2=[prev_req/numreq,numreq/numreq_total_adj,store_last_tick/numreq_total_adj,prev_req/instore_adj,b];//5..9 + var inputs=inp1.concat(inp2); var internal=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; var outputs=[0,0,0]; //NN: Please don't touch :), code is generated -internal[11]=inputs[1]*2.584747791; -internal[11]=internal[11]+inputs[4]*0.9939581156; -internal[11]=internal[11]+inputs[5]*-0.5315227509; -internal[11]=internal[11]+inputs[3]*0.2037106603; -internal[11]=internal[11]+inputs[2]*1.38696003; -internal[11]=internal[11]+inputs[6]*-0.5434055328; -internal[11]=internal[11]+inputs[8]*-0.4344435036; -internal[11]=internal[11]+1.0*-1.461762667; -internal[11]=sigmoid0(internal[11]); -outputs[0]=inputs[0]*0.4289886355; -outputs[0]=outputs[0]+internal[11]*1.96782124; -outputs[0]=outputs[0]+inputs[3]*-2.196558237; -outputs[0]=sigmoid3(outputs[0]); -outputs[1]=outputs[0]*3.200549364; -outputs[1]=outputs[1]+inputs[7]*-0.3701510429; +outputs[0]=inputs[2]*3.101320028; +outputs[0]=outputs[0]+inputs[7]*0.5471593142; +outputs[0]=outputs[0]+inputs[3]*2.691268921; +outputs[0]=outputs[0]+outputs[1]*-1.64255929; +outputs[0]=outputs[0]+inputs[6]*0.7746122479; +outputs[0]=sigmoid0(outputs[0]); +outputs[1]=inputs[2]*-0.9946503043; +outputs[1]=outputs[1]+inputs[1]*0.2128598392; outputs[1]=sigmoid0(outputs[1]); -outputs[2]=sigmoid0(outputs[2]); +outputs[2]=sigmoid2(outputs[2]); + outputs[0]=Number(outputs[0]); if (outputs[0]<0) outputs[0]=0; outputs[0]=outputs[0]*numreq; - var res1=Math.trunc(outputs[0]); + var res1=Math.round(outputs[0]); if (res1>numreq) res1=numreq; if (res1>instore) res1=instore; if (res1<0) res1=0; - carry=outputs[2]; - return [res1,outputs[1],carry]; + carry=sigmoid0(outputs[2]); + return [res1,sigmoid0(outputs[1]),carry]; } //TICK - Updates values for item X, should be called once for each item for each round of all slaves requesting that item @@ -92,31 +86,33 @@ outputs[2]=sigmoid0(outputs[2]); //Returns: Array of 2 elements //0.New dole for item X //1.Guessed percentage average of items supplied in last 10 ticks -function Tick(instore,dole,store_last_tick,doleinfo_last,doleinfo_new) +function Tick(instore,dole,store_last_tick,numreq_total_adj) { var instore_adj=instore; if (instore_adj==0) instore_adj=0.1; - var numreq_total_adj=doleinfo_last.numreq; - if (numreq_total_adj==0) numreq_total_adj=0.1; - var a=doleinfo_new.numreq; - if (a>0) {a=doleinfo_last.numreq/doleinfo_new.numreq;} else {a=1000;} - var aa=doleinfo_last.numslave*instore; - if (aa>0) {doleinfo_last.numreq/aa;} else {aa=1000;} - var inputs=[instore,dole,store_last_tick/instore_adj,a,doleinfo_last.numslave,doleinfo_new.numslave,aa,store_last_tick/numreq_total_adj]; + var inputs=[instore,dole,store_last_tick/instore_adj,store_last_tick/numreq_total_adj]; var internal=[0,0,0,0,0]; var outputs=[0,0]; //NN: Please don't touch :), code is generated -outputs[0]=sigmoid0(outputs[0]); -outputs[1]=inputs[7]*4.376355648; +internal[2]=sigmoid0(internal[2]); +outputs[0]=internal[2]*0.4049594998; +outputs[0]=outputs[0]+1.0*-5.026565075; +outputs[0]=outputs[0]+inputs[0]*0.9100194573; +outputs[0]=outputs[0]+inputs[1]*-1.063795686; +outputs[0]=sigmoid1(outputs[0]); +outputs[1]=outputs[0]*1.049500823; +outputs[1]=outputs[1]*inputs[0]*3.437163115; outputs[1]=sigmoid0(outputs[1]); + avg=outputs[1]; + if (numreq_total_adj<0.11) avg=1;//When no item's are requested, result is 0.1 ; In that case there is no deficit, so return 1 = 100% demand fulfilled if (avg>1) avg=1; if (avg<0) avg=0; - return [outputs[0],avg]; + return [sigmoid0(outputs[0]),avg]; } module.exports = {Dose,Tick}