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;...