mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-13 23:14:53 +09:00
New NN, added debt system
This commit is contained in:
1 parent
616bb9cc8f
commit
d719a73328
2 files changed
+35
-80
No files matched your search
+30
-78
@@ -33,12 +33,14 @@ function sigmoid3(x)
|
||||
//carry - carry for item X slave Y
|
||||
//prev_req - Numreq for previous request for item X slave Y
|
||||
//* doleinfo_last - Object with 2 values for last "tick period": numreq - total number or requests for item, numslave - number of slaves requesting that item
|
||||
//debt - debt for item X slave Y
|
||||
|
||||
//Returns: Array of 3 elements
|
||||
//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,numreq_total_adj)
|
||||
//3.New debt
|
||||
function Dose(numreq,instore,store_last_tick,dole,carry,prev_req,numreq_total_adj,debt)
|
||||
{
|
||||
numreq=Number(numreq);
|
||||
instore=Number(instore);
|
||||
@@ -47,77 +49,37 @@ function Dose(numreq,instore,store_last_tick,dole,carry,prev_req,numreq_total_ad
|
||||
|
||||
var b=Math.trunc(prev_req/instore_adj*numreq);
|
||||
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,numreq_total_adj,store_last_tick];//5..11
|
||||
var inp2=[prev_req/numreq,numreq/numreq_total_adj,store_last_tick/numreq_total_adj,prev_req/instore_adj,b,numreq_total_adj,store_last_tick,debt];//5..12
|
||||
var inputs=inp1.concat(inp2);
|
||||
var internal=new Array(20).fill(0);
|
||||
var outputs=[0,0,0,0];
|
||||
//NN: Please don't touch :), code is generated
|
||||
|
||||
internal[2]=internal[6]*7.267292023;
|
||||
internal[2]=internal[2]+inputs[6]*-0.5385144949;
|
||||
internal[2]=internal[2]+inputs[4]*7.982471466;
|
||||
internal[2]=internal[2]+inputs[7]*-4.120764256;
|
||||
internal[2]=internal[2]+internal[8]*0.6542916298;
|
||||
internal[2]=internal[2]+internal[10]*1.781727672;
|
||||
internal[2]=internal[2]+internal[12]*-0.3893937171;
|
||||
internal[2]=sigmoid0(internal[2]);
|
||||
internal[6]=inputs[7]*-1.472857833;
|
||||
internal[6]=internal[6]+inputs[2]*0.8619997501;
|
||||
internal[6]=internal[6]+inputs[9]*1.951734781;
|
||||
internal[6]=internal[6]+inputs[3]*-1.689901233;
|
||||
internal[6]=internal[6]+internal[9]*3.475469828;
|
||||
internal[6]=sigmoid0(internal[6]);
|
||||
internal[8]=sigmoid0(internal[8]);
|
||||
internal[9]=inputs[10]*-1.441205978;
|
||||
internal[9]=internal[9]+inputs[1]*5.842033863;
|
||||
internal[9]=internal[9]+inputs[9]*2.132386684;
|
||||
internal[9]=internal[9]+inputs[5]*0.9830219746;
|
||||
internal[9]=sigmoid0(internal[9]);
|
||||
internal[10]=internal[14]*1.186838627;
|
||||
internal[10]=internal[10]+inputs[4]*2.864197493;
|
||||
internal[10]=internal[10]+inputs[2]*1.245233774;
|
||||
internal[10]=internal[10]+inputs[7]*-3.596544981;
|
||||
internal[10]=internal[10]+inputs[5]*0.2605635822;
|
||||
internal[10]=internal[10]+inputs[6]*0.4522094429;
|
||||
internal[10]=internal[10]+inputs[0]*-0.9868286252;
|
||||
internal[10]=internal[10]+1.0*0.9270827174;
|
||||
internal[10]=sigmoid0(internal[10]);
|
||||
internal[12]=inputs[11]*-0.7495238185;
|
||||
internal[12]=internal[12]+inputs[10]*-0.2499841005;
|
||||
internal[12]=internal[12]+inputs[7]*-1.974439263;
|
||||
internal[12]=internal[12]+1.0*1.85799706;
|
||||
internal[12]=internal[12]+inputs[0]*0.413690418;
|
||||
internal[12]=internal[12]+inputs[9]*1.894246459;
|
||||
internal[12]=internal[12]+inputs[4]*-2.371104717;
|
||||
internal[12]=sigmoid0(internal[12]);
|
||||
internal[14]=inputs[9]*-1.812304616;
|
||||
internal[14]=internal[14]+inputs[10]*-0.3029920459;
|
||||
internal[14]=internal[14]+inputs[5]*-0.3064728975;
|
||||
internal[14]=internal[14]+inputs[1]*0.5113605857;
|
||||
internal[14]=internal[14]+inputs[6]*-0.3487350941;
|
||||
internal[14]=internal[14]+inputs[0]*0.701588273;
|
||||
internal[14]=internal[14]+1.0*0.693169713;
|
||||
internal[14]=internal[14]+inputs[4]*-1.443944097;
|
||||
internal[14]=internal[14]+inputs[2]*-2.836822033;
|
||||
internal[14]=internal[14]+inputs[11]*-0.6553236842;
|
||||
internal[14]=internal[14]+inputs[3]*-1.075786948;
|
||||
internal[14]=internal[14]+inputs[8]*0.2613089979;
|
||||
internal[14]=sigmoid0(internal[14]);
|
||||
outputs[0]=inputs[1]*1.726672769;
|
||||
outputs[0]=sigmoid0(outputs[0]);
|
||||
outputs[0]=inputs[7]*0.8058582544;
|
||||
outputs[0]=sigmoid2(outputs[0]);
|
||||
outputs[1]=sigmoid0(outputs[1]);
|
||||
outputs[2]=sigmoid0(outputs[2]);
|
||||
outputs[3]=internal[2]*-2.092440128;
|
||||
outputs[3]=inputs[6]*0.2294657379;
|
||||
outputs[3]=sigmoid0(outputs[3]);
|
||||
|
||||
var res1=Math.round(Number(outputs[0])*numreq)+Math.round(outputs[3]);
|
||||
debt=debt || 0;
|
||||
if (outputs[0]>0.99) outputs[0]=1.0;
|
||||
|
||||
var res1=Number(outputs[0])*numreq+outputs[3]+debt;
|
||||
var res_capped=Math.round(res1);
|
||||
|
||||
if (res_capped>numreq) res_capped=numreq;
|
||||
if (res_capped>instore) res_capped=instore;
|
||||
if (res_capped<0) res_capped=0;
|
||||
|
||||
res1=res1 || 0;
|
||||
res_capped=res_capped || 0;//Safeguard against wrong values
|
||||
debt=res1-res_capped;
|
||||
debt_cap=Math.round(numreq*1.5)+5;
|
||||
if (debt>debt_cap) debt=debt_cap;
|
||||
|
||||
if (res1>numreq) res1=numreq;
|
||||
if (res1>instore) res1=instore;
|
||||
if (res1<0) res1=0;
|
||||
res1=res1 || 0;//Safeguard against wrong values
|
||||
carry=sigmoid0(outputs[2]*carry+outputs[0]) || 0;
|
||||
return [res1,sigmoid0(outputs[1]),carry];
|
||||
return [res_capped,dole+outputs[1],carry,debt];
|
||||
}
|
||||
|
||||
//TICK - Updates values for item X, should be called once for each item for each round of all slaves requesting that item
|
||||
@@ -135,26 +97,16 @@ function Tick(instore,dole,store_last_tick,numreq_total_adj)
|
||||
{
|
||||
var instore_adj=instore;
|
||||
if (instore_adj==0) instore_adj=0.1;
|
||||
var inputs=[instore,dole,store_last_tick/instore_adj,store_last_tick/numreq_total_adj];
|
||||
var inputs=[instore,dole,store_last_tick/instore_adj,store_last_tick/numreq_total_adj,store_last_tick,numreq_total_adj];
|
||||
var internal=new Array(10).fill(0);
|
||||
var outputs=[0,0];
|
||||
//NN: Please don't touch :), code is generated
|
||||
|
||||
internal[2]=inputs[3]*-0.3051533401;
|
||||
internal[2]=internal[2]+1.0*1.657034278;
|
||||
internal[2]=sigmoid0(internal[2]);
|
||||
internal[5]=inputs[1]*1.691301703;
|
||||
internal[5]=internal[5]+inputs[0]*1.238131285;
|
||||
internal[5]=sigmoid0(internal[5]);
|
||||
outputs[0]=1.0*0.309109062;
|
||||
outputs[0]=outputs[0]*inputs[0]*1.836197853;
|
||||
outputs[0]=sigmoid1(outputs[0]);
|
||||
outputs[1]=inputs[3]*1.100017905;
|
||||
outputs[1]=outputs[1]+internal[5]*0.9273151159;
|
||||
outputs[1]=outputs[1]+1.0*-2.498474121;
|
||||
outputs[1]=outputs[1]+inputs[0]*1.087127209;
|
||||
outputs[1]=outputs[1]+internal[2]*-0.896425426;
|
||||
outputs[1]=sigmoid0(outputs[1]);
|
||||
outputs[0]=inputs[3]*0.9364774823;
|
||||
outputs[0]=outputs[0]*1.0*0.4590721726;
|
||||
outputs[0]=sigmoid2(outputs[0]);
|
||||
outputs[1]=outputs[0]*1.828422785;
|
||||
outputs[1]=sigmoid3(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
|
||||
@@ -164,4 +116,4 @@ outputs[1]=sigmoid0(outputs[1]);
|
||||
return [sigmoid0(outputs[0]),avg];
|
||||
}
|
||||
|
||||
module.exports = {Dose,Tick}
|
||||
module.exports = {Dose,Tick}
|
||||
@@ -33,6 +33,7 @@ class neuralDole {
|
||||
this.carry = {}
|
||||
this.lastRequest = {}
|
||||
this.stats=[]
|
||||
this.debt= {}
|
||||
|
||||
setInterval(()=>{
|
||||
for(let name in this.items){
|
||||
@@ -71,7 +72,8 @@ class neuralDole {
|
||||
this.dole[object.name],
|
||||
this.carry[object.name+" "+object.instanceID] || 0,
|
||||
this.lastRequest[object.name+"_"+object.instanceID+"_"+object.instanceName] || 0,
|
||||
this.getRequestStats(object.name,5)
|
||||
this.getRequestStats(object.name,5),
|
||||
this.debt[object.name+" "+object.instanceID] || 0
|
||||
)
|
||||
if ((this.stats[object.name] || []).length>0)
|
||||
{
|
||||
@@ -84,6 +86,7 @@ class neuralDole {
|
||||
//2.New carry for item X slave Y
|
||||
this.dole[object.name] = magicData[1]
|
||||
this.carry[object.name+" "+object.instanceID] = magicData[2]
|
||||
this.debt[object.name+" "+object.instanceID] = magicData[3]
|
||||
|
||||
// Remove item from DB and send it
|
||||
if(this.items.removeItem({count: magicData[0], name: object.name})){
|
||||
@@ -177,4 +180,4 @@ function doleDivider({
|
||||
module.exports = {
|
||||
doleDivider,
|
||||
neuralDole
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user