Skip to content

Commit f252905

Browse files
authored
Merge pull request #294 from yisangriB/master
SY - updating PLoM
2 parents 21ceda2 + d02e26e commit f252905

4 files changed

Lines changed: 87 additions & 5 deletions

File tree

modules/createEVENT/HighRiseTPU/HighRiseTPU.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ int addEvent(json_t *generalInfo, json_t *currentEvent, json_t *outputEvent, boo
528528
std::string pyArgs = "HighRiseTPU.py tmpSimCenterHighRiseTPU.mat tmpSimCenterHighRiseTPU.json";
529529
std::string command = "python3 ";
530530
#ifdef _WIN32
531-
command = "python "
531+
command = "python ";
532532
#endif
533533
command += pyArgs;
534534
system(command.c_str());

modules/createEVENT/LowRiseTPU/LowRiseTPU.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ int addEvent(json_t *generalInfo, json_t *currentEvent, json_t *outputEvent, boo
534534
std::string pyArgs = "LowRiseTPU.py tmpSimCenterLowRiseTPU.mat tmpSimCenterLowRiseTPU.json";
535535
std::string command = "python3 ";
536536
#ifdef _WIN32
537-
command = "python "
537+
command = "python ";
538538
#endif
539539
command += pyArgs;
540540
system(command.c_str());

modules/performUQ/SimCenterUQ/PLoM/PLoM.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,9 @@ def ISDEGeneration(self, n_mc = 5, tol_PCA2 = 1e-5, tol = 0.02, max_iter = 50, s
630630
self.C_h_hat_eta = plom.covariance(self.g_c(self.x_mean+(self.phi).dot(np.diag(self.mu)).dot(self.H)))
631631

632632
#scaling beta
633-
self.beta_c_normalized = self.beta_c_aux(self.beta_c, self.x_min, self.alpha)
633+
#self.beta_c_normalized = self.beta_c_aux(self.beta_c, self.x_min, self.alpha)
634+
# KZ, 07/24
635+
self.beta_c_normalized = self.beta_c_aux(self.beta_c, self.X)
634636
self.b_c, self.psi = plom.PCA2(self.C_h_hat_eta, self.beta_c_normalized, tol_PCA2)
635637
self.nu_c = len(self.b_c)
636638

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)