gUpdate2 = gpu.createKernel(function(agents){
let dA = 1;
let dB = 0.5;
let feed = 0.029;
let kill = 0.057;
let lapA = 0;
let lapB = 0;
for (let i = -1; i <= 1; i++) {
let p = (this.thread.y + i + 640) % 640;
for (let j = -1; j <= 1; j++) {
let q = (this.thread.x + j + 640) % 640;
let vpq = agents[p][q];
let lapInc = 0;
if (Math.abs(i) > 0) lapInc++;
if (Math.abs(j) > 0) lapInc++;
let lap = -1;
if (lapInc == 1) lap = 0.2;
if (lapInc == 2) lap = 0.05;
lapA += vpq[0] * lap;
lapB += vpq[1] * lap;
}
}
let v = agents[this.thread.y][this.thread.x];
let a = v[0];
let b = v[1];
let mut = 0.02;
let nA = a + (dA * lapA) - (a * b * b) + feed * (1-a) + (Math.random() * mut * 2) - mut;
let nB = b + (dB * lapB) + (a * b * b) - (kill + feed) * b + (Math.random() * mut * 2) - mut;
if (nA < 0) nA = 0;
if (nA > 1) nA = 1;
if (nB < 0) nB = 0;
if (nB > 1) nB = 1;
return [nA, nB];
}).setPipeline(true).setImmutable(true).setOutput([640, 640]);