diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..c2fe3772e17c710c5a60741ae2d2276daf520191
Binary files /dev/null and b/.DS_Store differ
diff --git a/__pycache__/class_ISTM.cpython-37.pyc b/__pycache__/class_ISTM.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..6867d92893af57f0831cc12076537d06ab40e442
Binary files /dev/null and b/__pycache__/class_ISTM.cpython-37.pyc differ
diff --git a/applicationIRL_ISTM.py b/applicationIRL_ISTM.py
new file mode 100644
index 0000000000000000000000000000000000000000..909d9d1537469968b5a37bf9c7be85a066442ec4
--- /dev/null
+++ b/applicationIRL_ISTM.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python2
+# -*- coding: utf-8 -*-
+"""
+Created on Wed Oct 31 13:06:48 2018
+
+@author: taopeng
+"""
+
+from class_ISTM import ProcessIRL
+
+import numpy as np
+backTime = 6 #回溯时间 regarder en arrière dans le temps, combien de point du temps
+
+#listTauxTrain = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
+#listTauxTrain = [0.3]
+
+listTauxTrain = [0.3]
+#listTrou = [5, 10, 15, 20 ,25]
+listTrou = [5]
+
+test_or_non = 'yes' # En mode ‘test’, le programme n'exécute qu'une partie des données pour gagner du temps. 在测试模式下,程序进行到30%时会终止,以解约时间 
+#test_or_non = 'Non' # 
+
+'''
+0 ISTM
+1 ISTM_OPM
+2 Dynamique_but_stupide_time_space_model
+3 STATIC_TIME_SPACE
+4 STATIC_TIME
+5 STatiC_SPACE
+6 Moyenne
+7 PrivousValue
+8 ISTM_OPM_fraiche
+'''
+nameMethods = ['ISTM','ISTM_OPM','Dynamic_Space-Time-Based_Model','Static_Space-Time-Based_Model','Static_Time-Based_Model','Static_Space_Based_Model','Mean','Previous_Data','ISTM_OPM_fraiche']
+canditatureMethods =  [0]
+
+listVoisinNumero =  np.load("metaDonneeCityPulse/tousLesVoisinsDeTouslesPionts.npy", allow_pickle=True).tolist()#第一列是本节点名,后续是邻居节点名 La première colonne est le nom de ce nœud, suivi des noms des nœuds voisins
+#listVoisinNumero = np.load("newEXP_RH/simulationDonnees//tousLesVoisinsDeTouslesPionts_RH_TH.npy", allow_pickle=True).tolist()#第一列是本节点名,后续是邻居节点名 La première colonne est le nom de ce nœud, suivi des noms des nœuds voisins
+
+
+
+#读取 E_original方便以后比较
+E_original  = np.load("metaDonneeCityPulse/E_origninal.npy").tolist()
+for indexMethods in canditatureMethods:
+    print ("le method est :" + nameMethods[indexMethods])
+    table_score=[] 
+    table_time=[] 
+    for tauxTrain in listTauxTrain:  
+        score_taux_special = []
+        time_taux_special = []
+        for trou in listTrou:
+            E_special = np.load('simulationDonneesCityPluse/E'+str(trou)+'_tauxTrain'+str(int(tauxTrain*100))+'.npy').tolist()
+            print ("% SMV est " + str(trou) + ", % utilisée pour l'initialisation = " + str(int(tauxTrain*100)))
+            methode = ProcessIRL(E_original,E_special,tauxTrain,trou,backTime,listVoisinNumero,testModel=test_or_non)
+            score,time = (0,0)
+            if indexMethods == 0:
+                methode.trainFirst_ISTM()
+                time, score = methode.prosser_unParUn_jusquaFini_ISTM()#ISTM
+            elif indexMethods == 1:
+                methode.trainFirst_ISTM()
+                time, score = methode.prosser_unParUn_jusquaFini_ISTM_OPM()#ISTM_OPM
+                
+            elif indexMethods == 2:
+                methode.trainFirst_Dymanic_TRA_opm_time_space_model()
+                time, score = methode.prosser_unParUn_jusquaFini_Dymanic_TRA_opm_Time_space_based_model()#Dynamique_but_stupide_time_space_model
+            elif indexMethods == 3:
+                methode.trainFirst_Static_time_space_model()
+                time, score = methode.prosser_unParUn_jusquaFini_STATIC_Time_space_based_model()#STATIC_TIME_SPACE
+            elif indexMethods == 4:
+                methode.trianFirst_time_based_model()
+                time, score = methode.prosser_unParUn_jusquaFini_time_based_model()#STATIC_TIME
+            elif indexMethods == 5:
+                methode.trianFirst_space_based_model()
+                time, score = methode.prosser_unParUn_jusquaFini_space_based_model()#STatiC_SPACE
+            elif indexMethods == 6:
+                methode.trainFirst_moyenne_model()
+                time, score = methode.prosser_moyenne_model()#Moyenne
+            elif indexMethods == 7:
+                time, score = methode.prosser_PrivousValue_model()#PrivousValue
+            elif indexMethods == 8:
+                methode.trainFirst_ISTM()
+                time, score = methode.prosser_unParUn_jusquaFini_ISTM_OPM_fraiche(0.9999)#ISTM_OPM_fraiche
+                
+            nom_file_E_repare_et_E_original =  "resultat/"+ str(nameMethods[indexMethods])+"_E_repare_et_E_original_all"+"_BackTime"+str(backTime)+"_modelTest"+str(test_or_non)+str(trou)
+            np.save(nom_file_E_repare_et_E_original, methode.get_E_resultat_E_original_E_a_reparer_all())
+                
+            print(score**0.5,time)
+            
diff --git a/class_ISTM.py b/class_ISTM.py
new file mode 100644
index 0000000000000000000000000000000000000000..85449d0be7943f0312ba6e53f5e67e9bd072c2be
--- /dev/null
+++ b/class_ISTM.py
@@ -0,0 +1,391 @@
+#!/usr/bin/env python2
+# -*- coding: utf-8 -*-
+"""  
+
+Created on Wed Oct 31 13:05:25 2018
+新的变化1
+@author: taopeng
+"""
+
+
+from _4rd_RegressionIncremental_andMethodAncien import IRL
+import numpy as np
+
+from datetime import datetime  
+import copy
+import sys
+   
+class Chrono: 
+    def __init__(self):
+        self.start = datetime.utcnow()
+    def fini(self):
+        end = datetime.utcnow()  
+#        c = (end - self.start).microseconds
+        c = (end - self.start).seconds
+        return c
+
+'''
+ProcessIRL 是为了一次完整的修复工作而产生一个实例,
+ProcessIRL: générer une instance pour un travail de réparation complet
+'''
+class ProcessIRL:
+    def __init__(self,E_original,E_aReparer,tauxTrain,trou,backTime,listVoisinNumero ,testModel='no'):
+        self.E_original = copy.deepcopy(E_original) 
+        self.E_a_reparer = copy.deepcopy(E_aReparer) 
+        self.E_resultat = copy.deepcopy(E_aReparer)
+        
+        self.trou = trou
+        self.backTime = backTime
+        
+        self.indexFinInitiation = int(len(E_original[0])*tauxTrain)#
+        #为了节约测试时间,并不使用到最后一个时间点的数据,而是在分分界点前后各取10%
+        #  Afin de gagner du temps lors des essais, "testModel" ne prends que 10 % des donnees avant et après 
+        if testModel == 'yes':
+            self.idnexStarInitiation = self.backTime + int(len(E_original[0])*(tauxTrain - 0.1))
+            self.indexFini_MIS_a_jour = int(len(E_original[0])*(tauxTrain + 0.02))
+        else:
+            self.idnexStarInitiation = backTime
+            self.indexFini_MIS_a_jour = len(E_original[0]) 
+        
+        self.listVoisinNumero = listVoisinNumero
+        
+
+#        print(self.listVoisinNumero)
+        #提取传感器名单 Extraction de la liste des capteurs
+        self.listNumeroSensor = []
+        for c in self.listVoisinNumero:
+            self.listNumeroSensor.append(c[0])
+        
+        #model 用来存储实例, numeroModel用来存储其对应的传感器编号,将两者分开,使得regression只负责运算和数据来源脱钩
+        # model Utilisé pour stocker les instances (procesuss de reparation)
+        self.model = []
+
+        #存储消耗的时间 Temps consommé
+        self.comsomationTime = 0
+        
+        #存储SSE值 Stockage des valeurs de l'ESS
+        self.SSE_score = 0
+        self.numDonneesManquanesInTest = 0
+        
+        
+#        print (id(self.E_a_reparer),id(self.E_resultat))
+
+    def getComsomationTime(self):
+        return self.comsomationTime
+        
+    def calcule_and_getSSE(self):
+        a = []
+        for timePoint in range(self.indexFinInitiation,self.indexFini_MIS_a_jour):
+            for indexSensor in range(0,len(self.E_original)):
+                if self.E_a_reparer[indexSensor][timePoint] == -2:
+                    self.SSE_score = self.SSE_score + np.square(self.E_original[indexSensor][timePoint]-self.E_resultat[indexSensor][timePoint])
+                    self.numDonneesManquanesInTest +=1
+                    a.append(self.SSE_score)
+        # print ("总分数 %d, 修复的个数 %d" %(self.SSE_score,self.numDonneesManquanesInTest ))
+        # print (self.SSE_score, self.numDonneesManquanesInTest)
+#        np.savetxt('SSE_score_test.csv',a)
+        return self.SSE_score/self.numDonneesManquanesInTest 
+    
+
+    def get_E_resultat_E_original_E_a_reparer(self):
+        E_resultat = np.array(self.E_resultat)[:,self.indexFinInitiation : self.indexFini_MIS_a_jour]
+        E_original = np.array(self.E_original)[:,self.indexFinInitiation : self.indexFini_MIS_a_jour]
+        E_a_reparer = np.array(self.E_a_reparer)[:,self.indexFinInitiation : self.indexFini_MIS_a_jour]
+#        print('np.array(self.E_resultat).shape  ',np.array(self.E_resultat).shape)
+#        print('E_resultat.shape  ', E_resultat.shape)
+        return E_resultat,E_original,E_a_reparer
+
+    def get_E_resultat_E_original_E_a_reparer_all(self):
+        E_resultat = np.array(self.E_resultat)
+        E_original = np.array(self.E_original)
+        E_a_reparer = np.array(self.E_a_reparer)
+#        print('np.array(self.E_resultat).shape  ',np.array(self.E_resultat).shape)
+#        print('E_resultat.shape  ', E_resultat.shape)
+        return E_resultat,E_original,E_a_reparer    
+        
+
+
+#########################about ISTM############################################
+    #获取一个T形窗户里所有的信息 Obtenez toutes les informations dans une fenêtre en forme de T
+    def getFeatureOfISTM(self,indexSensor,timePoint):
+        #获取目标节点的邻居节点编号 Obtenir le numéro du nœud voisin du nœud cible
+        myVoisins = self.listVoisinNumero[indexSensor][1:]#
+
+        #   Obtenir le numéro du nœud voisin
+        IndexMyVoisins = []
+        for c in range(0,len(myVoisins)):
+#            print (c)
+#            print (myVoisins[c])
+            IndexMyVoisins.append(self.listNumeroSensor.index(myVoisins[c]))
+        #   获取上一时间节点,周围邻居节点的观测值 Obtenir l'observation du nœud voisin au point temporel précédent
+        ValueVoisinPreviousTimeNode= []
+        for c in range(0,len(IndexMyVoisins)):
+            ValueVoisinPreviousTimeNode.append(self.E_resultat[IndexMyVoisins[c]][timePoint-1])
+        # 获得本观测点的最近的历史数据 Obtenir les données historiques les plus récentes pour ce point d'observation
+        ValueMyHistoricalData= self.E_resultat[indexSensor][(timePoint-self.backTime):timePoint]
+
+        return ValueMyHistoricalData + ValueVoisinPreviousTimeNode, self.E_resultat[indexSensor][timePoint]
+    
+    # 在getFeatureOfISTM基础上,准备训练(初始化)数据集
+    #Avec getFeatureOfISTM, préparez (initialisez) le jeu de données
+    def getEnsembleInitiation_FeatureOfISTM(self,indexSensor):
+        X = []
+        Y = []
+        for timePiont in range(self.idnexStarInitiation,self.indexFinInitiation):
+            tempX, tempY = self.getFeatureOfISTM(indexSensor,timePiont)
+            X.append(tempX)
+            Y.append(tempY)
+        return X,np.transpose(Y).tolist()  
+
+    # 初始化
+    # initialiser
+    def trainFirst_ISTM(self):
+        for indexSensor in range(0,len(self.E_original)):
+            temp = IRL()
+            X,Y = self.getEnsembleInitiation_FeatureOfISTM(indexSensor)
+            temp.fistTraining(X,Y)
+            self.model.append(temp) 
+        print ("trainFirst_ISTM initialtion fini")
+
+    # 利用 Incremental RL 更新模型,一个更新一个实例。
+    # Mettre à jour le modèle en utilisant le RL incrémental, une mise à jour par instance.
+    def prosser_unParUn_jusquaFini_ISTM(self):
+        tempTRL = Chrono()   
+        for timePoint in range(self.indexFinInitiation,self.indexFini_MIS_a_jour):
+            sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.flush()
+            for indexSensor in range(0,len(self.E_original)):
+                X,Y = self.getFeatureOfISTM(indexSensor,timePoint)
+                if Y == -1 or Y == -2:
+                    self.E_resultat[indexSensor][timePoint] = self.model[indexSensor].predictionUn(X)
+                else:
+                    self.model[indexSensor].misAjour_INCRE_unParUn(X,Y)  # MIS A Jour
+        self.comsomationTime = tempTRL.fini()
+        return self.comsomationTime,self.calcule_and_getSSE()
+    
+    # 利用 Incremental RL 更新模型
+    #,Ne mettre à jour le modèle que lorsque des valeurs manquantes sont rencontrées
+    def prosser_unParUn_jusquaFini_ISTM_OPM(self): # 
+        tempTRL = Chrono()   
+        for timePoint in range(self.indexFinInitiation,self.indexFini_MIS_a_jour):
+            #sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.flush()
+            for indexSensor in range(0,len(self.E_original)):
+                X,Y = self.getFeatureOfISTM(indexSensor,timePoint)
+                if Y == -1 or Y == -2:#遇到缺失值了 J'ai rencontré une valeur manquante.
+                    bufferX, bufferY = self.model[indexSensor].buffer_Get()# Obtenir de nouvelles données dans le buffer
+                    if len(bufferY) != 0:# ne mettre à jour le modèle que lorsqu'il y a des données dans le cache
+                        self.model[indexSensor].buffuer_Clean()# Vider le cbuffer
+                        self.model[indexSensor].misAJour_INCRE_lot(bufferX,bufferY)# Mise à jour avec de nouvelles données avec " misAJour_INCRE_lot "
+                    self.E_resultat[indexSensor][timePoint] = self.model[indexSensor].predictionUn(X)
+#                    print (self.E_resultat[indexSensor][timePoint],self.E_original[indexSensor][timePoint] )
+                else:
+                    self.model[indexSensor].buffuer_Add(X,Y)#Lorsque vous rencontrez des données normales, mettez-les d'abord dans le cache,
+        self.comsomationTime = tempTRL.fini()
+        return self.comsomationTime,self.calcule_and_getSSE() 
+    
+
+    def prosser_unParUn_jusquaFini_ISTM_OPM_fraiche(self,fraiche):
+        tempTRL = Chrono()   
+        for timePoint in range(self.indexFinInitiation,self.indexFini_MIS_a_jour):
+            #sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.flush()
+            for indexSensor in range(0,len(self.E_original)):
+                X,Y = self.getFeatureOfISTM(indexSensor,timePoint)
+                if Y == -1 or Y == -2:#遇到缺失值了
+                    bufferX, bufferY = self.model[indexSensor].buffer_Get()#得到新数据
+                    if len(bufferY) != 0:#保险,当缓存里有数据时才更新模型
+                        self.model[indexSensor].buffuer_Clean()#清空缓存
+#                        self.model[indexSensor].lossFunction_misAjour(fraiche,len(bufferY))# 使用损失函数对过去的中间矩阵进行"降温"
+                        self.model[indexSensor].lossFunction_misAjour(fraiche,len(bufferY))# 使用损失函数对过去的中间矩阵进行"降温"                       
+                        self.model[indexSensor].misAJour_INCRE_lot(bufferX,bufferY)#使用新数据更新
+                    try:#防止遇到奇异矩阵
+                        self.E_resultat[indexSensor][timePoint] = np.absolute(self.model[indexSensor].predictionUn(X)) # 使用绝对值,提升准确率
+                    except:#解决方案是用前值 / 50
+                        self.E_resultat[indexSensor][timePoint] = self.E_resultat[indexSensor][timePoint-1]
+#                        self.E_resultat[indexSensor][timePoint] = 50
+#                    print (self.E_resultat[indexSensor][timePoint],self.E_original[indexSensor][timePoint] )
+                else:                    
+                    self.model[indexSensor].buffuer_Add(X,Y)#遇到正常数据了先放进缓存,不着急更新
+        self.comsomationTime = tempTRL.fini()
+        return self.comsomationTime,self.calcule_and_getSSE()     
+    
+    
+########################time-based#############
+    # Les données de référence pour les valeurs manquantes proviennent uniquement de données historiques pour cette point d‘observation
+    # 输入传感器位置(哪个传感器),哪个时间点
+    #返回某一个传感器过去小段历史值
+    def getRectenlyHistoricData(self,indexSensor,timePoint):
+        ValueMyHistoricalData = self.E_resultat[indexSensor][timePoint-self.backTime:timePoint]
+        return ValueMyHistoricalData,self.E_resultat[indexSensor][timePoint]#返回某一个传感器过去小段历史值(前),当前值(后)
+        
+    # 输入:传感器编号
+    #获得某个时间点前所有数据历史数据(可以用在(单纯)时间模型的初始化上)
+    def getEnsemble_RectenlyHistoricData(self,indexSensor):#返回某一个传感器过去(所有组合)小段历史值(前),当前值(后)
+        X = []
+        Y = []
+        for timePiont in range(self.idnexStarInitiation,self.indexFinInitiation):
+            tempX, tempY = self.getRectenlyHistoricData(indexSensor,timePiont)
+            X.append(tempX)
+            Y.append(tempY)
+        return X,np.transpose(Y).tolist()
+    
+    def trianFirst_time_based_model(self):
+        for indexSensor in range(0,len(self.E_original)):
+            temp = IRL()
+            X,Y = self.getEnsemble_RectenlyHistoricData(indexSensor)
+            temp.fistTraining(X,Y)
+            self.model.append(temp)
+        print ("trianFirst_time_based_model initialtion fini")
+  
+    def prosser_unParUn_jusquaFini_time_based_model(self):
+        tempTRL = Chrono()   
+        for timePoint in range(self.indexFinInitiation,self.indexFini_MIS_a_jour):
+            sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.flush()
+            for indexSensor in range(0,len(self.E_original)):
+                X,Y = self.getRectenlyHistoricData(indexSensor,timePoint)
+                if Y == -1 or Y == -2:
+                    self.E_resultat[indexSensor][timePoint] = self.model[indexSensor].predictionUn(X)
+        self.comsomationTime = tempTRL.fini()
+        return self.comsomationTime,self.calcule_and_getSSE()
+
+########################往下space-based#############
+# Les données de référence pour les valeurs manquantes proviennent uniquement de données des ses voision au point du temps precedents 
+
+    def getPrivousDataVoisin(self,indexSensor,timePoint):
+#    获取目标节点的邻居节点编号
+        myVoisins = self.listVoisinNumero[indexSensor][1:]#
+#   获取周围邻居结点在E中位置,其实是利用indexInE来获得
+        IndexMyVoisins = []
+        for c in range(0,len(myVoisins)):
+            IndexMyVoisins.append(self.listNumeroSensor.index(myVoisins[c]))
+#   获取上一时间节点,周围邻居节点的观测值
+        ValueVoisinPreviousTimeNode= []
+        for c in range(0,len(IndexMyVoisins)):
+            ValueVoisinPreviousTimeNode.append(self.E_resultat[IndexMyVoisins[c]][timePoint-1])
+        return ValueVoisinPreviousTimeNode, self.E_resultat[indexSensor][timePoint]
+    
+    def getEnsemble_PrivousDataVoisin(self,indexSensor):
+        X = []
+        Y = []
+        for timePiont in range(self.idnexStarInitiation,self.indexFinInitiation):
+            tempX, tempY = self.getPrivousDataVoisin(indexSensor,timePiont)
+            X.append(tempX)
+            Y.append(tempY)
+        return X,np.transpose(Y).tolist()
+        
+    def trianFirst_space_based_model(self):
+        for indexSensor in range(0,len(self.E_original)):
+            temp = IRL()
+            X,Y = self.getEnsemble_PrivousDataVoisin(indexSensor)
+            temp.fistTraining(X,Y)
+            self.model.append(temp)
+        print ("trianFirst_space_based_model initialtion fini")
+
+    def prosser_unParUn_jusquaFini_space_based_model(self):
+        tempTRL = Chrono()   
+        for timePoint in range(self.indexFinInitiation,self.indexFini_MIS_a_jour):
+            sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.flush()
+            for indexSensor in range(0,len(self.E_original)):
+                X,Y = self.getPrivousDataVoisin(indexSensor,timePoint)
+                if Y == -1 or Y == -2:
+                    self.E_resultat[indexSensor][timePoint] = self.model[indexSensor].predictionUn(X)
+        self.comsomationTime = tempTRL.fini()
+        return self.comsomationTime,self.calcule_and_getSSE() 
+    
+########################PrivousValue#############     
+    def prosser_PrivousValue_model(self):
+        tempTRL = Chrono()   
+        for timePoint in range(self.indexFinInitiation,self.indexFini_MIS_a_jour):
+            sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.flush()
+            for indexSensor in range(0,len(self.E_original)):
+                Y = self.E_resultat[indexSensor][timePoint]
+                if Y == -1 or Y == -2:
+                    self.E_resultat[indexSensor][timePoint] = self.E_resultat[indexSensor][timePoint-1]
+        self.comsomationTime = tempTRL.fini()
+        return self.comsomationTime,self.calcule_and_getSSE() 
+        
+########################Moyenne#############
+    def trainFirst_moyenne_model(self):
+        for indexSensor in range(0,len(self.E_original)):
+            temp = IRL()
+            temp.meanOfY(self.E_resultat[indexSensor][self.idnexStarInitiation:self.indexFinInitiation])
+            self.model.append(temp)
+        print ("trainFirst_moyenne_model initialtion fini")
+
+    
+    def prosser_moyenne_model(self):
+        tempTRL = Chrono()   
+        for timePoint in range(self.indexFinInitiation,self.indexFini_MIS_a_jour):
+            sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.flush()
+            for indexSensor in range(0,len(self.E_original)):
+                Y = self.E_resultat[indexSensor][timePoint]
+                if Y == -1 or Y == -2:
+                    self.E_resultat[indexSensor][timePoint] = self.model[indexSensor].getMeanY()
+                else:
+                    self.model[indexSensor].misAjour_meanOfY(Y)
+        self.comsomationTime = tempTRL.fini()
+        return self.comsomationTime,self.calcule_and_getSSE() 
+    
+########################Static_time_space_model############# 
+# like ISTM, sans mis a jour
+    def trainFirst_Static_time_space_model(self):
+        self.trainFirst_ISTM()
+        print ("trainFirst_Static_time_space_model initialtion fini")
+    
+    def prosser_unParUn_jusquaFini_STATIC_Time_space_based_model(self):
+        tempTRL = Chrono()   
+        for timePoint in range(self.indexFinInitiation,self.indexFini_MIS_a_jour):
+            sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.flush()
+            for indexSensor in range(0,len(self.E_original)):
+                X,Y = self.getFeatureOfISTM(indexSensor,timePoint)
+                if Y == -1 or Y == -2:
+                    self.E_resultat[indexSensor][timePoint] = self.model[indexSensor].predictionUn(X)
+        self.comsomationTime = tempTRL.fini()
+        return self.comsomationTime,self.calcule_and_getSSE()
+
+########################_Dynamique_but_stupide_time_space_model#############
+# like ISTM, mais la mis à jour est " retraing with all old data "
+    def trainFirst_Dymanic_TRA_opm_time_space_model(self):
+        self.trainFirst_ISTM()
+        print ("trainFirst_Dymanic_TRA_opm_time_space_model initialtion fini")
+    
+    def prosser_unParUn_jusquaFini_Dymanic_TRA_opm_Time_space_based_model(self):
+        tempTRL = Chrono()   
+        for timePoint in range(self.indexFinInitiation,self.indexFini_MIS_a_jour):
+            sys.stdout.write("\r %s of %s " % (timePoint,self.indexFini_MIS_a_jour))
+            sys.stdout.flush()
+            for indexSensor in range(0,len(self.E_original)):
+                X,Y = self.getFeatureOfISTM(indexSensor,timePoint)
+                if Y == -1 or Y == -2:
+                    self.self.model[indexSensor].misAjour_TRA_recalcule_matric_intermediaire()
+                    self.E_resultat[indexSensor][timePoint] = self.model[indexSensor].predictionUn(X)
+                else:
+                    self.model[indexSensor].misAJour_TRA_Just_add_XY(X,Y) #仅添加新数据
+                    
+        self.comsomationTime = tempTRL.fini()
+        return self.comsomationTime,self.calcule_and_getSSE()
+
+
+
+#
+#E_original =np.load("E_origninal.npy").tolist()
+#E_aReparer =np.load("simulationDonnees/E5_tauxTrain90.npy").tolist()
+#tauxTrain = 0.9
+#trou = 5
+#backTime = 6
+#
+#
+#oneProcessTest = ProcessIRL(E_original,E_aReparer,tauxTrain,trou,backTime,testModel='yes')
+#oneProcessTest.trainFirst_ISTM()
+#print oneProcessTest.prosser_unParUn_jusquaFini_ISTM()
+
+                
+            
diff --git a/metaDonneeCityPulse/E_origninal.npy b/metaDonneeCityPulse/E_origninal.npy
new file mode 100644
index 0000000000000000000000000000000000000000..e6b84ab06f59894d0a23a561c82344266dc9cc3b
Binary files /dev/null and b/metaDonneeCityPulse/E_origninal.npy differ
diff --git a/metaDonneeCityPulse/tousLesVoisinsDeTouslesPionts.npy b/metaDonneeCityPulse/tousLesVoisinsDeTouslesPionts.npy
new file mode 100644
index 0000000000000000000000000000000000000000..d32eaf8f705ecc2f9ddfcc8bc2ef91edd0787e04
Binary files /dev/null and b/metaDonneeCityPulse/tousLesVoisinsDeTouslesPionts.npy differ
diff --git a/resultat/ISTM_E_repare_et_E_original_all_BackTime6_modelTestyes5.npy b/resultat/ISTM_E_repare_et_E_original_all_BackTime6_modelTestyes5.npy
new file mode 100644
index 0000000000000000000000000000000000000000..ec56b6249f48d0d5f168576df2dbd6b53a89a241
Binary files /dev/null and b/resultat/ISTM_E_repare_et_E_original_all_BackTime6_modelTestyes5.npy differ
diff --git a/resultat/ISTM_OPM_E_repare_et_E_original_all_BackTime6_modelTestyes5.npy b/resultat/ISTM_OPM_E_repare_et_E_original_all_BackTime6_modelTestyes5.npy
new file mode 100644
index 0000000000000000000000000000000000000000..cd74b6a1692f66bee07d443db0f4e02ef6179a00
Binary files /dev/null and b/resultat/ISTM_OPM_E_repare_et_E_original_all_BackTime6_modelTestyes5.npy differ
diff --git a/simulationDonneesCityPluse/.DS_Store b/simulationDonneesCityPluse/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6
Binary files /dev/null and b/simulationDonneesCityPluse/.DS_Store differ
diff --git a/simulationDonneesCityPluse/E10_tauxTrain30.npy b/simulationDonneesCityPluse/E10_tauxTrain30.npy
new file mode 100644
index 0000000000000000000000000000000000000000..e530d9df45e8d4d25fb5eea00a4180e2f372f2ee
Binary files /dev/null and b/simulationDonneesCityPluse/E10_tauxTrain30.npy differ
diff --git a/simulationDonneesCityPluse/E15_tauxTrain30.npy b/simulationDonneesCityPluse/E15_tauxTrain30.npy
new file mode 100644
index 0000000000000000000000000000000000000000..8117d14fd13d61da4d422cb5215d2e10eb366462
Binary files /dev/null and b/simulationDonneesCityPluse/E15_tauxTrain30.npy differ
diff --git a/simulationDonneesCityPluse/E20_tauxTrain30.npy b/simulationDonneesCityPluse/E20_tauxTrain30.npy
new file mode 100644
index 0000000000000000000000000000000000000000..5e39e3394f86aa40b7376eb91ce37c49a3179775
Binary files /dev/null and b/simulationDonneesCityPluse/E20_tauxTrain30.npy differ
diff --git a/simulationDonneesCityPluse/E25_tauxTrain30.npy b/simulationDonneesCityPluse/E25_tauxTrain30.npy
new file mode 100644
index 0000000000000000000000000000000000000000..b9f98ff94b186af52b57c55790716c87d1539d86
Binary files /dev/null and b/simulationDonneesCityPluse/E25_tauxTrain30.npy differ
diff --git a/simulationDonneesCityPluse/E5_tauxTrain30.npy b/simulationDonneesCityPluse/E5_tauxTrain30.npy
new file mode 100644
index 0000000000000000000000000000000000000000..63967b4db78fcd0126b519cb94df80ca39927cf9
Binary files /dev/null and b/simulationDonneesCityPluse/E5_tauxTrain30.npy differ