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 *
***************************************************************************************************************