Changeset 903 for trunk/optimizer/src


Ignore:
Timestamp:
Feb 23, 2008 8:16:38 PM (15 years ago)
Author:
mmc
Message:

Final tweaks on the optimization package. The demo now works properly.
Just run "wish simple.tcl" to see it work.

Fixed the Tool class to work better with the optimizer. The "run"
method now returns the result directly as a Rappture::Library object,
and the Analyzer merely loads the object.

Location:
trunk/optimizer/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/optimizer/src/plugin_pgapack.c

    r899 r903  
    111111    PGASetPopReplaceType(ctx, dataPtr->popRepl);
    112112    PGASetCrossoverType(ctx, PGA_CROSSOVER_UNIFORM);
     113
     114    /* stop if any of these are true */
     115    PGASetStoppingRuleType(ctx, PGA_STOP_MAXITER);
     116    PGASetStoppingRuleType(ctx, PGA_STOP_NOCHANGE);
     117    PGASetStoppingRuleType(ctx, PGA_STOP_TOOSIMILAR);
    113118
    114119    PGASetUserFunction(ctx, PGA_USERFUNCTION_CREATESTRING, PgapCreateString);
  • trunk/optimizer/src/rp_optimizer_tcl.c

    r899 r903  
    416416                case RP_OPTIMPARAM_NUMBER:
    417417                    optSpecPtr = rpOptimNumberOpts;
     418                    if (option == NULL) {
     419                        /* no particular option value? then include type */
     420                        if (Tcl_ListObjAppendElement(interp, rrval,
     421                              Tcl_NewStringObj("number",-1)) != TCL_OK) {
     422                            Tcl_DecrRefCount(rrval);
     423                            Tcl_DecrRefCount(rval);
     424                            return TCL_ERROR;
     425                        }
     426                    }
    418427                    break;
    419428                case RP_OPTIMPARAM_STRING:
    420429                    optSpecPtr = rpOptimStringOpts;
     430                    if (option == NULL) {
     431                        /* no particular option value? then include type */
     432                        if (Tcl_ListObjAppendElement(interp, rrval,
     433                              Tcl_NewStringObj("string",-1)) != TCL_OK) {
     434                            Tcl_DecrRefCount(rrval);
     435                            Tcl_DecrRefCount(rval);
     436                            return TCL_ERROR;
     437                        }
     438                    }
    421439                    break;
    422440                default:
     
    638656        }
    639657        Tcl_SetResult(interp, envPtr->pluginDefn->name, TCL_STATIC);
     658
     659        /* if the -tool was specified, then add it as a second element */
     660        toolDataPtr = (RpOptimToolData*)envPtr->toolData;
     661        if (toolDataPtr->toolPtr) {
     662            Tcl_AppendElement(interp,
     663                Tcl_GetStringFromObj(toolDataPtr->toolPtr, (int*)NULL));
     664        }
    640665        return TCL_OK;
    641666    }
     
    671696{
    672697    RpOptimStatus result = RP_OPTIM_SUCCESS;
     698    Tcl_Obj *xmlObj = NULL;
    673699    RpOptimToolData *toolDataPtr = (RpOptimToolData*)envPtr->toolData;
    674700    Tcl_Interp *interp = toolDataPtr->interp;
     701
    675702    int n, status;
    676703#define MAXBUILTIN 10
     
    678705    int rc; Tcl_Obj **rv;
    679706    Tcl_Obj *dataPtr;
    680     char *out;
     707    Tcl_DString buffer;
    681708
    682709    /*
     
    730757            fprintf(stderr, "== JOB FAILED: malformed result: expected {status output}\n");
    731758        } else {
    732             out = Tcl_GetStringFromObj(rv[1], (int*)NULL);
    733759            if (status != 0) {
    734760                result = RP_OPTIM_FAILURE;
    735761                fprintf(stderr, "== JOB FAILED with status code %d:\n%s\n",
    736                     status, out);
     762                    status, Tcl_GetStringFromObj(rv[1], (int*)NULL));
    737763            } else {
    738764                /*
     
    745771                 *    xmlobj get fitnessExpr
    746772                 */
    747                 getcmd[0] = rv[1];
     773                xmlObj = rv[1];
     774                /* hang onto this for -updatecommand below */
     775                Tcl_IncrRefCount(xmlObj);
     776
     777                getcmd[0] = xmlObj;
    748778                getcmd[1] = Tcl_NewStringObj("get",-1);
    749779                getcmd[2] = Tcl_NewStringObj(envPtr->fitnessExpr,-1);
     
    786816     */
    787817    if (toolDataPtr->updateCmdPtr) {
    788         status = Tcl_GlobalEvalObj(toolDataPtr->interp,
    789             toolDataPtr->updateCmdPtr);
     818        Tcl_DStringInit(&buffer);
     819        Tcl_DStringAppend(&buffer,
     820            Tcl_GetStringFromObj(toolDataPtr->updateCmdPtr, (int*)NULL), -1);
     821        Tcl_DStringAppendElement(&buffer,
     822            (xmlObj != NULL) ? Tcl_GetStringFromObj(xmlObj, (int*)NULL): "");
     823
     824        status = Tcl_GlobalEval(toolDataPtr->interp,
     825            Tcl_DStringValue(&buffer));
    790826
    791827        if (status == TCL_ERROR) {
     
    793829        }
    794830        else if (status == TCL_BREAK || status == TCL_RETURN) {
    795             return RP_OPTIM_ABORTED;
    796         }
    797     }
    798     return RP_OPTIM_SUCCESS;
     831            result = RP_OPTIM_ABORTED;
     832        }
     833        Tcl_DStringFree(&buffer);
     834    }
     835
     836    if (xmlObj) {
     837        Tcl_DecrRefCount(xmlObj);  /* done with this now */
     838    }
     839    return result;
    799840}
Note: See TracChangeset for help on using the changeset viewer.