def main(argv=None): if argv is None: argv = sys.argv parser = OptionParser(add_help_option=False) parser.add_option("-i", dest="iFile") parser.add_option("-t", dest="iType") parser.add_option("-o", dest="oFile") parser.add_option("-n", dest="nStates", type="int", default=5) parser.add_option("-h", dest="shoHelp", action="store_true", default=False) parser.add_option("-v", dest="verbose", action="store_true", default=False) opt, args = parser.parse_args() if opt.shoHelp: usage() dataMat = None dataSiz = None try: if opt.iType == 'vFile': (dataMat, dataSiz) = dsutil.loadDataFromVideoFile(opt.iFile) elif opt.iType == 'aFile': (dataMat, dataSiz) = dsutil.loadDataFromASCIIFile(opt.iFile) elif opt.iType == 'lFile': (dataMat, dataSiz) = dsutil.loadDataFromIListFile(opt.iFile) else: dsinfo.fail("Unsupported file type : %s" % opt.iType) return -1 # catch pyds exceptions except ErrorDS as e: msg.fail(e) return -1 try: kpcaP = KPCAParam() kpcaP._kPar = RBFParam() kpcaP._kPar._kCen = True kpcaP._kFun = rbfK kdt = NonLinearDS(opt.nStates, kpcaP, opt.verbose) kdt.suboptimalSysID(dataMat) if not opt.oFile is None: if not kdt.check(): dsinfo.fail('cannot write invalid model!') return -1 dsinfo.info('writing model to %s' % opt.oFile) with open(opt.oFile, 'w') as fid: pickle.dump(kdt, fid) except ErrorDS as e: dsinfo.fail(e) return -1
def test_NonLinearDS_check(): """Test NonLinearDS parameter checking. """ kpcaP = KPCAParam() kpcaP._kPar = RBFParam() kpcaP._kPar._kCen = True kpcaP._kFun = rbfK nlds = NonLinearDS(5, kpcaP, False) assert nlds.check() is False
def test_NonLinearDS_suboptimalSysID(): """Test NonLinearDS system identification. """ dataFile = os.path.join(TESTBASE, "data/data1.txt") data, _ = loadDataFromASCIIFile(dataFile) kpcaP = KPCAParam() kpcaP._kPar = RBFParam() kpcaP._kPar._kCen = True kpcaP._kFun = rbfK nlds = NonLinearDS(5, kpcaP, False) nlds.suboptimalSysID(data) baseNLDSFile = os.path.join(TESTBASE, "data/data1-rbf-kdt-5c-center.pkl") baseNLDS = pickle.load(open(baseNLDSFile)) err = NonLinearDS.naiveCompare(baseNLDS, nlds) assert np.allclose(err, 0.0) == True
def test_NonLinearDS_suboptimalSysID(): """Test NonLinearDS system identification. """ dataFile = os.path.join(TESTBASE, "data/data1.txt") data, _ = loadDataFromASCIIFile(dataFile) kpcaP = KPCAParam() kpcaP._kPar = RBFParam() kpcaP._kPar._kCen = True kpcaP._kFun = rbfK nlds = NonLinearDS(5, kpcaP, False) nlds.suboptimalSysID(data) baseNLDSFile = os.path.join(TESTBASE, "data/data1-rbf-kdt-5c-center.pkl") baseNLDS = pickle.load(open(baseNLDSFile)) err = NonLinearDS.naiveCompare(baseNLDS, nlds) np.testing.assert_almost_equal(err, 0, 2)
def test_nldsMartinDistance(): """Test Martin distance computation for NLDS's. Config: 5 states, kernel centering """ fileA = os.path.join(TESTBASE, "data/data1.txt") fileB = os.path.join(TESTBASE, "data/data2.txt") # load data files dataA, _ = loadDataFromASCIIFile(fileA) dataB, _ = loadDataFromASCIIFile(fileB) # configure kernels kpcaPA = KPCAParam() kpcaPA._kPar = RBFParam() kpcaPA._kPar._kCen = True kpcaPA._kFun = rbfK kpcaPB = KPCAParam() kpcaPB._kPar = RBFParam() kpcaPB._kPar._kCen = True kpcaPB._kFun = rbfK nldsA = NonLinearDS(5, kpcaPA, False) nldsB = NonLinearDS(5, kpcaPB, False) # estimate NLDS's nldsA.suboptimalSysID(dataA) nldsB.suboptimalSysID(dataB) # compute distances A<->A, A<->B dAA = nldsMartinDistance(nldsA, nldsA, 20) dAB = nldsMartinDistance(nldsA, nldsB, 20) truth = np.genfromtxt(os.path.join(TESTBASE, "data/nldsMartinDistanceData1Data2.txt" )) np.testing.assert_almost_equal(dAA, 0, 2) np.testing.assert_almost_equal(dAB, truth, 2)