diff --git a/dependencies.xml b/dependencies.xml index 423dcd7466..0026388225 100644 --- a/dependencies.xml +++ b/dependencies.xml @@ -35,18 +35,26 @@ Note all install methods after "main" take -->
- 2.10 - 1.18 - 1.2 - 0.24 - 1.1 - 0.16 + + 1.21 + 1.7 + 1.0 + 1.3 + + 0.19 1.5 - 3.2 - - 1.6 - 2.0 - 3 + 3.3 + 0.13 + 2.2 + 2.9 + 3.7 + 3 @@ -59,13 +67,22 @@ Note all install methods after "main" take - 1.9 - 2.9 + 1.13 + + + 2.22 1.1 + 0.9 + 6.4 + + + + + 3
@@ -76,4 +93,12 @@ Note all install methods after "main" take remove remove + + remove + remove + remove + remove + remove + remove +
diff --git a/ravenframework/SupervisedLearning/ScikitLearn/SVM/LinearSVR.py b/ravenframework/SupervisedLearning/ScikitLearn/SVM/LinearSVR.py index 6069fe210f..440dfc2e24 100644 --- a/ravenframework/SupervisedLearning/ScikitLearn/SVM/LinearSVR.py +++ b/ravenframework/SupervisedLearning/ScikitLearn/SVM/LinearSVR.py @@ -15,7 +15,7 @@ Created on Jan 21, 2020 @author: alfoa, wangc - Linear Support Vector Classifier + Linear Support Vector Regressor """ #Internal Modules (Lazy Importer)-------------------------------------------------------------------- @@ -33,7 +33,7 @@ class LinearSVR(ScikitLearnBase): """ Linear Support Vector Regressor """ - info = {'problemtype':'regression', 'normalize':True} + info = {'problemtype':'regression', 'normalize':True, 'normalizeTargets':False} def __init__(self): """ @@ -97,6 +97,10 @@ def _handleInput(self, paramInput): super()._handleInput(paramInput) settings, notFound = paramInput.findNodesAndExtractValues(['epsilon', 'dual', 'loss', 'tol', 'fit_intercept', 'intercept_scaling', 'max_iter']) + + setting,_ = paramInput.findNodesAndExtractValues(['normalizeTargets']) + self.info['normalizeTargets'] = setting['normalizeTargets'] + # notFound must be empty assert(not notFound) self.initializeModel(settings) diff --git a/ravenframework/SupervisedLearning/ScikitLearn/SVM/SVR.py b/ravenframework/SupervisedLearning/ScikitLearn/SVM/SVR.py index 7e04804601..c9e1daf5f9 100644 --- a/ravenframework/SupervisedLearning/ScikitLearn/SVM/SVR.py +++ b/ravenframework/SupervisedLearning/ScikitLearn/SVM/SVR.py @@ -24,12 +24,10 @@ #External Modules------------------------------------------------------------------------------------ np = importModuleLazy("numpy") -import ast #External Modules End-------------------------------------------------------------------------------- #Internal Modules------------------------------------------------------------------------------------ from ....SupervisedLearning.ScikitLearn import ScikitLearnBase -from ....utils import utils from ....utils import InputData, InputTypes #Internal Modules End-------------------------------------------------------------------------------- @@ -37,7 +35,7 @@ class SVR(ScikitLearnBase): """ Support Vector Regressor """ - info = {'problemtype':'regression', 'normalize':True} + info = {'problemtype':'regression', 'normalize':True, 'normalizeTargets':False} def __init__(self): """ @@ -101,6 +99,7 @@ class cls. descr=r"""Enable verbose output. Note that this setting takes advantage of a per-process runtime setting in libsvm that, if enabled, may not work properly in a multithreaded context.""", default=False)) + return specs def _handleInput(self, paramInput): @@ -113,6 +112,9 @@ def _handleInput(self, paramInput): settings, notFound = paramInput.findNodesAndExtractValues(['C', 'kernel', 'degree', 'gamma', 'coef0', 'tol', 'cache_size', 'epsilon', 'shrinking', 'max_iter', 'verbose']) + + setting,_ = paramInput.findNodesAndExtractValues(['normalizeTargets']) + self.info['normalizeTargets'] = setting['normalizeTargets'] # notFound must be empty assert(not notFound) self.initializeModel(settings) diff --git a/ravenframework/SupervisedLearning/ScikitLearn/ScikitLearnBase.py b/ravenframework/SupervisedLearning/ScikitLearn/ScikitLearnBase.py index c7729bf2f9..bf666e17b3 100644 --- a/ravenframework/SupervisedLearning/ScikitLearn/ScikitLearnBase.py +++ b/ravenframework/SupervisedLearning/ScikitLearn/ScikitLearnBase.py @@ -24,19 +24,17 @@ #External Modules------------------------------------------------------------------------------------ np = importModuleLazy("numpy") -import ast #External Modules End-------------------------------------------------------------------------------- #Internal Modules------------------------------------------------------------------------------------ from ..SupervisedLearning import SupervisedLearning -from ...utils import utils #Internal Modules End-------------------------------------------------------------------------------- class ScikitLearnBase(SupervisedLearning): """ Base Class for Scikitlearn-based surrogate models (classifiers and regressors) """ - info = {'problemtype':None, 'normalize':None} + info = {'problemtype':None, 'normalize':None, 'normalizeTargets':None} def __init__(self): """ @@ -50,7 +48,6 @@ def __init__(self): self.model = None # Scikitlearn estimator/model self.multioutputWrapper = True # If True, use MultiOutputRegressor or MultiOutputClassifier to wrap self.model else # the self.model can handle multioutput/multi-targets prediction - def updateSettings(self, settings): """ Update the parameters of the self.model if the model is wrapper by sklearn.multioutput class @@ -185,15 +182,16 @@ def __returnCurrentSettingLocal__(self): """ pass - def _localNormalizeData(self,values,names,feat): - """ - Overwrites default normalization procedure. - @ In, values, list(float), unused - @ In, names, list(string), unused - @ In, feat, string, feature to (not) normalize - @ Out, None - """ - if not self.info['normalize']: - self.muAndSigmaFeatures[feat] = (0.0,1.0) - else: - super()._localNormalizeData(values,names,feat) + # def _localNormalizeData(self,values,names,feat): + # """ + # Overwrites default normalization procedure. + # @ In, values, list(float), unused + # @ In, names, list(string), unused + # @ In, feat, string, feature to (not) normalize + # @ Out, None + # """ + # if not self.info['normalize']: + # self.muAndSigmaFeatures[feat] = (0.0,1.0) + # self.muAndSigmaTargets[self.target[0]] = (0.0,1.0) + # else: + # super()._localNormalizeData(values,names,feat) diff --git a/ravenframework/SupervisedLearning/SupervisedLearning.py b/ravenframework/SupervisedLearning/SupervisedLearning.py index 03df24f7e8..9754fe0b94 100644 --- a/ravenframework/SupervisedLearning/SupervisedLearning.py +++ b/ravenframework/SupervisedLearning/SupervisedLearning.py @@ -31,7 +31,7 @@ #External Modules End-------------------------------------------------------------------------------- #Internal Modules------------------------------------------------------------------------------------ -from ..utils import utils, mathUtils, xmlUtils +from ..utils import mathUtils, xmlUtils from ..utils import InputTypes, InputData from ..BaseClasses import BaseInterface #Internal Modules End-------------------------------------------------------------------------------- @@ -45,6 +45,7 @@ class SupervisedLearning(BaseInterface): # 'boolean', 'integer', 'float' qualityEstType = [] # this describe the type of estimator returned known type are 'distance', 'probability'. # The values are returned by the self.__confidenceLocal__(Features) + info = {'problemtype':'regression', 'normalize':None, 'normalizeTargets':None} @classmethod def getInputSpecification(cls): """ @@ -69,6 +70,10 @@ class cls. spec.addSub(InputData.parameterInputFactory('pivotParameter',contentType=InputTypes.StringType, descr=r"""If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet.""", default='time')) + + spec.addSub(InputData.parameterInputFactory("normalizeTargets", contentType=InputTypes.BoolType, + descr=r"""enables target normalization by centering (subtracting the mean) and dividing by the standard deviation. + This is known to make the ROM less sensitive to parameters such as epsilon, gamma, etc.""", default=False)) cvInput = InputData.parameterInputFactory("CV", contentType=InputTypes.StringType, descr=r"""The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``.""") @@ -129,7 +134,8 @@ def __init__(self): #average value and sigma are used for normalization of the feature data #a dictionary where for each feature a tuple (average value, sigma) #these need to be declared in the child classes!!!! - self.muAndSigmaFeatures = {} # normalization parameters + self.muAndSigmaFeatures = {} # normalizing features + self.muAndSigmaTargets = {} # normalizing targets self.metadataKeys = set() # keys that can be passed to DataObject as meta information self.metadataParams = {} # indexMap for metadataKeys to pass to a DataObject as meta dimensionality @@ -247,30 +253,39 @@ def train(self, tdict, indexMap=None): featureValues = np.zeros(shape=(len(targetValues), featLen,len(self.features))) else: featureValues = np.zeros(shape=(len(targetValues), len(self.features))) - for cnt, feat in enumerate(self.features): - if feat not in names: - self.raiseAnError(IOError,'The feature sought '+feat+' is not in the training set') - else: - valueToUse = values[names.index(feat)] - resp = self.checkArrayConsistency(valueToUse, self.isDynamic()) - if not resp[0]: - self.raiseAnError(IOError,'In training set for feature '+feat+':'+resp[1]) - valueToUse = np.asarray(valueToUse) - if len(valueToUse) != featureValues.shape[0]: - self.raiseAWarning('feature values:',featureValues.shape[0],tag='ERROR') - self.raiseAWarning('target values:',len(valueToUse),tag='ERROR') - self.raiseAnError(IOError,'In training set, the number of values provided for feature '+feat+' are != number of target outcomes!') - self._localNormalizeData(values,names,feat) - # valueToUse can be either a matrix (for who can handle time-dep data) or a vector (for who can not) - if self.dynamicFeatures: - featureValues[:, :, cnt] = (valueToUse[:, :]- self.muAndSigmaFeatures[feat][0])/self.muAndSigmaFeatures[feat][1] + for tgtCnt, targ in enumerate(self.target): + for cnt, feat in enumerate(self.features): + if feat not in names: + self.raiseAnError(IOError,'The feature sought '+feat+' is not in the training set') + elif targ not in names: + self.raiseAnError(IOError,'The target sought '+targ+' is not in the training set') else: - featureValues[:,cnt] = ( (valueToUse[:,0] if len(valueToUse.shape) > 1 else valueToUse[:]) - self.muAndSigmaFeatures[feat][0])/self.muAndSigmaFeatures[feat][1] - + valueToUse = values[names.index(feat)] + resp = self.checkArrayConsistency(valueToUse, self.isDynamic()) + targetValueToUse = values[names.index(targ)] + tarResp = self.checkArrayConsistency(targetValueToUse, self.isDynamic()) + if not resp[0]: + self.raiseAnError(IOError,'In training set for feature '+feat+':'+resp[1]) + if not tarResp[0]: + self.raiseAnError(IOError,'In training set for target '+targ+':'+tarResp[1]) + valueToUse = np.asarray(valueToUse) + targetValueToUse = np.asarray(targetValueToUse) + if len(valueToUse) != featureValues.shape[0]: + self.raiseAWarning('feature values:',featureValues.shape[0],tag='ERROR') + self.raiseAWarning('target values:',len(valueToUse),tag='ERROR') + self.raiseAnError(IOError,'In training set, the number of values provided for feature '+feat+' are != number of target outcomes!') + self._localNormalizeData(values,names,feat,targ) + # valueToUse can be either a matrix (for who can handle time-dep data) or a vector (for who can not) + if self.dynamicFeatures: + featureValues[:, :, cnt] = (valueToUse[:, :]- self.muAndSigmaFeatures[feat][0])/self.muAndSigmaFeatures[feat][1] + targetValues[:,tgtCnt] = (targetValueToUse[:]- self.muAndSigmaTargets[targ][0])/self.muAndSigmaTargets[targ][1] + else: + featureValues[:,cnt] = ( (valueToUse[:,0] if len(valueToUse.shape) > 1 else valueToUse[:]) - self.muAndSigmaFeatures[feat][0])/self.muAndSigmaFeatures[feat][1] + targetValues[:,tgtCnt] = ( (targetValueToUse[:,0] if len(targetValueToUse.shape) > 1 else targetValueToUse[:]) - self.muAndSigmaTargets[targ][0])/self.muAndSigmaTargets[targ][1] self.__trainLocal__(featureValues,targetValues) self.amITrained = True - def _localNormalizeData(self,values,names,feat): + def _localNormalizeData(self,values,names,feat,targ): """ Method to normalize data based on the mean and standard deviation. If undesired for a particular ROM, this method can be overloaded to simply pass (see, e.g., GaussPolynomialRom). @@ -279,7 +294,14 @@ def _localNormalizeData(self,values,names,feat): @ In, feat, list, list of features (from ROM) @ Out, None """ - self.muAndSigmaFeatures[feat] = mathUtils.normalizationFactors(values[names.index(feat)]) + if not self.info['normalize']: + self.muAndSigmaFeatures[feat] = (0.0,1.0) + else: + self.muAndSigmaFeatures[feat] = mathUtils.normalizationFactors(values[names.index(feat)]) + if not self.info['normalizeTargets']: + self.muAndSigmaTargets[targ] = (0.0,1.0) + else: + self.muAndSigmaTargets[targ] = mathUtils.normalizationFactors(values[names.index(targ)]) def confidence(self, edict): """ @@ -349,6 +371,8 @@ def evaluate(self,edict): else: featureValues = np.zeros(shape=(values[0].size, len(self.features))) for cnt, feat in enumerate(self.features): + # feat = featTarg[0] + # targ = featTarg[1] if feat not in names: self.raiseAnError(IOError,'The feature sought '+feat+' is not in the evaluate set') else: @@ -359,7 +383,10 @@ def evaluate(self,edict): featureValues[:, :, cnt] = ((values[names.index(feat)] - self.muAndSigmaFeatures[feat][0]))/self.muAndSigmaFeatures[feat][1] else: featureValues[:,cnt] = ((values[names.index(feat)] - self.muAndSigmaFeatures[feat][0]))/self.muAndSigmaFeatures[feat][1] - return self.__evaluateLocal__(featureValues) + target = self.__evaluateLocal__(featureValues) + if ('normalizeTargets' in self.info.keys()) and self.info['normalizeTargets']: + target.update((x, y * self.muAndSigmaTargets[x][1] + self.muAndSigmaTargets[x][0]) for x, y in target.items()) + return target def reset(self): """ diff --git a/ravenframework/utils/mathUtils.py b/ravenframework/utils/mathUtils.py index be28fb12a5..92dec92144 100644 --- a/ravenframework/utils/mathUtils.py +++ b/ravenframework/utils/mathUtils.py @@ -246,7 +246,7 @@ def normalizationFactors(values, mode='z'): elif mode == 'scale': offset = np.min(values) scale = np.max(values) - offset - else: + else: ##TODO this should be changed, currently if the user entered anything other than z or scale it will not normalize offset = 0.0 scale = 1.0 diff --git a/tests/framework/AnalyticModels/projectile.py b/tests/framework/AnalyticModels/projectile.py index baa4ff8ab1..31255b8250 100644 --- a/tests/framework/AnalyticModels/projectile.py +++ b/tests/framework/AnalyticModels/projectile.py @@ -27,10 +27,10 @@ # import numpy as np -in_vars = ['x0', 'y0', 'v0', 'ang', 'timeOption'] -out_vars = ['x', 'y', 'r', 't', 'v', 'a'] +in_vars = ['x0', 'y0', 'v0', 'angle', 'timeOption'] +out_vars = ['x', 'y', 'r', 't', 'v', 'a', 'ymax'] -def prange(v,th,y0=0,g=9.8): +def prange(v, th, y0=0, g=9.8): """ Calculates the analytic range. @ In, v, float, velocity of the projectile @@ -39,7 +39,20 @@ def prange(v,th,y0=0,g=9.8): @ In, g, float, optional, gravitational constant (m/s/s) @ Out, prange, float, range """ - return v*np.cos(th)/g * (v*np.sin(th) + np.sqrt(v*v*np.sin(th)**2+2.*g*y0)) + return v * np.cos(th) / g * \ + (v * np.sin(th) + np.sqrt(v * v * np.sin(th)**2 + 2. * g * y0)) + +def pMaxHeight(v, th, y0=0, g=9.8): + """ + Calculates the analytic max height the projectile achieves. + @ In, v, float, initial velocity of the projectile + @ In, th, float, angle to the ground for initial projectile motion + @ In, y0, float, optional, initial launch height + @ In, g, float, optional, gravitational constant (m/s/s) + @ Out, pMaxHeight, float, max height achieved + """ + vY = v * np.sin(th) + return vY**2 / (2.0 * g) + y0 def time_to_ground(v,th,y0=0,g=9.8): """ @@ -86,7 +99,7 @@ def run(raven, inputs): vars = {'x0': get_from_raven(raven,'x0', 0), 'y0': get_from_raven(raven,'y0', 0), 'v0': get_from_raven(raven,'v0', 1), - 'ang': get_from_raven(raven,'v0', 45), + 'ang': get_from_raven(raven,'angle', 45), 'timeOption': get_from_raven(raven,'timeOption', 0)} res = main(vars) raven.x = res['x'] @@ -95,6 +108,7 @@ def run(raven, inputs): raven.r = res['r'] * np.ones(len(raven.x)) raven.v = res['v'] raven.a = res['a'] + raven.ymax = res['ymax'] * np.ones(len(raven.x)) raven.timeOption = vars['timeOption'] def get_from_raven(raven, attr, default=None): @@ -104,7 +118,7 @@ def main(Input): x0 = Input.get('x0', 0) y0 = Input.get('y0', 0) v0 = Input.get('v0', 1) - ang = Input.get('angle', 45) + ang = Input.get('ang', 45) g = Input.get('g', 9.8) timeOption = Input.get('timeOption', 0) ang = ang * np.pi / 180 @@ -113,11 +127,13 @@ def main(Input): else: # due to numpy library update, the return shape of np.linspace # is changed when an array-like input is provided, i.e. return from time_to_ground - ts = np.linspace(0,time_to_ground(v0,ang,y0),10) + endTime = time_to_ground(v0, ang, y0) + ts = np.linspace(0, endTime, 10) vx0 = np.cos(ang)*v0 vy0 = np.sin(ang)*v0 - r = prange(v0,ang,y0) + r = prange(v0, ang, y0=y0, g=g) + ymax = pMaxHeight(v0, ang, y0=y0, g=g) x = np.zeros(len(ts)) y = np.zeros(len(ts)) @@ -130,8 +146,18 @@ def main(Input): v[i] = vm a[i] = current_angle(v0, ang, vm) t = ts - return {'x': x, 'y': y, 'r': r, 't': ts, 'v': v, 'a': a, - 'x0': x0, 'y0': y0, 'v0': v0, 'ang': ang, 'timeOption': timeOption} + return {'x': x, + 'y': y, + 'r': r, + 'ymax': ymax, + 't': ts, + 'v': v, + 'a': a, + 'x0': x0, + 'y0': y0, + 'v0': v0, + 'angle': ang, + 'timeOption': timeOption} #can be used as a code as well if __name__=="__main__": @@ -141,6 +167,8 @@ def main(Input): #construct the input Input = {} for line in open(inFile,'r'): + if line.startswith('#') or line.strip()=='': + continue arg, val = (a.strip() for a in line.split('=')) Input[arg] = float(val) #run the code @@ -149,8 +177,9 @@ def main(Input): outFile = open(outFile+'.csv','w') outFile.writelines(','.join(in_vars) + ',' + ','.join(out_vars) + '\n') template = ','.join('{{}}'.format(v) for v in in_vars + out_vars) + '\n' - print('template:', template) for i in range(len(res['t'])): this = [(res[v][i] if len(np.shape(res[v])) else res[v]) for v in in_vars + out_vars] outFile.writelines(template.format(*this)) outFile.close() + print('range:', res['r']) + print('max height:', res['ymax']) \ No newline at end of file diff --git a/tests/framework/OutStreams/gold/linePlot/test_filename.png b/tests/framework/OutStreams/gold/linePlot/test_filename.png index f10af63021..9db7cddc56 100644 Binary files a/tests/framework/OutStreams/gold/linePlot/test_filename.png and b/tests/framework/OutStreams/gold/linePlot/test_filename.png differ diff --git a/tests/framework/ROM/SKLearn/gold/data/outSVRProjectile.csv b/tests/framework/ROM/SKLearn/gold/data/outSVRProjectile.csv new file mode 100644 index 0000000000..57236a466f --- /dev/null +++ b/tests/framework/ROM/SKLearn/gold/data/outSVRProjectile.csv @@ -0,0 +1,12 @@ +angle,r,ProbabilityWeight-angle,prefix,PointProbability,ProbabilityWeight +0.0,-0.000459407907005,0.05,1,0.0111111111111,0.05 +9.0,0.0351414095582,0.1,2,0.0111111111111,0.1 +18.0,0.0628309342533,0.1,3,0.0111111111111,0.1 +27.0,0.0826091661784,0.1,4,0.0111111111111,0.1 +36.0,0.0944761053335,0.1,5,0.0111111111111,0.1 +45.0,0.0984317517185,0.1,6,0.0111111111111,0.1 +54.0,0.0944761053335,0.1,7,0.0111111111111,0.1 +63.0,0.0826091661784,0.1,8,0.0111111111111,0.1 +72.0,0.0628309342533,0.1,9,0.0111111111111,0.1 +81.0,0.0351414095582,0.1,10,0.0111111111111,0.1 +90.0,-0.000459407907005,0.05,11,0.0111111111111,0.05 diff --git a/tests/framework/ROM/SKLearn/gold/data/outSVRProjectile.xml b/tests/framework/ROM/SKLearn/gold/data/outSVRProjectile.xml new file mode 100644 index 0000000000..1a9a6fed8b --- /dev/null +++ b/tests/framework/ROM/SKLearn/gold/data/outSVRProjectile.xml @@ -0,0 +1,12 @@ + + + + outData + angle + r + PointProbability,ProbabilityWeight,ProbabilityWeight-angle,prefix + RAVEN_sample_ID + + + + diff --git a/tests/framework/ROM/SKLearn/gold/data/plotSVRProjectile_scatter-scatter.png b/tests/framework/ROM/SKLearn/gold/data/plotSVRProjectile_scatter-scatter.png new file mode 100644 index 0000000000..6a30edaea1 Binary files /dev/null and b/tests/framework/ROM/SKLearn/gold/data/plotSVRProjectile_scatter-scatter.png differ diff --git a/tests/framework/ROM/SKLearn/svrProjectile.xml b/tests/framework/ROM/SKLearn/svrProjectile.xml new file mode 100644 index 0000000000..cdd93598c9 --- /dev/null +++ b/tests/framework/ROM/SKLearn/svrProjectile.xml @@ -0,0 +1,147 @@ + + + + framework/ROM/SKLearn.SVR + Mohammad Abdo (@Jimmy.INL) + 2022-04-22 + SupervisedLearning.SciKitLearn + + An example exercising supervised sklearn methods, specifically + the svm|SVR model is tested here. + Note, all of the tests in SKLearn operate on a 2D input domain with + the goal of fitting a paraboloid function. The input dimensions are + of largely different scales and one dimension is off-centered from + the origin to ensure that normalization is being handled correctly. + Classifiers will use this same function to determine if a point is + above 0.25, and multitask methods will additionally fit an additive + model (x+y). + + + + + + + data + + sample, + train, + resample, + plot + + + + + dummyIN + projectile + mcSampler + trainingData + + + dummyIN + svrROM + mcSampler + outData + outData + + + trainingData + svrROM + + + trainingData + outData + plotSVRProjectile + + + + + + angle,v0,r,ymax + + + angle,v0 + r,ymax + rbf + True + + + + + + + 100 + 888 + + + vel_dist + + + angle_dist + + 0 + 0 + 1 + + + + + + 1 + 60 + + + 5 + 85 + + + + + + + csv + outData + outSVRProjectile + input,output, metadata + + + + + + scatter + trainingData|Input|angle + trainingData|Output|r + blue + + + scatter + + + outData|Input|angle + outData|Output|r + red + + angle + r + + + png + + + + + + + + angle,v0 + OutputPlaceHolder + + + angle,v0 + r,ymax + + + + angle,v0 + r,ymax + + + diff --git a/tests/framework/ROM/SKLearn/tests b/tests/framework/ROM/SKLearn/tests index 4ee60714d9..3293725fad 100644 --- a/tests/framework/ROM/SKLearn/tests +++ b/tests/framework/ROM/SKLearn/tests @@ -124,6 +124,18 @@ UnorderedCsv = 'data/outSVR.csv' output = 'data/outSVR.xml' [../] + [./SVRProjectile] + type = 'RavenFramework' + input = 'svrProjectile.xml' + required_libraries = 'imageio' + UnorderedCsv = 'data/outSVRProjectile.csv' + rel_err = 5.0e-6 + [./image_diff] + type = ImageDiffer + output = 'data/plotSVRProjectile_scatter-scatter.png' + rel_err = 0.01 + [../] + [../] [./KNR] type = 'RavenFramework' input = 'knr.xml' diff --git a/tests/framework/gold/Basic/to_file.csv b/tests/framework/gold/Basic/to_file.csv index 57a7bc6730..e960ab882c 100644 --- a/tests/framework/gold/Basic/to_file.csv +++ b/tests/framework/gold/Basic/to_file.csv @@ -1,11 +1,11 @@ -v0,angle,r,t,prefix,ProbabilityWeight-v0,ProbabilityWeight-angle,PointProbability,ProbabilityWeight -47.9960360788,34.9632091517,235.063212171,1.0,1,1.0,1.0,0.00021186440678,1.0 -11.8226524752,81.0571449427,14.2627664846,1.0,2,1.0,1.0,0.00021186440678,1.0 -47.0017688598,63.5595150801,225.425130199,1.0,3,1.0,1.0,0.00021186440678,1.0 -36.2141595332,52.8926789127,133.822994969,1.0,4,1.0,1.0,0.00021186440678,1.0 -27.3041326993,17.4814910843,76.0730267819,1.0,5,1.0,1.0,0.00021186440678,1.0 -6.89852031132,17.4795619055,4.85607984547,1.0,6,1.0,1.0,0.00021186440678,1.0 -28.0956843889,9.64668888707,80.5477021715,1.0,7,1.0,1.0,0.00021186440678,1.0 -20.6888080723,74.2940919076,43.6762019849,1.0,8,1.0,1.0,0.00021186440678,1.0 -9.42914204426,53.0892009214,9.0723183358,1.0,9,1.0,1.0,0.00021186440678,1.0 -39.4024199313,61.6458062773,158.423540454,1.0,10,1.0,1.0,0.00021186440678,1.0 +v0,angle,r,t,ProbabilityWeight-angle,ProbabilityWeight,prefix,ProbabilityWeight-v0,PointProbability +47.9960360788,34.9632091517,220.783735327,1.0,1.0,1.0,1,1.0,0.00021186440678 +11.8226524752,81.0571449427,4.38037050675,1.0,1.0,1.0,2,1.0,0.00021186440678 +47.0017688598,63.5595150801,179.750287414,1.0,1.0,1.0,3,1.0,0.00021186440678 +36.2141595332,52.8926789127,128.776201221,1.0,1.0,1.0,4,1.0,0.00021186440678 +27.3041326993,17.4814910843,43.5934255928,1.0,1.0,1.0,5,1.0,0.00021186440678 +6.89852031132,17.4795619055,2.78249435717,1.0,1.0,1.0,6,1.0,0.00021186440678 +28.0956843889,9.64668888707,26.6133882099,1.0,1.0,1.0,7,1.0,0.00021186440678 +20.6888080723,74.2940919076,22.7634097068,1.0,1.0,1.0,8,1.0,0.00021186440678 +9.42914204426,53.0892009214,8.71304351266,1.0,1.0,1.0,9,1.0,0.00021186440678 +39.4024199313,61.6458062773,132.424292509,1.0,1.0,1.0,10,1.0,0.00021186440678 diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/1-historyPlot_scatter-scatter.png b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/1-historyPlot_scatter-scatter.png index 56b345d2f7..b6b75150a6 100644 Binary files a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/1-historyPlot_scatter-scatter.png and b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/1-historyPlot_scatter-scatter.png differ diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/1-samplesPlot3D_scatter-scatter.png b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/1-samplesPlot3D_scatter-scatter.png index def8d2787f..c79347d24c 100644 Binary files a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/1-samplesPlot3D_scatter-scatter.png and b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/1-samplesPlot3D_scatter-scatter.png differ diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/histories_0.csv b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/histories_0.csv index 4ba5aafac2..e507b385ba 100644 --- a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/histories_0.csv +++ b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Grid/histories_0.csv @@ -1,11 +1,11 @@ t,x,y,r -0.0,0.0,0.0,56.7952953668 -0.1111111111111111,1.85358160906,1.7930877819,56.7952953668 -0.2222222222222222,3.70716321812,3.46518790948,56.7952953668 -0.3333333333333333,5.56074482718,5.01630038274,56.7952953668 -0.4444444444444444,7.41432643624,6.44642520167,56.7952953668 -0.5555555555555556,9.2679080453,7.75556236629,56.7952953668 -0.6666666666666666,11.1214896544,8.94371187658,56.7952953668 -0.7777777777777777,12.9750712634,10.0108737326,56.7952953668 -0.8888888888888888,14.8286528725,10.9570479342,56.7952953668 -1.0,16.6822344815,11.7822344815,56.7952953668 +0.0,0.0,0.0,31.7595261196 +0.1111111111111111,2.50681927464,0.70591773797,31.7595261196 +0.2222222222222222,5.01363854929,1.29084782162,31.7595261196 +0.3333333333333333,7.52045782393,1.75479025095,31.7595261196 +0.4444444444444444,10.0272770986,2.09774502595,31.7595261196 +0.5555555555555556,12.5340963732,2.31971214664,31.7595261196 +0.6666666666666666,15.0409156479,2.42069161301,31.7595261196 +0.7777777777777777,17.5477349225,2.40068342505,31.7595261196 +0.8888888888888888,20.0545541972,2.25968758277,31.7595261196 +1.0,22.5613734718,1.99770408618,31.7595261196 diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/1-historyPlot_scatter-scatter.png b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/1-historyPlot_scatter-scatter.png index 031b1a60de..92d847ffd6 100644 Binary files a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/1-historyPlot_scatter-scatter.png and b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/1-historyPlot_scatter-scatter.png differ diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/1-samplesPlot3D_scatter-scatter.png b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/1-samplesPlot3D_scatter-scatter.png index 70ccbc7b65..b238f659ca 100644 Binary files a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/1-samplesPlot3D_scatter-scatter.png and b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/1-samplesPlot3D_scatter-scatter.png differ diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/histories_0.csv b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/histories_0.csv index 1141d48559..929d234fa7 100644 --- a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/histories_0.csv +++ b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/MonteCarlo/histories_0.csv @@ -1,11 +1,11 @@ t,x,y,r -0.0,0.0,0.0,99.1673105954 -0.1111111111111111,2.44928768158,2.38879385442,99.1673105954 -0.2222222222222222,4.89857536316,4.65660005451,99.1673105954 -0.3333333333333333,7.34786304473,6.80341860029,99.1673105954 -0.4444444444444444,9.79715072631,8.82924949174,99.1673105954 -0.5555555555555556,12.2464384079,10.7340927289,99.1673105954 -0.6666666666666666,14.6957260895,12.5179483117,99.1673105954 -0.7777777777777777,17.145013771,14.1808162402,99.1673105954 -0.8888888888888888,19.5943014526,15.7226965144,99.1673105954 -1.0,22.0435891342,17.1435891342,99.1673105954 +0.0,0.0,0.0,98.2474106384 +0.1111111111111111,2.27679535498,2.54991288556,98.2474106384 +0.2222222222222222,4.55359070996,4.97883811679,98.2474106384 +0.3333333333333333,6.83038606494,7.2867756937,98.2474106384 +0.4444444444444444,9.10718141992,9.4737256163,98.2474106384 +0.5555555555555556,11.3839767749,11.5396878846,98.2474106384 +0.6666666666666666,13.6607721299,13.4846624985,98.2474106384 +0.7777777777777777,15.9375674849,15.3086494581,98.2474106384 +0.8888888888888888,18.2143628398,17.0116487635,98.2474106384 +1.0,20.4911581948,18.5936604144,98.2474106384 diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-historyPlot_scatter-scatter.png b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-historyPlot_scatter-scatter.png index bed43e0ec5..9a86f3932d 100644 Binary files a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-historyPlot_scatter-scatter.png and b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-historyPlot_scatter-scatter.png differ diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-samplesModelPlot3D_scatter-scatter.png b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-samplesModelPlot3D_scatter-scatter.png index 1f9af12916..85956f9974 100644 Binary files a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-samplesModelPlot3D_scatter-scatter.png and b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-samplesModelPlot3D_scatter-scatter.png differ diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-samplesROMPlot3D_scatter-scatter.png b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-samplesROMPlot3D_scatter-scatter.png index 3f33a648d9..c31d096f22 100644 Binary files a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-samplesROMPlot3D_scatter-scatter.png and b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/1-samplesROMPlot3D_scatter-scatter.png differ diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/rom_output.xml b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/rom_output.xml index d2c7ad440d..8130e32438 100644 --- a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/rom_output.xml +++ b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/SparseGrid/rom_output.xml @@ -7,321 +7,321 @@ - 93.919550496 - 93.919550496 - 768.831404793 + 66.3724570214 + 66.3724570214 + 1013.79761977 13 - <_0_0_>93.919550496 - <_0_1_>-7.1054273576e-15 - <_0_2_>-0.494924120749 - <_1_0_>27.6607295253 - <_1_1_>7.1054273576e-15 - <_2_0_>1.86292700732 + <_0_0_>66.3724570214 + <_0_1_>0.0 + <_0_2_>-24.6823927141 + <_1_0_>20.107810304 + <_1_1_>0.0 + <_2_0_>0.503065066277 v0,angle - 0.244949885299 - 768.586454908 - 5.04870979341e-29 + 609.220510091 + 404.577109683 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 93.919550496 - 93.919550496 - 768.831404793 + 66.3724570214 + 66.3724570214 + 1013.79761977 13 - <_0_0_>93.919550496 - <_0_1_>-7.1054273576e-15 - <_0_2_>-0.494924120749 - <_1_0_>27.6607295253 - <_1_1_>7.1054273576e-15 - <_2_0_>1.86292700732 + <_0_0_>66.3724570214 + <_0_1_>0.0 + <_0_2_>-24.6823927141 + <_1_0_>20.107810304 + <_1_1_>0.0 + <_2_0_>0.503065066277 v0,angle - 0.244949885299 - 768.586454908 - 5.04870979341e-29 + 609.220510091 + 404.577109683 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 93.919550496 - 93.919550496 - 768.831404793 + 66.3724570214 + 66.3724570214 + 1013.79761977 13 - <_0_0_>93.919550496 - <_0_1_>-7.1054273576e-15 - <_0_2_>-0.494924120749 - <_1_0_>27.6607295253 - <_1_1_>7.1054273576e-15 - <_2_0_>1.86292700732 + <_0_0_>66.3724570214 + <_0_1_>0.0 + <_0_2_>-24.6823927141 + <_1_0_>20.107810304 + <_1_1_>0.0 + <_2_0_>0.503065066277 v0,angle - 0.244949885299 - 768.586454908 - 5.04870979341e-29 + 609.220510091 + 404.577109683 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 93.919550496 - 93.919550496 - 768.831404793 + 66.3724570214 + 66.3724570214 + 1013.79761977 13 - <_0_0_>93.919550496 - <_0_1_>-7.1054273576e-15 - <_0_2_>-0.494924120749 - <_1_0_>27.6607295253 - <_1_1_>7.1054273576e-15 - <_2_0_>1.86292700732 + <_0_0_>66.3724570214 + <_0_1_>0.0 + <_0_2_>-24.6823927141 + <_1_0_>20.107810304 + <_1_1_>0.0 + <_2_0_>0.503065066277 v0,angle - 0.244949885299 - 768.586454908 - 5.04870979341e-29 + 609.220510091 + 404.577109683 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 93.919550496 - 93.919550496 - 768.831404793 + 66.3724570214 + 66.3724570214 + 1013.79761977 13 - <_0_0_>93.919550496 - <_0_1_>-7.1054273576e-15 - <_0_2_>-0.494924120749 - <_1_0_>27.6607295253 - <_1_1_>7.1054273576e-15 - <_2_0_>1.86292700732 + <_0_0_>66.3724570214 + <_0_1_>0.0 + <_0_2_>-24.6823927141 + <_1_0_>20.107810304 + <_1_1_>0.0 + <_2_0_>0.503065066277 v0,angle - 0.244949885299 - 768.586454908 - 5.04870979341e-29 + 609.220510091 + 404.577109683 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 93.919550496 - 93.919550496 - 768.831404793 + 66.3724570214 + 66.3724570214 + 1013.79761977 13 - <_0_0_>93.919550496 - <_0_1_>-7.1054273576e-15 - <_0_2_>-0.494924120749 - <_1_0_>27.6607295253 - <_1_1_>7.1054273576e-15 - <_2_0_>1.86292700732 + <_0_0_>66.3724570214 + <_0_1_>0.0 + <_0_2_>-24.6823927141 + <_1_0_>20.107810304 + <_1_1_>0.0 + <_2_0_>0.503065066277 v0,angle - 0.244949885299 - 768.586454908 - 5.04870979341e-29 + 609.220510091 + 404.577109683 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 93.919550496 - 93.919550496 - 768.831404793 + 66.3724570214 + 66.3724570214 + 1013.79761977 13 - <_0_0_>93.919550496 - <_0_1_>-7.1054273576e-15 - <_0_2_>-0.494924120749 - <_1_0_>27.6607295253 - <_1_1_>7.1054273576e-15 - <_2_0_>1.86292700732 + <_0_0_>66.3724570214 + <_0_1_>0.0 + <_0_2_>-24.6823927141 + <_1_0_>20.107810304 + <_1_1_>0.0 + <_2_0_>0.503065066277 v0,angle - 0.244949885299 - 768.586454908 - 5.04870979341e-29 + 609.220510091 + 404.577109683 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 93.919550496 - 93.919550496 - 768.831404793 + 66.3724570214 + 66.3724570214 + 1013.79761977 13 - <_0_0_>93.919550496 - <_0_1_>-7.1054273576e-15 - <_0_2_>-0.494924120749 - <_1_0_>27.6607295253 - <_1_1_>7.1054273576e-15 - <_2_0_>1.86292700732 + <_0_0_>66.3724570214 + <_0_1_>0.0 + <_0_2_>-24.6823927141 + <_1_0_>20.107810304 + <_1_1_>0.0 + <_2_0_>0.503065066277 v0,angle - 0.244949885299 - 768.586454908 - 5.04870979341e-29 + 609.220510091 + 404.577109683 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 93.919550496 - 93.919550496 - 768.831404793 + 66.3724570214 + 66.3724570214 + 1013.79761977 13 - <_0_0_>93.919550496 - <_0_1_>-7.1054273576e-15 - <_0_2_>-0.494924120749 - <_1_0_>27.6607295253 - <_1_1_>7.1054273576e-15 - <_2_0_>1.86292700732 + <_0_0_>66.3724570214 + <_0_1_>0.0 + <_0_2_>-24.6823927141 + <_1_0_>20.107810304 + <_1_1_>0.0 + <_2_0_>0.503065066277 v0,angle - 0.244949885299 - 768.586454908 - 5.04870979341e-29 + 609.220510091 + 404.577109683 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 93.919550496 - 93.919550496 - 768.831404793 + 66.3724570214 + 66.3724570214 + 1013.79761977 13 - <_0_0_>93.919550496 - <_0_1_>-7.1054273576e-15 - <_0_2_>-0.494924120749 - <_1_0_>27.6607295253 - <_1_1_>7.1054273576e-15 - <_2_0_>1.86292700732 + <_0_0_>66.3724570214 + <_0_1_>0.0 + <_0_2_>-24.6823927141 + <_1_0_>20.107810304 + <_1_1_>0.0 + <_2_0_>0.503065066277 v0,angle - 0.244949885299 - 768.586454908 - 5.04870979341e-29 + 609.220510091 + 404.577109683 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 - 0.000318600259786 - 0.99968139974 - 6.56673200644e-32 + 0.600929118601 + 0.399070881399 + 0.0 diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/1-historyPlot_scatter-scatter.png b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/1-historyPlot_scatter-scatter.png index 3bc89c7feb..3b86e465ca 100644 Binary files a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/1-historyPlot_scatter-scatter.png and b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/1-historyPlot_scatter-scatter.png differ diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/1-samplesPlot3D_scatter-scatter.png b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/1-samplesPlot3D_scatter-scatter.png index c47e13e904..cbe524cab2 100644 Binary files a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/1-samplesPlot3D_scatter-scatter.png and b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/1-samplesPlot3D_scatter-scatter.png differ diff --git a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/histories_0.csv b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/histories_0.csv index 0e585ed19d..0bb1e9c405 100644 --- a/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/histories_0.csv +++ b/tests/framework/user_guide/ForwardSamplingStrategies/gold/RunDir/Stratified/histories_0.csv @@ -1,11 +1,11 @@ t,x,y,r -0.0,0.0,0.0,122.911504033 -0.1111111111111111,2.72679065588,2.66629682872,122.911504033 -0.2222222222222222,5.45358131177,5.21160600313,122.911504033 -0.3333333333333333,8.18037196765,7.63592752321,122.911504033 -0.4444444444444444,10.9071626235,9.93926138897,122.911504033 -0.5555555555555556,13.6339532794,12.1216076004,122.911504033 -0.6666666666666666,16.3607439353,14.1829661575,122.911504033 -0.7777777777777777,19.0875345912,16.1233370603,122.911504033 -0.8888888888888888,21.8143252471,17.9427203088,122.911504033 -1.0,24.541115903,19.641115903,122.911504033 +0.0,0.0,0.0,120.417309699 +0.1111111111111111,2.9875884568,2.3777616506,120.417309699 +0.2222222222222222,5.9751769136,4.63453564688,120.417309699 +0.3333333333333333,8.9627653704,6.77032198884,120.417309699 +0.4444444444444444,11.9503538272,8.78512067647,120.417309699 +0.5555555555555556,14.937942284,10.6789317098,120.417309699 +0.6666666666666666,17.9255307408,12.4517550888,120.417309699 +0.7777777777777777,20.9131191976,14.1035908135,120.417309699 +0.8888888888888888,23.9007076544,15.6344388838,120.417309699 +1.0,26.8882961112,17.0442992998,120.417309699