delta_t=50 #模拟时间步长是500s x_ini=np.random.uniform(pressure_low,pressure_high,well_num) #初始的x向量从均匀分布取出 #x_ini=np.array([pressure_mid]*3) x_opt=np.zeros((len(x_ini),time_step)) #记录初始控制变量和每一个时间步优化之后的控制变量 #x_true=np.random.uniform(pressure_low,pressure_high,well_num) x_true=np.random.uniform(pressure_low,pressure_high,well_num) #初始的x向量从均匀分布取出 h=open('log.txt','w') #gas_cost=() #0肯定是不合实际的 gas_price=16 ##0.16d/m3 gas_cost_ref=2.0e-10 ##采气负压的参考价格 alpha=0.3 ##产生真实参数,产生第一个时间步的观测值样本,从始至终真实参数不变。变的是控制变量和观测值 para_true=generate_para_true(sigma,deltax,deltay,dx,dy,m,n,ki_mean,Nod_num) para_true=para_keys_modify(para_true) np.savetxt('para_true.txt',para_true) write_KI(Nod_num,para_true,root_directory,filename_KI) x_opt[:,0]=x_true ##将初始的控制变量记入x_opt第一列,第一个时间步的反演也是基于该值 time_MODIFY(1,delta_t,filename_time,root_directory) rfd_MODIIFY(1,x_opt,root_directory,filename_rfd) args_true_obs_exe=os.path.join(root_directory,'true_obs','ogs') args_true_obs=os.path.join(root_directory,'true_obs') args_true_obs_para=os.path.join(root_directory,'true_obs','water_gas') pt=subprocess.Popen((args_true_obs_exe,args_true_obs_para),stdout=subprocess.PIPE) pt.communicate() pt.wait() #第一个时间步的观测值 y_obs_p1=generate_real_time_obs(filename_result,obs_Num,Nod_num,N,varR,root_directory) #得到第一个时间步的观测值
point=point.values return point if __name__=='__main__': time_step=20 Nod_num=1681 N=100 varR=80 obs_Num=[213,221,229,237,623,631,639,647,1033,1041,1049,1057,1443,1451,1459,1467] obs_num=len(obs_Num) sigma=0.6 ki_mean=2.9e-15 deltax=1 deltay=0.5 dx=0.05 dy=0.025 x=2 y=1 m=int(y/dy+1) n=int(x/dx+1) para_true=generate_para_true(sigma,deltax,deltay,dx,dy,m,n,ki_mean,root_directory) print para_true.shape para_true_modified=para_keys_modify(para_true) np.savetxt(r'E:\EnKF_Gas_Modelling\true_obs\para_true.txt',para_true_modified) para_distribution_map(para_true_modified,Nod_num,root_directory) write_KI(Nod_num,para_true,root_directory) read_trueobs(20,obs_Num,Nod_num,root_directory)
#产生初始p1 p1_initial=np.zeros([Nod_num,N]) p1_initial=p1_initial+101325 #产生初始参数 para_initial=para_init(sigma,deltax,deltay,dx,dy,m,n,Nod_num,N,ki_mean) np.savetxt('para_initial.txt',para_initial) ki_initial=np.exp(para_initial) print time.ctime() #def runexe(ki_initial,pi_initial,i): for i in xrange(N): args_exe=r'E:\EnKF_Gas_Modelling\gas_{0}\ogs.exe'.format(i) args=r'E:\EnKF_Gas_Modelling\gas_{0}'.format(i) ki_modify=ki_initial[:,i] ki_modify=para_keys_modify(ki_modify) write_ki(Nod_num,ki_modify,i) #para为初始参数,样本之间存在随机扰动 write_p1(Nod_num,p1_initial[:,i],i) win32api.ShellExecute(0,'open',args_exe,'gas',args,0) print i time.sleep(2) time.sleep(10) for k in xrange(N): Obs_p1=read_obs(Nod_num,obs_Num,k) for ii in xrange(obs_num): y_obs_prediction[ii][k]=Obs_p1[ii] #组成观测点处的预测值矩阵 p1_predict=read_p(Nod_num,k) for jj in xrange(Nod_num): p_after[jj][k]=p1_predict[jj] #组成状态变量预测值矩阵