コード例 #1
0
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)  #得到第一个时间步的观测值
コード例 #2
0
    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)

コード例 #3
0
#产生初始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]     #组成状态变量预测值矩阵