Closed laat0003 closed 4 years ago
Sorry its not clear in the manual (manual additions welcome!). The idea with the stack is that before the first optimization iteration, we need to know the value of the model-based constraints using the initial decision variable values combined with each parameter realization in the stack to get the statistical distribution of each model based constraint. So at runtime pestpp-opt should queue up and execute these runs for you before going to the optimization solve. This should yield an obs stack output file. Or alternatively you can supply an obs stack file (maybe from the last ies iteration?!), which opt should just load and use (this should skip the need to run the par stack). Are you seeing the stack of runs being queued up and executed by the run mgr? Are you seeing an obs stack file being written after those runs?
Cheers for the rapid reply. Yes, the obs stacks are all there for the par.csv files except for the .0.par.csv. I mostly want to know if the .0.par.csv is a stack that is actually run by PESTPP-OPT or if the initial run is the .1.par.csv stack since it creates both files but only outputs a .1.obs.csv (every subsequent iteration has both .x.par.csv and .x.obs.csv). I assume from your response that if PESTPP-OPT didn't output a .0.obs.csv then it didn't actually run the stack in the .0.par.csv despite creating the file.
Some context if it helps clarify things. I'm optimizing an 8 well MAR scheme to prevent drawdown propagation from simulated mine dewatering. Note the mine is in planning stage and doesn't currently exist but the MAR scheme is already installed. The IES run was used to condition aquifer parameters to both system steady-state and transient data from a trial of one of the MAR wells. My decision variables for the OPT run are the individual injection rates per year for each MAR well from simulated dewatering (100 year simulation, 800 decision variables seeking 95% confidence of no impact to a National Park. No impact being drawdown or impress greater than 0.1 m along the park boundary). I was hoping that the .0.par.csv stack (echoed by PESTPP-OPT, which has the MAR scheme inoperative, that is, all decision variables set at 0.0) would also yield a .0.obs.csv so I could observe the potential spectrum of unmitigated drawdown propagation on my constraints, but no love :).
I didn't have an obs stack from the IES run because that model didn't include the dewatering simulation.
I see. The 0 named stack files are just echos of the initial stacks, mostly for checking. The 1 named stack files are the stacks from just before the first opt solve, so those are probably what you are looking for. Lemme know of not (and I'll take shot at adding this info to the manual).
Thanks. I guess I should have set the decision variables to zero values in the control file as well to make sure I got my "do nothing" observations. I was attempting to ensure decision variable sensitivity to the observation constraints by having initial values somewhere near the middle of their bounds. Does it make any difference to PESTPP-OPT if the initial decision variables in the control file already satisfy, or are close to satisfying the observation constraints for risk neutral (obtained say using CMAES-P with constraints configured by OBS2OBS to function like those in PESTPP-OPT)? Sorry for the extra question-happy to post this somewhere else if needed.
Getting representative sensitivity between decision variables and constraints is tricky and its different than the par-to-obs sensitivity calcs because, in the linear programming setting, we need decision variable sensitivities that are representative of the relation across decision variable space. So I usually use a much large perturbation than when filling a jco to estimate parameters. And it is important to start with a feasible solution (e.g. constraints satisfied) - the CLP solver in pestpp-opt has some capabilities to find a feasible solution but I usually try to start feasible. So you can start with the pumping rates at zero and use a large absolute derinc
to get some meaningful sensitivities (or "responses").
I did use a large derinc for the decision variables and then tested feasibility by using the zero run solution method (a seriously cool feature to explore feasibility) and made adjustments accordingly. I wasn't sure if I needed to make allowance for three point derivative testing which is why I didn't start with the pump rates at zero. Thanks again for all the help. Great advice as always.
Hi, I’m using PESTPP-OPT with stack based uncertainty and I provided an ensemble of models from IES for the opt_par_stack() option (after adding my decision variables with zero values). A replica of this ensemble file appears to be echoed as a model.0.par_stack. It isn’t clear in the manual if this stack is run initially or if it is only the .1.par_stack (where my decision variables have non-zero values as entered in the ctl file)? In my specific case, the .0.par_stack is my “do nothing” ensemble while subsequent iterations are effectively optimising “do something”. Without a .0.obs_stack output file will I have to run SWP to get the obs for my “do nothing” ensemble? Thanks in advance for your time, Tariq