Changeset 986


Ignore:
Timestamp:
Apr 2, 2008, 2:32:58 PM (16 years ago)
Author:
gah
Message:

added global pgapack_abort flag to plugin and abort operation to optimizer

Location:
trunk/optimizer/src
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/optimizer/src/Makefile.in

    r951 r986  
    1 e Makefile.in --
     1# Makefile.in --
    22#
    33#       This file is a Makefile for Sample TEA Extension.  If it has the name
  • trunk/optimizer/src/pgapack/pgapack/source/parallel.c

    r816 r986  
    6969
    7070#include "pgapack.h"
     71#include <setjmp.h>
     72
     73extern jmp_buf pgapack_jmpbuf;
     74extern int *pgapack_abortPtr;
    7175
    7276#define DEBUG_EVAL 0
     
    111115
    112116    PGAEvaluate(ctx, PGA_OLDPOP, f, comm);
     117       
    113118    if (rank == 0)
    114119        PGAFitness(ctx, PGA_OLDPOP);
     
    192197                PGASetEvaluation (ctx, p-1, pop, e);
    193198            }
    194     } else {
    195         for (p=0; p<ctx->ga.PopSize; p++)
     199    } else {
     200        for (p=0; p<ctx->ga.PopSize; p++) {
     201            if ((pgapack_abortPtr != NULL) && (*pgapack_abortPtr == 1)) {
     202                longjmp(pgapack_jmpbuf, 1);
     203            }
    196204            if (!PGAGetEvaluationUpToDateFlag(ctx, p, pop)) {
    197205                e = (*f)(ctx, p, pop);
    198206                PGASetEvaluation(ctx, p, pop, e);
    199             }
     207            }
     208        }
    200209    }
    201210    PGADebugExited("PGAEvaluateSeq");
     
    485494        PGAEvaluateSlave(ctx, pop, f, comm);
    486495    }
    487 
    488496    PGADebugExited("PGAEvaluate");
    489497}
  • trunk/optimizer/src/pgapack/pgapack/source/pga.c

    r816 r986  
    7171
    7272#include "pgapack.h"
     73#include <setjmp.h>
     74
     75jmp_buf pgapack_jmpbuf;
    7376
    7477/*U****************************************************************************
     
    112115     ndemes = PGAGetNumDemes    (ctx);
    113116
     117    if (setjmp(pgapack_jmpbuf)) {
     118        return;                 /* PGA pack was aborted. */
     119    }
    114120     /**********************************************************************/
    115121     /*              Global model, one island, one deme                    */
    116122     /**********************************************************************/
    117      if     ( (npops == 1) && (ndemes == 1) ) {
    118 
     123     if ( (npops == 1) && (ndemes == 1) ) {
    119124         PGARunGM(ctx, evaluate, comm);
    120125     }
  • trunk/optimizer/src/pgapack/pgapack/source/stop.c

    r816 r986  
    7171
    7272#include "pgapack.h"
     73
     74int *pgapack_abortPtr = NULL;
    7375
    7476/*U****************************************************************************
     
    377379    PGADebugExited("PGASetMaxSimilarityValue");
    378380}
     381
     382void PGASetAbortVar(int *abortPtr)
     383{
     384    pgapack_abortPtr = abortPtr;
     385}
  • trunk/optimizer/src/plugin_pgapack.c

    r903 r986  
    7979    dataPtr->popRepl = PGA_POPREPL_BEST;
    8080    dataPtr->popSize = 200;
    81 
    8281    return (ClientData)dataPtr;
    8382}
     83
     84int pgapack_abort = 0;
    8485
    8586/*
     
    103104    /* fake it here by just saying something like "rappture" */
    104105    int argc = 1; char *argv[] = {"rappture"};
     106
     107    pgapack_abort = 0;          /* FALSE */
     108    PGASetAbortVar(&pgapack_abort);
    105109
    106110    ctx = PGACreate(&argc, argv, PGA_DATATYPE_USER, envPtr->numParams,
     
    143147    PgapUnlinkContext2Env(ctx);
    144148
     149    if (pgapack_abort) {
     150        return RP_OPTIM_ABORTED;
     151    }
    145152    return RP_OPTIM_SUCCESS;
    146153}
     
    172179    status = (*envPtr->evalProc)(envPtr, paramPtr, envPtr->numParams, &fit);
    173180
     181    if (pgapack_abort) {
     182        fprintf(stderr, "==WARNING: run aborted!");
     183        return 0.0;
     184    }
     185       
    174186    if (status != RP_OPTIM_SUCCESS) {
    175187        fprintf(stderr, "==WARNING: run failed!");
  • trunk/optimizer/src/rp_optimizer_tcl.c

    r903 r986  
    1515 */
    1616#include "rp_optimizer.h"
     17
     18extern int pgapack_abort;
    1719
    1820/*
     
    6769__declspec( dllexport )
    6870#endif
     71
     72extern int pgapack_abort;
    6973
    7074int
     
    362366            return TCL_ERROR;
    363367        }
    364     }
    365 
    366     /*
    367      * OPTION:  get ?globPattern? ?-option?
    368      */
    369     else if (*option == 'g' && strcmp(option,"get") == 0) {
     368    } else if (*option == 'a' && strcmp(option,"abort") == 0) {
     369        int value;
     370
     371        if (objc < 3) {
     372            Tcl_WrongNumArgs(interp, 1, objv, "abort bool");
     373            return TCL_ERROR;
     374        }
     375        if (Tcl_GetBooleanFromObj(interp, objv[2], &value) != TCL_OK) {
     376            return TCL_ERROR;
     377        }
     378        pgapack_abort = value;
     379        return TCL_OK;
     380    } else if (*option == 'g' && strcmp(option,"get") == 0) {
     381        /*
     382         * OPTION:  get ?globPattern? ?-option?
     383         */
    370384        if (objc > 2) {
    371385            path = Tcl_GetStringFromObj(objv[2], (int*)NULL);
     
    623637            RpOptimizerPerformInTcl, fitnessExpr);
    624638
     639        fprintf(stderr, ">>>status=%d\n", status);
     640
    625641        Tcl_DecrRefCount(toolPtr);
    626642        if (updateCmdPtr) {
     
    637653            break;
    638654        case RP_OPTIM_ABORTED:
     655            fprintf(stderr, "Got abort status=%d\n", status);
    639656            Tcl_SetResult(interp, "aborted", TCL_STATIC);
    640657            break;
     
    824841        status = Tcl_GlobalEval(toolDataPtr->interp,
    825842            Tcl_DStringValue(&buffer));
    826 
    827843        if (status == TCL_ERROR) {
    828844            Tcl_BackgroundError(toolDataPtr->interp);
    829         }
    830         else if (status == TCL_BREAK || status == TCL_RETURN) {
    831             result = RP_OPTIM_ABORTED;
    832         }
     845        }
    833846        Tcl_DStringFree(&buffer);
    834847    }
Note: See TracChangeset for help on using the changeset viewer.