13.7.5. Macro “relauncherCodeFlowrateSequential_ConstantVar.C

13.7.5.1. Objective

The goal of this macro is to show how to set one of the evaluator’s input attribute to a constant value, with a sequential runner. The flowrate code is provided with Uranie and has been also used and discussed throughout these macros.

13.7.5.2. Macro

    // Create the TDataServer
    TDataServer *tds = new TDataServer("foo","test");

    // Define the attribute that should be considered as constant
    TAttribute r("r");

    // Add the study attributes ( min, max and nominal values)
    tds->addAttribute( new TUniformDistribution("rw", 0.05, 0.15));
    tds->addAttribute( new TUniformDistribution("tu", 63070.0, 115600.0));
    tds->addAttribute( new TUniformDistribution("tl", 63.1, 116.0));
    tds->addAttribute( new TUniformDistribution("hu", 990.0, 1110.0));
    tds->addAttribute( new TUniformDistribution("hl", 700.0, 820.0));
    tds->addAttribute( new TUniformDistribution("l", 1120.0, 1680.0));
    tds->addAttribute( new TUniformDistribution("kw", 9855.0, 12045.0));

    // The reference input file
    TString sIn = TString("flowrate_input_with_keys.in");

    int nS=15;
    // Generate the Design of Experiments
    TSampling *sampling = new TSampling(tds, "lhs", nS);
    sampling->generateSample();   

    // Create the input files
    TKeyScript inputFile( sIn.Data() );
    inputFile.addInput(tds->getAttribute("rw"),"Rw");
    inputFile.addInput(&r,"R"); // Add the constant attribute as an input
    inputFile.addInput(tds->getAttribute("tu"),"Tu");
    inputFile.addInput(tds->getAttribute("tl"),"Tl");
    inputFile.addInput(tds->getAttribute("hu"),"Hu");
    inputFile.addInput(tds->getAttribute("hl"),"Hl");
    inputFile.addInput(tds->getAttribute("l"),"L");
    inputFile.addInput(tds->getAttribute("kw"),"Kw"); 

    // Create the output attribute
    TAttribute *yhat = new TAttribute("yhat");
    TAttribute *d = new TAttribute("d");

    // Create the output files
    TKeyResult outputFile("_output_flowrate_withKey_.dat");
    outputFile.addOutput(yhat, "yhat");
    outputFile.addOutput(d, "d");

    // Create the user's evaluation function
    TCodeEval eval("flowrate -s -k");
    eval.addInputFile(&inputFile);
    eval.addOutputFile(&outputFile);

    // Create the sequential runner
    TSequentialRun run(&eval);
    run.startSlave(); //Start the master (necessary even for a sequential)
    if (run.onMaster())
    {
        TLauncher2 lanceur(tds, &run);
        // State to the master : r is constant with value 108
        // By default the value is not kept in the tds.
        // The third argument says : yes, keep it for bookkeeping
        lanceur.addConstantValue(&r,108,true);

        // resolution
        lanceur.solverLoop();
        run.stopSlave(); // Stop the slaves (necessary even for a sequential)
    }

    tds->scan("*","","colsize=6");

Here again, a comparison is drawn with the first Relauncher macro (see Macro) and only the differences are pointed out. The first obvious one, in the very first steps in defining the dataserver and the attributes, is that instead of reading a database-file, we are generating a design-of-experiments with one big specificity: all the input attributes are properly defined, but r.

    // Define the attribute that should be considered as constant
    TAttribute r("r");

    // Add the study attributes ( min, max and nominal values)
    tds->addAttribute( new TUniformDistribution("rw", 0.05, 0.15));
    tds->addAttribute( new TUniformDistribution("tu", 63070.0, 115600.0));
    tds->addAttribute( new TUniformDistribution("tl", 63.1, 116.0));
    tds->addAttribute( new TUniformDistribution("hu", 990.0, 1110.0));
    tds->addAttribute( new TUniformDistribution("hl", 700.0, 820.0));
    tds->addAttribute( new TUniformDistribution("l", 1120.0, 1680.0));
    tds->addAttribute( new TUniformDistribution("kw", 9855.0, 12045.0));

A simple design-of-experiments is generated and all the input attributes are provided to the input file of the assessor, event the constant one r.

    // Create the input files
    TKeyScript inputFile( sIn.Data() );
    inputFile.addInput(tds->getAttribute("rw"),"Rw");
    inputFile.addInput(&r,"R"); // Add the constant attribute as an input
    inputFile.addInput(tds->getAttribute("tu"),"Tu");
    inputFile.addInput(tds->getAttribute("tl"),"Tl");
    inputFile.addInput(tds->getAttribute("hu"),"Hu");
    inputFile.addInput(tds->getAttribute("hl"),"Hl");
    inputFile.addInput(tds->getAttribute("l"),"L");
    inputFile.addInput(tds->getAttribute("kw"),"Kw"); 

The rest is fairly common, up to the TMaster-inheriting object specification: the addConstantValue method is called to specify that r is about to be constant for all ongoing estimation, and it provides it value. The last argument states that the value under consideration should be stored in the ntuple of the dataserver object, as shown in the next section (from the scan method).

        TLauncher2 lanceur(tds, &run);
        // State to the master : r is constant with value 108
        // By default the value is not kept in the tds.
        // The third argument says : yes, keep it for bookkeeping
        lanceur.addConstantValue(&r,108,true);

13.7.5.3. Console

***************************************************************************************************************
*    Row   * foo__n *  rw.rw *  tu.tu *  tl.tl *  hu.hu *  hl.hl *    l.l *  kw.kw * yhat.y *    d.d *    r.r *
***************************************************************************************************************
*        0 *      0 * 0.1495 * 111790 * 73.820 * 990.90 * 779.83 * 1474.3 * 11220. * 112.01 * 3588.9 *    108 *
*        1 *      1 * 0.1394 * 104140 * 95.150 * 1101.5 * 707.21 * 1422.7 * 11493. * 193.62 * 6597.5 *    108 *
*        2 *      2 * 0.0557 * 95387. * 84.809 * 1056.2 * 752.94 * 1184.6 * 11967. * 29.880 * 330.58 *    108 *
*        3 *      3 * 0.0836 * 74144. * 103.17 * 1051.6 * 819.27 * 1587.4 * 11031. * 35.400 * 2431.1 *    108 *
*        4 *      4 * 0.0586 * 65396. * 72.161 * 1003.1 * 710.34 * 1327.5 * 10484. * 24.990 *   5757 *    108 *
*        5 *      5 * 0.1203 * 92149. * 65.263 * 1031.6 * 797.34 * 1265.5 * 11638. * 97.386 * 1084.8 *    108 *
*        6 *      6 * 0.1319 * 67464. * 93.378 * 1039.4 * 722.54 * 1514.3 * 10996. * 125.33 * 2362.4 *    108 *
*        7 *      7 * 0.1059 * 80448. * 112.87 * 1027.1 * 794.32 * 1555.4 *  11846 * 62.403 * 1116.3 *    108 *
*        8 *      8 * 0.0784 * 100260 * 105.79 * 1072.7 * 767.70 * 1304.1 * 10152. * 45.867 * 521.41 *    108 *
*        9 *      9 * 0.0697 * 105158 * 82.544 * 1020.4 * 726.05 * 1640.3 * 10380. * 28.412 * 2802.5 *    108 *
*       10 *     10 * 0.1252 * 89522. * 100.65 * 1006.2 * 742.35 * 1123.9 * 10743. * 123.70 * 2676.1 *    108 *
*       11 *     11 * 0.1165 * 73139. * 69.083 * 1108.5 * 809.59 * 1199.0 * 10620. * 112.27 * 4991.3 *    108 *
*       12 *     12 * 0.0992 * 86004. * 112.12 * 1069.4 * 763.84 * 1345.2 * 9951.0 * 69.808 * 414.71 *    108 *
*       13 *     13 * 0.0718 * 113775 * 90.580 * 1079.1 * 782.95 * 1416.6 * 10076. * 34.135 * 1016.8 *    108 *
*       14 *     14 * 0.0902 * 83779. * 80.244 * 1090.6 * 734.33 * 1644.2 *  11443 * 63.236 * 2922.3 *    108 *
***************************************************************************************************************