Skip to content

Commit 83b2978

Browse files
committed
kz - adding customized hyperparameter options in runPLoM
1 parent eccd3fb commit 83b2978

1 file changed

Lines changed: 82 additions & 2 deletions

File tree

modules/performUQ/SimCenterUQ/runPLoM.py

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -451,19 +451,66 @@ def _parse_plom_parameters(self, surrogateInfo):
451451
try:
452452
self.n_mc = int(surrogateInfo['newSampleRatio'])
453453
self.epsilonPCA = surrogateInfo.get("epsilonPCA",1e-6)
454-
self.smootherKDE = surrogateInfo.get("smootherKDE",25)
454+
# KZ, 07/24: adding customized option for smootherKDE factor
455+
self.smootherKDE_Customize = surrogateInfo.get("smootherKDE_Customize",False)
456+
if self.smootherKDE_Customize:
457+
# KZ, 07/24: taking in user-defined function filepath and directory
458+
self.smootherKDE_file = surrogateInfo.get("smootherKDE_path",False)
459+
self.smootherKDE_dir = surrogateInfo.get("smootherKDE_pathPath",False)
460+
if self.smootherKDE_file and self.smootherKDE_dir:
461+
# KZ, 07/24: both file and file path received
462+
# Note that the file is saved by the frontend to the work_dir -> overwrite self.smootherKDE_file
463+
self.smootherKDE_file = os.path.join(work_dir, "templatedir", self.smootherKDE_file)
464+
if not os.path.isfile(self.smootherKDE_file):
465+
# not found the file
466+
msg = 'Error finding user-defined function file for KDE: {}.'.format(self.smootherKDE_file)
467+
errlog.exit(msg)
468+
else:
469+
# KZ, 07/24: missing user-defined file
470+
msg = 'Error loading user-defined function file for KDE.'
471+
errlog.exit(msg)
472+
else:
473+
# KZ, 07/24: get user defined smootherKDE
474+
self.smootherKDE = surrogateInfo.get("smootherKDE",25)
475+
#self.smootherKDE = surrogateInfo.get("smootherKDE",25)
455476
self.randomSeed = surrogateInfo.get("randomSeed",None)
456477
self.diffMap = surrogateInfo.get("diffusionMaps",True)
457478
self.logTransform = surrogateInfo.get("logTransform",False)
458479
self.constraintsFlag = surrogateInfo.get("constraints",False)
459-
self.kdeTolerance = surrogateInfo.get("kdeTolerance",0.1)
480+
# KZ: 07/24: adding customized option for kdeTolerance
481+
self.kdeTolerance_Customize = surrogateInfo.get("tolKDE_Customize",False)
482+
if self.kdeTolerance_Customize:
483+
# KZ, 07/24: taking in user-defined function filepath and directory
484+
self.kdeTolerance_file = surrogateInfo.get("tolKDE_path",False)
485+
self.kdeTolerance_dir = surrogateInfo.get("tolKDE_pathPath",False)
486+
if self.kdeTolerance_file and self.kdeTolerance_dir:
487+
# KZ, 07/24: both file and file path received
488+
# Note that the file is saved by the frontend to the work_dir -> overwrite self.kdeTolerance_file
489+
self.kdeTolerance_file = os.path.join(work_dir, "templatedir", self.kdeTolerance_file)
490+
if not os.path.isfile(self.kdeTolerance_file):
491+
# not found the file
492+
msg = 'Error finding user-defined function file for KDE: {}.'.format(self.kdeTolerance_file)
493+
errlog.exit(msg)
494+
else:
495+
# KZ, 07/24: missing user-defined file
496+
msg = 'Error loading user-defined function file for KDE tolerance.'
497+
errlog.exit(msg)
498+
else:
499+
self.kdeTolerance = surrogateInfo.get("kdeTolerance",0.1)
500+
#self.kdeTolerance = surrogateInfo.get("kdeTolerance",0.1)
460501
if self.constraintsFlag:
461502
self.constraintsFile = os.path.join(work_dir, "templatedir/plomConstraints.py")
462503
self.numIter = surrogateInfo.get("numIter",50)
463504
self.tolIter = surrogateInfo.get("tolIter",0.02)
464505
self.preTrained = surrogateInfo.get("preTrained",False)
465506
if self.preTrained:
466507
self.preTrainedModel = os.path.join(work_dir, "templatedir/surrogatePLoM.h5")
508+
509+
# KZ, 07/24: loading hyperparameter functions (evaluating self.kdeTolerance and self.smootherKDE from user-defined case)
510+
if self._load_hyperparameter():
511+
msg = 'runPLoM._parse_plom_parameters: Error in loading hyperparameter functions.'
512+
self.errlog.exit(msg)
513+
467514
except:
468515
run_flag = 1
469516

@@ -578,6 +625,39 @@ def _load_variables(self, do_sampling, do_simulation):
578625

579626
# return
580627
return run_flag
628+
629+
630+
# KZ, 07/24: loading user-defined hyper-parameter files
631+
def _load_hyperparameter(self):
632+
run_flag = 0
633+
try:
634+
# load constraints first
635+
constr_file = Path(self.constraintsFile).resolve()
636+
sys.path.insert(0, str(constr_file.parent) + '/')
637+
constr_script = importlib.__import__(constr_file.name[:-3], globals(), locals(), [], 0)
638+
self.beta_c = constr_script.beta_c()
639+
print("beta_c = ", self.beta_c)
640+
# if smootherKDE
641+
if self.smootherKDE_Customize:
642+
kde_file = Path(self.smootherKDE_file).resolve()
643+
sys.path.insert(0, str(kde_file.parent) + '/')
644+
kde_script = importlib.__import__(kde_file.name[:-3], globals(), locals(), [], 0)
645+
self.get_epsilon_k = kde_script.get_epsilon_k
646+
# evaluating the function
647+
self.smootherKDE = self.get_epsilon_k(self.beta_c)
648+
print('epsilon_k = ',self.smootherKDE)
649+
# if tolKDE
650+
if self.kdeTolerance_Customize:
651+
beta_file = Path(self.kdeTolerance_file).resolve()
652+
sys.path.insert(0, str(beta_file.parent) + '/')
653+
beta_script = importlib.__import__(beta_file.name[:-3], globals(), locals(), [], 0)
654+
self.get_epsilon_db = beta_script.get_epsilon_db
655+
# evaluating the function
656+
self.kdeTolerance = self.get_epsilon_db(self.beta_c)
657+
print('epsilon_db = ',self.kdeTolerance)
658+
except:
659+
run_flag = 1
660+
return run_flag
581661

582662

583663
def train_model(self, model_name='SurrogatePLoM'):

0 commit comments

Comments
 (0)