Esempio n. 1
0
void svoGNGEuDel(svo_gng_eu_t *gng_eu)
{
    if (gng_eu->beta_n)
        BOR_FREE(gng_eu->beta_n);
    if (gng_eu->beta_lambda_n)
        BOR_FREE(gng_eu->beta_lambda_n);

    if (gng_eu->net){
        borNetDel2(gng_eu->net, nodeFinalDel, gng_eu,
                              delEdge, gng_eu);
    }

    if (gng_eu->err_heap)
        borPairHeapDel(gng_eu->err_heap);

    if (gng_eu->nn)
        borNNDel(gng_eu->nn);

    if (gng_eu->params.dim == 2){
        borVec2Del((bor_vec2_t *)gng_eu->tmpv);
    }else if (gng_eu->params.dim == 3){
        borVec3Del((bor_vec3_t *)gng_eu->tmpv);
    }else{
        borVecDel(gng_eu->tmpv);
    }

    BOR_FREE(gng_eu);
}
Esempio n. 2
0
static void checkCorrect3(int ID, size_t num)
{
    el_t *els, *el;
    int *ids;
    bor_pairheap_t *heap;
    bor_pairheap_node_t *n;
    size_t i;
    FILE *fout1, *fout2;
    char fn[300];
    bor_rand_t r;

    borRandInit(&r);

    sprintf(fn, "regressions/tmp.TSPairHeap.rand-%d.out", ID);
    fout1 = fopen(fn, "w");
    sprintf(fn, "regressions/TSPairHeap.rand-%d.out", ID);
    fout2 = fopen(fn, "w");

    els = randomEls(num);
    ids = BOR_ALLOC_ARR(int, num);

    heap = borPairHeapNew(ltEl, NULL);
    for (i = 0; i < num; i++){
        borPairHeapAdd(heap, &els[i].node);
    }

    for (i = 0; i < num; i += 10){
        els[i].val += borRand(&r, 1, 100);
        borPairHeapUpdate(heap, &els[i].node);
    }

    i = 0;
    while (!borPairHeapEmpty(heap)){
        n = borPairHeapExtractMin(heap);
        el = bor_container_of(n, el_t, node);
        fprintf(fout1, "%d\n", el->val);

        el = bor_container_of(n, el_t, node);
        ids[i] = el->id;
        i++;
    }

    qsort(els, num, sizeof(el_t), cmpIncEl);
    for (i = 0; i < num; i++){
        fprintf(fout2, "%d\n", els[i].val);
    }


    borPairHeapDel(heap);
    free(els);
    free(ids);

    fclose(fout1);
    fclose(fout2);
}
Esempio n. 3
0
static void _svoGNGInit(svo_gng_t *gng)
{
    const void *is;
    svo_gng_node_t *n1 = NULL, *n2 = NULL;
    size_t i;
    bor_real_t maxbeta;

    gng->cycle = 1L;

    // initialize error heap
    if (gng->err_heap)
        borPairHeapDel(gng->err_heap);
    gng->err_heap = borPairHeapNew(errHeapLT, (void *)gng);

    // precompute beta^n
    if (gng->beta_n)
        BOR_FREE(gng->beta_n);
    gng->beta_n = BOR_ALLOC_ARR(bor_real_t, gng->params.lambda);
    gng->beta_n[0] = gng->params.beta;
    for (i = 1; i < gng->params.lambda; i++){
        gng->beta_n[i] = gng->beta_n[i - 1] * gng->params.beta;
    }

    // precompute beta^(n * lambda)
    if (gng->beta_lambda_n)
        BOR_FREE(gng->beta_lambda_n);

    maxbeta = gng->beta_n[gng->params.lambda - 1];

    gng->beta_lambda_n_len = 1000;
    gng->beta_lambda_n = BOR_ALLOC_ARR(bor_real_t, gng->beta_lambda_n_len);
    gng->beta_lambda_n[0] = maxbeta;
    for (i = 1; i < gng->beta_lambda_n_len; i++){
        gng->beta_lambda_n[i] = gng->beta_lambda_n[i - 1] * maxbeta;
    }


    if (gng->ops.init){
        OPS(gng, init)(&n1, &n2, OPS_DATA(gng, init));
    }else{
        is = OPS(gng, input_signal)(OPS_DATA(gng, input_signal));
        n1 = OPS(gng, new_node)(is, OPS_DATA(gng, new_node));

        is = OPS(gng, input_signal)(OPS_DATA(gng, input_signal));
        n2 = OPS(gng, new_node)(is, OPS_DATA(gng, new_node));
    }

    nodeAdd(gng, n1);
    nodeAdd(gng, n2);
    edgeNew(gng, n1, n2);
}
Esempio n. 4
0
void svoGNGDel(svo_gng_t *gng)
{
    if (gng->beta_n)
        BOR_FREE(gng->beta_n);
    if (gng->beta_lambda_n)
        BOR_FREE(gng->beta_lambda_n);

    if (gng->net){
        borNetDel2(gng->net, nodeFinalDel, gng,
                              delEdge, gng);
    }

    if (gng->err_heap)
        borPairHeapDel(gng->err_heap);

    BOR_FREE(gng);
}