Bat with Levy Jump
by sebadiaz
HTML
<body>
<div id="graph"></div>
</body>
JavaScript
function ln(val) {
return Math.log(val) / Math.log(Math.E);
}
function pollarMethod() {
do {
U1 = Math.random();
U2 = Math.random();
V1 = 2 * U1 - 1.0;
V2 = 2 * U2 - 1.0;
S = V1 * V1 + V2 * V2;
}
while (S >= 1);
X = V1 * Math.sqrt((-2 * ln(S)) / S);
return X;
}
function poissonProcess(lambda, T) {
var t = 0;
var k = 0;
var S = new Array();
while (t <= T) {
var r = Math.random();
t = t - ln(r) / lambda;
if (t > T) return S;
S[k] = t;
k = k + 1;
}
return S;
}
function levyJump(t, b, c, lambda) {
var L = b * t;
L = L + Math.sqrt(c) * pollarMethod();
var nbLoop = poissonProcess(lambda, t);
for (var i = 0; i < nbLoop; i++) {
L += Math.random();
}
return L;
}
function fOptimize(x) {
return x[0] * x[0] + x[1] * x[1]*x[1];
}
function bat(fOptimize, nbx, nbbat, maxiter, fmin1, fmax1, fmin2, fmax2) {
var xxh = new Array();
var vv = new Array();
var xx = new Array();
var ff1 = new Array();
var ff2 = new Array();
var rr = new Array();
var rrOrig = new Array();
var AA = new Array();
var globalSolution = 99999999;
var XSTAR = new Array();
for (var j = 0; j < nbx; j++)
XSTAR[j] = Math.random();
for (var i = 0; i < nbbat; i++) {
xx[i] = new Array();
vv[i] = new Array();
ff1[i] = new Array();
ff2[i] = new Array();
rr[i] = Math.random();
rrOrig[i] = rr[i];
AA[i] = Math.random();
for (var j = 0; j < nbx; j++) {
xx[i][j] = Math.random() ;
vv[i][j] = Math.random() ;
ff1[i][j] = Math.random() ;
ff2[i][j] = Math.random() ;
}
}
var t = 0;
while (t < maxiter) {
var actualSolution = 99999999;
var xstar = new Array();
for (var j = 0; j < nbx; j++)
xstar[j] = Math.random();
for (var i = 0; i < nbbat;...