日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

论文代码解读 Hierarchical Reinforcement Learning for Scarce Medical Resource Allocation

發(fā)布時(shí)間:2025/4/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 论文代码解读 Hierarchical Reinforcement Learning for Scarce Medical Resource Allocation 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

論文解讀?論文筆記 Hierarchical Reinforcement Learning for Scarce Medical Resource Allocation_UQI-LIUWJ的博客-CSDN博客

代碼部分

KYHKL-Q/Hierarchical-RL (github.com)?

1 RL_train.py

訓(xùn)練強(qiáng)化學(xué)習(xí)模塊的部分

由于論文中提及了口罩和床位兩個(gè)指標(biāo),兩個(gè)的模型在很多方面都是類似的,所以為了方便起見,我只設(shè)計(jì)口罩部分

1.1 導(dǎo)入庫(kù)

import numpy as np import json import torch import random import copy import os from torch import nn,optim from simulator import simulator from reward_fun import reward_fun

1.2 RL_train 類

1.2.1 __init__

def __init__(self,action_lr=0.001, #action ,也就是論文中顯著性排序DQN的學(xué)習(xí)率Actor_lr=0.001, #actor(生成滿足因子)的學(xué)習(xí)率Critic_lr=0.002, #critic的學(xué)習(xí)率decay_rate=0.5, #未來(lái)獎(jiǎng)勵(lì)的折現(xiàn)率 batch_size=8, #batch_sizepool_volume=128, #經(jīng)驗(yàn)回放 buffer的大小action_explore_factor=0.5, #action 探索的比例 (ε-greedy)Actor_explore_factor=0.05, #actor探索的比例 (ε-greedy)soft_replace_rate=0.1, #軟更新,eval的參數(shù)對(duì)target net的影響#DDPG問題中,每次target net向eval net靠近的幅度train_steps=150, #總共要訓(xùn)練的輪數(shù)(類似于epoch-number)interval=48, #每隔多久更新一次八狀態(tài)mask_total=1000000, #總的口罩?jǐn)?shù)量mask_quality=0.9, #醫(yī)用口罩有效過濾病毒的比例mask_lasting=48, #口罩有效期city='city_sample' #研究區(qū)域的名稱):print('Initializing...')self.action_lr=action_lrself.Actor_lr=Actor_lrself.Critic_lr=Critic_lrself.decay_rate=decay_rate self.batch_size=batch_sizeself.pool_volume=pool_volumeself.action_explore_factor=action_explore_factorself.Actor_explore_factor=Actor_explore_factorself.soft_replace_rate=soft_replace_rate self.train_steps=train_stepsself.interval=intervalself.mask_total=mask_totalself.mask_quality=mask_qualityself.mask_lasting=mask_lastingself.city=city#Initialize state and replay bufferwith open(os.path.join('../data',self.city,'start.json'),'r') as f:self.start = np.array(json.load(f))#由于提供的代碼里面沒有這個(gè)文件,我猜測(cè)是初始情況下各區(qū)域各狀態(tài)的人數(shù)##是一個(gè)region_num*8的二維數(shù)組from Net.Anet import Anet#actor network————>計(jì)算滿足因子from Net.Qnet import Qnet#action network————>計(jì)算選擇哪個(gè)顯著性排序from Net.RNN import RNN#用可以求得的三個(gè)狀態(tài)'''It(已經(jīng)感染疾病,同時(shí)被檢測(cè)出疾病的人。)Ih(被送醫(yī)治療的感染者)D(死亡人群)'''#計(jì)算其他三個(gè)環(huán)境可看到的狀態(tài)的值'''E(暴露人群)Iu(已經(jīng)感染疾病,但是沒有檢測(cè)的人。)R(康復(fù)人群)'''from Net.Cnet import Cnet#critic networkself.region_num = 161#Supposed to be modified according to the number of regions in the studied city.#區(qū)劃的數(shù)量self.pool_pointer=0#經(jīng)驗(yàn)回放 relay buffer 下一個(gè)下標(biāo)(下一組記錄放到哪里)self.pool_count=0#目前relay buffer中的記錄個(gè)數(shù)self.pool_state=np.zeros([self.pool_volume,self.region_num,8])#relay buffer中的狀態(tài)數(shù)#buffer_size * region_num * 8self.pool_mask_action=np.zeros(self.pool_volume)#relay buffer 中選擇了哪個(gè)顯著性排序self.pool_mask_perc=np.zeros(self.pool_volume)#relay buffer 中 口罩的滿足因子self.pool_reward=np.zeros(self.pool_volume)#relay buffer 中的單步獎(jiǎng)勵(lì)self.pool_state1=np.zeros([self.pool_volume,self.region_num,8])#relay buffer 中的下一狀態(tài)self.current_state=self.start#目前的狀態(tài)self.next_state=self.current_state#下一狀態(tài)#Initialize the networkstorch.manual_seed(1234)torch.cuda.manual_seed(1234)self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')self.Mask_action_eval=Qnet().to(self.device)self.Mask_action_eval.train()self.Mask_action_target=copy.deepcopy(self.Mask_action_eval)#深拷貝,也就是二者不共享參數(shù)#一個(gè)是eval network 一個(gè)是target networkself.Mask_action_target.eval()#表示target 不參與訓(xùn)練(后同) self.Mask_action_optimizer=optim.Adam(self.Mask_action_eval.parameters(),lr=self.action_lr)#action 指的是論文模型示意圖中的DQN,也就是學(xué)習(xí)顯著性排序的部分self.Mask_Actor_eval=Anet().to(self.device)self.Mask_Actor_eval.train()self.Mask_Actor_target=copy.deepcopy(self.Mask_Actor_eval) self.Mask_Actor_target.eval()self.Mask_Actor_optimizer=optim.Adam(self.Mask_Actor_eval.parameters(),lr=self.Actor_lr)#actor 就是論文模型示意圖下面的actorself.Mask_Critic_eval=Cnet(self.region_num).to(self.device)self.Mask_Critic_eval.train()self.Mask_Critic_target=copy.deepcopy(self.Mask_Critic_eval)self.Mask_Critic_eval.eval() self.Mask_Critic_optimizer=optim.Adam(self.Mask_Critic_eval.parameters(),lr=self.Critic_lr)#critic 就是論文模型示意圖下面的critic#Initialize the simulator#各區(qū)域疾病狀態(tài)轉(zhuǎn)換self.simulator=simulator(city=self.city)self.simulator.reset(self.start)#將start中各區(qū)域各狀態(tài)的初始人數(shù)設(shè)置到simulater 的nodes列表中#nodes列表的每一個(gè)元素都是一個(gè)node對(duì)象#node對(duì)象有一個(gè)id,以及8狀態(tài)(S,E,Iu,It,Ia,Ih,R,D)print('Initializing down!')

1.2.2 train

def train(self):print('Start training...')loss_record = list()train_count = 0 #目前訓(xùn)練的輪數(shù)while train_count < self.train_steps:self.current_state=self.start##由于提供的代碼里面沒有這個(gè)文件,我猜測(cè)start是初始情況下各區(qū)域各狀態(tài)的人數(shù)##是一個(gè)region_num*8的二維數(shù)組self.next_state=self.current_state#下一狀態(tài)self.is_end=False#是否結(jié)束episodeend_count = 0#samplingstep_count=0while ((not self.is_end) andstep_count <= 60/(self.interval/48)):mask_action_out = self.Mask_action_eval(torch.FloatTensor(self.current_state[:,[1,2,3,5,6,7]]).to(self.device).unsqueeze(0))'''選取E,Iu,It,Ih,R,D同時(shí)升維度至[1,region_num,6]action 指的是論文模型示意圖中的DQN,也就是學(xué)習(xí)顯著性排序的部分mask 就是指看口罩mask_action_out->[1,7]這里是表示不同的排序原則的“打分”論文中一共出現(xiàn)了3中不同的排序原則,其中可以任意組合,所以有2^3-1=7種(不能都不選)'''#select an action through epsilon-greedymask_action=torch.argmax(mask_action_out).cpu().item()#選擇“打分最高的”顯著性排序原則rand_temp=random.random()if(rand_temp>(1-self.action_explore_factor)):mask_action = int(7 * random.random())#一定比例是隨機(jī)探索,否則就是利用print('mask_action:{}'.format(mask_action))mask_perc = self.Mask_Actor_eval(torch.FloatTensor(self.current_state[:,[1,2,3,5,6,7]]).to(self.device).unsqueeze(0))#選取E,Iu,It,Ih,R,D#同時(shí)升維度至[1,region_num,6]#mask_perc是一個(gè)[1,1]的0~1之間的數(shù),表示的是論文里提到的滿足因子fmask_perc = mask_perc.squeeze(0).cpu().detach().item()\+ self.Actor_explore_factor * np.random.randn()mask_perc_clip = np.clip(mask_perc, 0.1, 1)print('mask_perc:{}'.format(mask_perc_clip))#我們通過actor算出來(lái)的比例,加上一定探索的概率,得到最終的滿足因子f#與此同時(shí),滿足因子f需要在0.1~1之間#get the next state through simulationself.next_state, _ = self.simulator.simulate(sim_type='Policy_a',interval=self.interval,bed_total=self.bed_total,bed_action=bed_action,bed_satisfy_perc=bed_perc_clip,mask_on=True,mask_total=self.mask_total,mask_quality=self.mask_quality,mask_lasting=self.mask_lasting,mask_action=mask_action,mask_satisfy_perc=mask_perc_clip)#各個(gè)區(qū)域新的狀態(tài)if(self.simulator.full and end_count==0):end_count=1#full表示床位有沒有滿if((not self.simulator.full) and end_count==1):self.is_end=Trueprint('Is_end:{}'.format(self.is_end))#get single step rewardreward=reward_fun(self.current_state,self.next_state)#單步獎(jiǎng)勵(lì)函數(shù)print('Reward:{}'.format(reward))#put the sample into the replay buffer#將數(shù)據(jù)放入經(jīng)驗(yàn)回放中if(self.simulator.full):self.pool_state[self.pool_pointer]=self.current_stateself.pool_bed_action[self.pool_pointer]=bed_actionself.pool_mask_action[self.pool_pointer]=mask_actionself.pool_bed_perc[self.pool_pointer]=bed_percself.pool_mask_perc[self.pool_pointer]=mask_percself.pool_reward[self.pool_pointer]=rewardself.pool_state1[self.pool_pointer]=self.next_stateself.pool_pointer=(self.pool_pointer+1)%self.pool_volumeif (self.pool_count<self.pool_volume):self.pool_count=self.pool_count+1print('Sampling:{} sampeles in pool now'.format(self.pool_count))#將當(dāng)前的狀態(tài)、床位和口罩使用哪種顯著性排序、床位和口罩的滿足因子#單步獎(jiǎng)勵(lì),下一狀態(tài) 送到relay buffer中#mini batch sampling and updating the parametersif (self.pool_count>=self.batch_size):sample_index=random.sample(range(self.pool_count),self.batch_size)#從relay buffer中隨機(jī)選擇batch_size個(gè)indexsample_state=torch.FloatTensor(self.pool_state[sample_index]).to(self.device)#選擇的batch中的當(dāng)前狀態(tài)sample_bed_action=self.pool_bed_action[sample_index]#選擇的batch中的床位顯著性排序sample_mask_action=self.pool_mask_action[sample_index]#選擇的batch中的口罩顯著性排序sample_reward=self.pool_reward[sample_index]#選擇的batch中的單步獎(jiǎng)勵(lì)sample_bed_perc=torch.FloatTensor(self.pool_bed_perc[sample_index]).to(self.device).unsqueeze(1)#選擇的batch中的床位滿足因子sample_mask_perc=torch.FloatTensor(self.pool_mask_perc[sample_index]).to(self.device).unsqueeze(1)#選擇的batch中的口罩滿足因子sample_state1=torch.FloatTensor(self.pool_state1[sample_index]).to(self.device)##選擇的batch中的下一個(gè)狀態(tài)mask_action_eval=self.Mask_action_eval(sample_state[:,:,[1,2,3,5,6,7]])#顯著性排序的eval_net#sample_state[:,:,[1,2,3,5,6,7]]————>[batch_size,region_num,6]#結(jié)果為[batch_size,7]mask_action_target=self.Mask_action_target(sample_state1[:,:,[1,2,3,5,6,7]])#顯著性排序的target_net#sample_state[:,:,[1,2,3,5,6,7]]————>[batch_size,region_num,6]#結(jié)果為[batch_size,7]mask_action_max = torch.argmax(mask_action_target, dim=-1).cpu()#batch_size 每個(gè)最大的action,也就是bacth中每個(gè)記錄應(yīng)該選擇哪一種顯著性排序mask_perc_eval=self.Mask_Actor_eval(sample_state[:,:,[1,2,3,5,6,7]])#滿足因子的eval_net#sample_state[:,:,[1,2,3,5,6,7]]————>[batch_size,region_num,6]#結(jié)果為[batch_size,1]mask_perc_target=self.Mask_Actor_target(sample_state1[:,:,[1,2,3,5,6,7]])#滿足因子的target_net#sample_state[:,:,[1,2,3,5,6,7]]————>[batch_size,region_num,6]#結(jié)果為[batch_size,1]mask_reward_eval = self.Mask_Critic_eval(sample_state[:,:,[1,2,3,5,6,7]], sample_mask_perc)#critic的eval_net#sample_state[:,:,[1,2,3,5,6,7]]————>[batch_size,region_num,6]#結(jié)果為[batch_size,1]mask_reward_target=self.Mask_Critic_target(sample_state1[:,:,[1,2,3,5,6,7]],mask_perc_target)#critic的eval_net#sample_state[:,:,[1,2,3,5,6,7]]————>[batch_size,region_num,6]#結(jié)果為[batch_size,1]loss = 0for i in range(self.batch_size):y = sample_reward[i]y = y + \self.decay_rate * (mask_action_target[i][mask_action_max[i]] +mask_reward_target[i])#顯著性排序中最大的那個(gè)的值+critic reward時(shí)的值loss = loss + \(mask_reward_eval[i] +mask_action_eval[i][int(sample_mask_action[i])]- y)** 2#和eval的均方差loss=loss/self.batch_sizeprint('Loss:{}'.format(loss.cpu().item()))self.Mask_action_optimizer.zero_grad()self.Mask_Critic_optimizer.zero_grad()loss.backward()self.Mask_action_optimizer.step() self.Mask_Critic_optimizer.step()#訓(xùn)練critic和actionmask_reward0 = self.Mask_Critic_eval(sample_state[:,:,[1,2,3,5,6,7]], mask_perc_eval)loss_pg = - torch.mean(mask_reward0)#因?yàn)槭翘荻壬仙?#xff08;policy gradient,所以這里有一個(gè)負(fù)號(hào))print('Loss_pg:{}'.format(loss_pg))self.Mask_Actor_optimizer.zero_grad()loss_pg.backward()self.Mask_Actor_optimizer.step()#訓(xùn)練actorloss_record.append([loss.cpu().item(),loss_pg.cpu().item()])#soft#對(duì)target network進(jìn)行軟更新#無(wú)論是action,actor還是critic,都需要進(jìn)行軟更新#target=(1-soft_rate)target+soft_rate*evalfor x in self.Mask_action_target.state_dict().keys():eval('self.Mask_action_target.'+x+'.data.mul_(1-self.soft_replace_rate)')eval('self.Mask_action_target.'+x+'.data.add_(self.soft_replace_rate*self.Mask_action_eval.'+x+'.data)')for x in self.Mask_Actor_target.state_dict().keys():eval('self.Mask_Actor_target.'+x+'.data.mul_((1-self.soft_replace_rate))')eval('self.Mask_Actor_target.'+x+'.data.add_(self.soft_replace_rate*self.Mask_Actor_eval.'+x+'.data)')for x in self.Mask_Critic_target.state_dict().keys():eval('self.Mask_Critic_target.'+x+'.data.mul_((1-self.soft_replace_rate))')eval('self.Mask_Critic_target.'+x+'.data.add_(self.soft_replace_rate*self.Mask_Critic_eval.'+x+'.data)')train_count += 1print('Training:epoch {}/{}\n'.format(train_count, self.train_steps))if train_count == self.train_steps:break#update the stateself.current_state=self.next_statestep_count+=1#save the modelstorch.save(self.Mask_action_eval.state_dict(), os.path.join('../model',self.city,'mask_action_model.pth'))torch.save(self.Mask_Actor_eval.state_dict(), os.path.join('../model',self.city,'mask_Actor_model.pth'))'''with open(os.path.join('../model',self.city,'loss.json'),'w') as f:json.dump(loss_record,f)'''print('Training complete!')

1.3 主函數(shù)部分

if __name__ == "__main__":os.chdir(os.path.split(os.path.realpath(__file__))[0])train_platform = RL_train(mask_total=1000000)#設(shè)置了總的口罩?jǐn)?shù)train_platform.train()

2 Net/Qnet.py

action 部分?

計(jì)算顯著性排序的DQN

import torch from torch import nn,optim import torch.nn.functional as Fclass Qnet(nn.Module):def __init__(self):super(Qnet,self).__init__()self.cov1=nn.Conv1d(in_channels=6,out_channels=16,kernel_size=5,stride=1,padding=2,bias=True)#這里池化層的輸入維度就是我環(huán)境可以看到的狀態(tài)的維度:6#分別表示:'''It(已經(jīng)感染疾病,同時(shí)被檢測(cè)出疾病的人。)Ih(被送醫(yī)治療的感染者)D(死亡人群)E(暴露人群)Iu(已經(jīng)感染疾病,但是沒有檢測(cè)的人。)R(康復(fù)人群)順序?yàn)?#xff1a;E,Iu,It,Ih,R,D'''self.cov2=nn.Conv1d(in_channels=16,out_channels=32,kernel_size=5,stride=1,padding=2,bias=True)self.cov3=nn.Conv1d(in_channels=32,out_channels=16,kernel_size=5,stride=2,padding=0,bias=True)self.cov4=nn.Conv1d(in_channels=16,out_channels=4,kernel_size=5,stride=2,padding=0,bias=True)#四層卷積層 6->16->32->16->4self.lin1=nn.Linear(in_features=664,out_features=128,bias=True)self.lin2=nn.Linear(in_features=128,out_features=7,bias=True)self.device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')self.mask=torch.tensor([[0.01,0,0,0,0,0],[0,0.05,0,0,0,0],[0,0,0.01,0,0,0],[0,0,0,0.05,0,0],[0,0,0,0,0.01,0],[0,0,0,0,0,0.05]],dtype=torch.float).to(self.device)def forward(self,x):#x是[1,region_num,6]#E,Iu,It,Ih,R,Dx1=torch.matmul(x,self.mask).permute(0,2,1)#不同的狀態(tài)乘以不同的加權(quán)系數(shù),然后將維度變成[1,6,region_num]c1=F.leaky_relu(self.cov1(x1),0.2)#[1,16,region_num]c2=F.leaky_relu(self.cov2(c1),0.2)#[1,32,region_num]c3=F.leaky_relu(self.cov3(c2),0.2)#[1,16,region_num]c4=F.leaky_relu(self.cov4(c3),0.2)#[1,4,region_num]l1=F.leaky_relu(self.lin1(c4.view(x.shape[0],-1)),0.2)#[1,4,region_num]->[1,664]([1,4*161])->[1,128]l2 = self.lin2(l1)#->[1,7]#這里是表示不同的排序原則的“打分”#論文中一共出現(xiàn)了3中不同的排序原則,其中可以任意組合,所以有2^3-1=7種(不能都不選)return l2

3 Net/Anet.py

actor 部分

import torch from torch import nn,optim import torch.nn.functional as Fclass Anet(nn.Module):def __init__(self):super(Anet,self).__init__()self.cov1=nn.Conv1d(in_channels=6,out_channels=16,kernel_size=5,stride=1,padding=2,bias=True)#這里池化層的輸入維度就是我環(huán)境可以看到的狀態(tài)的維度:6#分別表示:'''It(已經(jīng)感染疾病,同時(shí)被檢測(cè)出疾病的人。)Ih(被送醫(yī)治療的感染者)D(死亡人群)E(暴露人群)Iu(已經(jīng)感染疾病,但是沒有檢測(cè)的人。)R(康復(fù)人群)順序?yàn)?#xff1a;E,Iu,It,Ih,R,D'''self.cov2=nn.Conv1d(in_channels=16,out_channels=32,kernel_size=5,stride=1,padding=2,bias=True)self.cov3=nn.Conv1d(in_channels=32,out_channels=16,kernel_size=5,stride=2,padding=0,bias=True)self.cov4=nn.Conv1d(in_channels=16,out_channels=4,kernel_size=5,stride=2,padding=0,bias=True)#四層卷積層 6->16->32->16->4self.lin1=nn.Linear(in_features=664,out_features=128,bias=True)self.lin2=nn.Linear(in_features=128,out_features=16,bias=True)self.lin3=nn.Linear(in_features=16,out_features=1,bias=True)self.device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')self.mask=torch.tensor([[0.01,0,0,0,0,0],[0,0.05,0,0,0,0],[0,0,0.01,0,0,0],[0,0,0,0.05,0,0],[0,0,0,0,0.01,0],[0,0,0,0,0,0.05]],dtype=torch.float).to(self.device)def forward(self,state):#x是[1,region_num,6]#E,Iu,It,Ih,R,Dx1 = torch.matmul(state, self.mask).permute(0, 2, 1)#不同的狀態(tài)乘以不同的加權(quán)系數(shù),然后將維度變成[1,6,region_num]c1 = F.leaky_relu(self.cov1(x1), 0.2)#[1,16,region_num]c2 = F.leaky_relu(self.cov2(c1), 0.2)#[1,32,region_num]c3 = F.leaky_relu(self.cov3(c2), 0.2)#[1,16,region_num]c4 = F.leaky_relu(self.cov4(c3), 0.2)#[1,4,region_num]l1 = F.leaky_relu(self.lin1(c4.view(state.shape[0], -1)), 0.2)#[1,4,region_num]->[1,664]([1,4*161])->[1,128]l2 = F.leaky_relu(self.lin2(l1), 0.2)#->[1,16]l3 = torch.sigmoid(self.lin3(l2))#->[1,1]經(jīng)過sigmoid之后,相當(dāng)于是一個(gè)[0,1]之間的數(shù)return l3

4 Net/Cnet.py

critic 網(wǎng)絡(luò)

import torch from torch import nn,optim import torch.nn.functional as Fclass Cnet(nn.Module):def __init__(self,region_num):super(Cnet,self).__init__()self.lin_1 = nn.Linear(in_features=1,out_features=128,bias=True)self.lin_2 = nn.Linear(in_features=128,out_features=256,bias=True)self.lin_3 = nn.Linear(in_features=256,out_features=region_num,bias=True)self.cov1=nn.Conv1d(in_channels=7,out_channels=16,kernel_size=5,stride=1,padding=2,bias=True)self.cov2=nn.Conv1d(in_channels=16,out_channels=32,kernel_size=5,stride=1,padding=2,bias=True)self.cov3=nn.Conv1d(in_channels=32,out_channels=16,kernel_size=5,stride=2,padding=0,bias=True)self.cov4=nn.Conv1d(in_channels=16,out_channels=4,kernel_size=5,stride=2,padding=0,bias=True)self.lin1=nn.Linear(in_features=664,out_features=128,bias=True)self.lin2=nn.Linear(in_features=128,out_features=16,bias=True)self.lin3=nn.Linear(in_features=16,out_features=1,bias=True)self.device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')self.mask=torch.tensor([[0.01,0,0,0,0,0],[0,0.05,0,0,0,0],[0,0,0.01,0,0,0],[0,0,0,0.05,0,0],[0,0,0,0,0.01,0],[0,0,0,0,0,0.05]],dtype=torch.float).to(self.device)def forward(self,state,perc):#state是當(dāng)前各狀態(tài)[batch_size,region_num,6]#perc是滿足因子 [batch_size,1]a1 = F.leaky_relu(self.lin_1(perc), 0.2)#[batch_size,1]——>[batch_size,128]a2 = F.leaky_relu(self.lin_2(a1), 0.2)#[batch_size,128]——>[batch_size,256]a3 = F.leaky_relu(self.lin_3(a2), 0.2)#[batch_size,256]——>[batch_size,num_region]x1 = torch.cat((torch.matmul(state, self.mask), a3.unsqueeze(2)), dim=-1).permute(0, 2, 1)#在permute之前,[batch_size,region_num,7]#[batch_size,7,region_num]c1 = F.leaky_relu(self.cov1(x1), 0.2)#[batch_size,7,region_num]->[batch_size,16,region_num]c2 = F.leaky_relu(self.cov2(c1), 0.2)#[batch_size,16,region_num]->[batch_size,32,region_num]c3 = F.leaky_relu(self.cov3(c2), 0.2)#[batch_size,32,region_num]->[batch_size,16,region_num]c4 = F.leaky_relu(self.cov4(c3), 0.2)#[batch_size,16,region_num]->[batch_size,4,region_num]l1 = F.leaky_relu(self.lin1(c4.view(state.shape[0], -1)), 0.2)#c4.view(state.shape[0], -1):[batch_size,664]#[batch_size,664]->[batch_size,128]l2 = F.leaky_relu(self.lin2(l1), 0.2)#[batch_size,128]->[batch_size,16]l3 = self.lin3(l2)#[batch_size,16]->[batch_size,1]return l3

5 simulator.py

import numpy as np import json import random import os from node import node

5.1 __init__

class simulator(object):def __init__(self,city='city_sample'):super(simulator, self).__init__()self.city = city#需要考慮的城市名稱#load dataprint('Loading dynamic pattern...')with open(os.path.join('../data',self.city,'prob.json'), 'r') as f:self.prob = np.array(json.load(f))#由于提供的代碼里面沒有這個(gè)文件,我猜測(cè)是各區(qū)域各狀態(tài)轉(zhuǎn)移比例print('Down!')print('Loading population data...')with open(os.path.join('../data',self.city,'flow.json'), 'r') as f:self.flow = np.array(json.load(f))#由于提供的代碼里面沒有這個(gè)文件,我猜測(cè)是各區(qū)域人流量with open(os.path.join('../data',self.city,'dense.json'), 'r') as f:self.dense = np.array(json.load(f))#由于提供的代碼里面沒有這個(gè)文件,我猜測(cè)是各區(qū)域人口密度with open(os.path.join('../data',self.city,'pop_region.json'), 'r') as f:self.pop = np.array(json.load(f))##由于提供的代碼里面沒有這個(gè)文件,我猜測(cè)是各區(qū)域最佳分配的數(shù)量(上限)print('Down!')self.START = 1self.region_num = len(self.flow)#區(qū)域數(shù)self.nodes = list()self.full = Falseself.parameters = [[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 1, 0], [1, 0, 1], [0, 1, 1], [1, 1, 1]]#三種排序原則,至少選擇一種,不同的排序方式(1表示選,0表示不選)

5.2 reset

def reset(self, state):# state是一個(gè)region_num*8的二維數(shù)組#初始狀態(tài)下各區(qū)域各狀態(tài)的人數(shù)print('\nReseting...')self.nodes = list()for i in range(self.region_num):self.nodes.append(node(i))#初始化id為i的點(diǎn),初始化的時(shí)候8狀態(tài)為0self.nodes[i].set_susceptible(state[i][0])#設(shè)置i點(diǎn)易感人群數(shù)量(S)self.nodes[i].set_latent(state[i][1])#設(shè)置i點(diǎn)潛伏人群數(shù)量(E)self.nodes[i].set_infected_ut(state[i][2])#設(shè)置i點(diǎn)已經(jīng)感染,但是沒有檢測(cè)的人的數(shù)量(Iu)self.nodes[i].set_infected_t(state[i][3])#設(shè)置i點(diǎn)已經(jīng)感染疾病,但是同時(shí)被檢測(cè)出疾病的人的數(shù)量(It)self.nodes[i].set_infected_asymptomatic(state[i][4])#設(shè)置i點(diǎn)已經(jīng)感染疾病,但是沒有測(cè)出陽(yáng)性的人(無(wú)癥狀感染者)的數(shù)量(Ia)self.nodes[i].set_in_hospital(state[i][5])#設(shè)置i點(diǎn)已經(jīng)感染疾病,且送醫(yī)治療的人(Ih)self.nodes[i].set_recovered(state[i][6])#設(shè)置i點(diǎn)康復(fù)人群的數(shù)量(R)self.nodes[i].set_death(state[i][7])#設(shè)置i點(diǎn)死亡人數(shù)的數(shù)量print('Down!')

5.3 simulate

各狀態(tài)轉(zhuǎn)移量模擬

def simulate(self,sim_type, #分配口罩的方案interval, #間隔多久更新一次mask_on=False, #是否戴maskmask_total=0, #整體口罩?jǐn)?shù)mask_quality=0,mask_lasting=48, #口罩有效期mask_action=0, mask_distribute_perc=[0], #口罩滿足系數(shù)bed_satisfy_perc=1,mask_satisfy_perc=1,it_move=False,is_save=False,save_time=0):print('Simulating...')#temp variablesS_temp = np.zeros((self.region_num, self.region_num + 1))L_temp = np.zeros((self.region_num, self.region_num + 1))Iut_temp = np.zeros((self.region_num, self.region_num + 1))if it_move:It_temp = np.zeros((self.region_num, self.region_num + 1))Ia_temp = np.zeros((self.region_num, self.region_num + 1))R_temp = np.zeros((self.region_num, self.region_num + 1))#不同的各狀態(tài)之間region之間的移動(dòng)比例Ih_new = 0for time in range(interval):#maskif (time % mask_lasting == 0):#如果口罩有效期過了,那么就要重新分配口罩mask_numbers = np.zeros(self.region_num)#各區(qū)域口罩分配情況if mask_on:mask_num = mask_totalif sim_type == 'Mean':mask_numbers = np.ones(self.region_num) * int(mask_num / self.region_num)#如果選擇平均分配的話,那么每個(gè)區(qū)域均分口罩?jǐn)?shù)量elif sim_type == 'Lottery':order = np.array(range(self.region_num))np.random.shuffle(order)#隨機(jī)排序區(qū)域id,按照這個(gè)排序從前到后分配口罩(排在前面的盡可能分配滿)for i in range(self.region_num):if mask_num > 0:mask_numbers[order[i]] = min(mask_num, self.pop[order[i]])#self.pop[order[i]]——該區(qū)域需要分配的數(shù)量mask_num = mask_num - mask_numbers[order[i]]else:breakelse:patient_num = np.zeros(self.region_num)patient_num_order = np.zeros(self.region_num)for i in range(self.region_num):patient_num[i] = self.nodes[i].infected_t#已經(jīng)感染疾病,但是同時(shí)被檢測(cè)出疾病的人的數(shù)量(It)patient_num_order[i] = self.nodes[i].infected_t + self.nodes[i].in_hospital + self.nodes[i].recovered + self.nodes[i].death'''已經(jīng)感染疾病,但是同時(shí)被檢測(cè)出疾病的人的數(shù)量(It)已經(jīng)感染疾病,且送醫(yī)治療的人(Ih)康復(fù)人群的數(shù)量(R)死亡人數(shù)的數(shù)量(D)這四個(gè)的和,也即累計(jì)感染人數(shù)'''if sim_type == 'Max_first':order = np.argsort(-patient_num_order)#根據(jù)累積感染人數(shù)排序(累計(jì)感染越多的越先)for i in range(self.region_num):if mask_num > 0:mask_numbers[order[i]] = min(mask_num, self.pop[order[i]])#self.pop[order[i]]——該區(qū)域需要分配的數(shù)量mask_num = mask_num - mask_numbers[order[i]]else:break#排序后,前面的區(qū)域要盡量滿足elif sim_type == 'Min_first':order = np.argsort(patient_num_order)##根據(jù)累積感染人數(shù)排序(累計(jì)感染越少的越先)for i in range(self.region_num):if mask_num > 0:mask_numbers[order[i]] = min(mask_num, self.pop[order[i]])mask_num = mask_num - mask_numbers[order[i]]else:break#排序后,前面的區(qū)域要盡量滿足elif sim_type == 'Policy':mask_parameter = self.parameters[mask_action]#mask_parameter 返回的是一個(gè)0~7的數(shù),對(duì)應(yīng)的就是我們選擇哪種排序方式infect_num = patient_num_order/np.mean(patient_num_order)order = np.argsort(-(mask_parameter[0]*infect_num+ mask_parameter[1]*self.flow+ mask_parameter[2]*self.dense))#根據(jù)我們選擇的排序方式,決定我們是否需要感染人數(shù)、人口密度、區(qū)域人口流動(dòng)強(qiáng)度alloc_mask = np.floor(mask_num*np.array(mask_distribute_perc))#每個(gè)區(qū)域可以分配到的口罩?jǐn)?shù)量(bed_distribute_perc就是不同區(qū)域床位的滿足因子)for i in range(len(mask_distribute_perc)):mask_numbers[order[i]] = min(self.pop[order[i]], alloc_mask[i])mask_num -= mask_numbers[order[i]]#每個(gè)區(qū)域分配口罩的數(shù)量if mask_num > 0:#如果還有口罩,那么按照各區(qū)域滿足因子從大到小的順序排序,前面的優(yōu)先滿足temp_order = np.argsort(-np.array(mask_distribute_perc))for i in range(len(mask_distribute_perc)):temp=min(mask_num,self.pop[order[temp_order[i]]]-mask_numbers[order[temp_order[i]]])#排序在前面的組,按照可以滿足的口罩書填滿mask_num = mask_num - tempmask_numbers[order[temp_order[i]]] += tempif mask_num == 0:breakwhile mask_num > 0:index = np.random.randint(0, self.region_num)if mask_numbers[index] < self.pop[index]:mask_numbers[index] += 1mask_num -= 1else:break#如果還有多的口罩,那么就隨機(jī)分配elif sim_type == 'Policy_a':mask_parameter = self.parameters[mask_action]#mask_parameter 返回的是一個(gè)0~7的數(shù),對(duì)應(yīng)的就是我們選擇哪種排序方式infect_num = patient_num_order/np.mean(patient_num_order)order = np.argsort(-(mask_parameter[0] * infect_num+ mask_parameter[1] * self.flow+ mask_parameter[2] * self.dense))#根據(jù)我們選擇的排序方式,決定我們是否需要感染人數(shù)、人口密度、區(qū)域人口流動(dòng)強(qiáng)度f(wàn)or i in range(self.region_num):if mask_num > 0:mask_numbers[order[i]] = min(mask_num, int(self.pop[order[i]]*mask_satisfy_perc))mask_num = mask_num - mask_numbers[order[i]]else:break#由于此時(shí)各組的滿足因子是一樣的,所以我們根據(jù)排序,從多到少分配口罩(各區(qū)域按照上限分配)#state transitionfor i in range(self.region_num):self.nodes[i].step(mask_numbers[i], mask_quality)#每一個(gè)點(diǎn),更新各個(gè)狀態(tài)的值#cross region traveling 空間上的遷移for k in range(self.region_num):S_temp[k] = np.random.multinomial(self.nodes[k].susceptible, self.prob[((self.START-1)*48+time) % (7*48)][k])#該區(qū)域k有多少狀態(tài)為S的人會(huì)到其他區(qū)域去L_temp[k] = np.random.multinomial(self.nodes[k].latent, self.prob[((self.START-1)*48+time) % (7*48)][k])#該區(qū)域k有多少狀態(tài)為E的人會(huì)到其他區(qū)域去Iut_temp[k] = np.random.multinomial(self.nodes[k].infected_ut, self.prob[((self.START - 1)* 48 + time) % (7* 48)][k])#該區(qū)域k有多少狀態(tài)為Iu的人會(huì)到其他區(qū)域去#已經(jīng)感染疾病,但是沒有檢測(cè)的人。這些人的出行不受任何限制if it_move:It_temp[k] = np.random.multinomial(self.nodes[k].infected_t, self.prob[((self.START-1)*48+time) % (7*48)][k])#該區(qū)域k有多少狀態(tài)為It的人會(huì)到其他區(qū)域去#已經(jīng)感染疾病,同時(shí)被檢測(cè)出疾病的人。這些人的出行被限制在某一個(gè)區(qū)域內(nèi)Ia_temp[k] = np.random.multinomial(self.nodes[k].infected_asymptomatic, self.prob[((self.START - 1)* 48 + time) % (7* 48)][k])#該區(qū)域k有多少狀態(tài)為Ia的人會(huì)到其他區(qū)域去#已經(jīng)感染疾病,但是疾病監(jiān)測(cè)沒有檢測(cè)出陽(yáng)性的人R_temp[k] = np.random.multinomial(self.nodes[k].recovered, self.prob[((self.START - 1)* 48 + time) % (7* 48)][k])#該區(qū)域k有多少狀態(tài)為R的人會(huì)到其他區(qū)域去S_temp_sum0 = np.sum(S_temp, axis=0)L_temp_sum0 = np.sum(L_temp, axis=0)Iut_temp_sum0 = np.sum(Iut_temp, axis=0)if it_move:It_temp_sum0 = np.sum(It_temp, axis=0)Ia_temp_sum0 = np.sum(Ia_temp, axis=0)R_temp_sum0 = np.sum(R_temp, axis=0)#別的區(qū)域過來(lái)的人數(shù)S_temp_sum1 = np.sum(S_temp, axis=1)L_temp_sum1 = np.sum(L_temp, axis=1)Iut_temp_sum1 = np.sum(Iut_temp, axis=1)if it_move:It_temp_sum1 = np.sum(It_temp, axis=1)Ia_temp_sum1 = np.sum(Ia_temp, axis=1)R_temp_sum1 = np.sum(R_temp, axis=1)#到別的區(qū)域去的人數(shù)for k in range(self.region_num):self.nodes[k].set_susceptible(self.nodes[k].susceptible+S_temp_sum0[k]-S_temp_sum1[k]+S_temp[k][self.region_num])#每個(gè)區(qū)域S狀態(tài)的變化:原先的+過來(lái)的-到別的地方去的#過來(lái)的和到別的地方去的,各用了一次S_temp[k][self.region_num](自己到自己的),正好抵消了#所以需要再加一次self.nodes[k].set_latent(self.nodes[k].latent+L_temp_sum0[k]-L_temp_sum1[k]+L_temp[k][self.region_num])#每個(gè)區(qū)域E狀態(tài)的變化:原先的+過來(lái)的-到別的地方去的#過來(lái)的和到別的地方去的,各用了一次S_temp[k][self.region_num](自己到自己的),正好抵消了#所以需要再加一次self.nodes[k].set_infected_ut(self.nodes[k].infected_ut+ Iut_temp_sum0[k]- Iut_temp_sum1[k]+ Iut_temp[k][self.region_num])#每個(gè)區(qū)域Iut狀態(tài)的變化:原先的+過來(lái)的-到別的地方去的#過來(lái)的和到別的地方去的,各用了一次S_temp[k][self.region_num](自己到自己的),正好抵消了#所以需要再加一次if it_move:self.nodes[k].set_infected_t(self.nodes[k].infected_t+It_temp_sum0[k]-It_temp_sum1[k]+It_temp[k][self.region_num])#每個(gè)區(qū)域It狀態(tài)的變化:原先的+過來(lái)的-到別的地方去的#過來(lái)的和到別的地方去的,各用了一次S_temp[k][self.region_num](自己到自己的),正好抵消了#所以需要再加一次self.nodes[k].set_infected_asymptomatic(self.nodes[k].infected_asymptomatic+Ia_temp_sum0[k]-Ia_temp_sum1[k]+Ia_temp[k][self.region_num])#每個(gè)區(qū)域Ia狀態(tài)的變化:原先的+過來(lái)的-到別的地方去的#過來(lái)的和到別的地方去的,各用了一次S_temp[k][self.region_num](自己到自己的),正好抵消了#所以需要再加一次self.nodes[k].set_recovered(self.nodes[k].recovered+ R_temp_sum0[k]- R_temp_sum1[k]+ R_temp[k][self.region_num])#每個(gè)區(qū)域R狀態(tài)的變化:原先的+過來(lái)的-到別的地方去的#過來(lái)的和到別的地方去的,各用了一次S_temp[k][self.region_num](自己到自己的),正好抵消了#所以需要再加一次if(is_save):save = list()for i in range(self.region_num):temp1 = [self.nodes[i].susceptible, self.nodes[i].latent, self.nodes[i].infected_ut, self.nodes[i].infected_t, self.nodes[i].infected_asymptomatic, self.nodes[i].in_hospital, self.nodes[i].recovered, self.nodes[i].death]save.append(temp1)save = np.array(save)save = save.astype(np.float)with open(os.path.join('../result',self.city,'result_'+str(save_time*interval+time)+'.json'), 'w') as f:json.dump(save.tolist(), f)next_state = list()for i in range(self.region_num):next_state.append([self.nodes[i].susceptible,self.nodes[i].latent,self.nodes[i].infected_ut,self.nodes[i].infected_t,self.nodes[i].infected_asymptomatic,self.nodes[i].in_hospital,self.nodes[i].recovered,self.nodes[i].death])#每個(gè)區(qū)域的狀態(tài)a = self.statistic()print('S:{},L:{},Iut:{},It:{},Ia:{},Ih:{},R:{},D:{}'.format(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]))print('Is Full:{}'.format(self.full))return np.array(next_state), Ih_new

6 node.py

import numpy as np Pa = 0.018 # false negative rate eps_1 = 250 # average length of incubation (30min) eps_1_d = 5.2 # average length of incubation (day) d = 0.15 # death rate t = 672 # average recovery time (30min) t_d = 14 # average recovery time (day) d_hospital = 0.04 # death rate in hospital t_hospital = 614 # average recovery time in hospital(30min) t_hospital_d = 12.8 # average recovery time in hospital(day) R_0 = 2.68 # basic reproduction number r_a = 0.6 r_L = 1.0 eps = 1/eps_1 beta = R_0 / (r_L * eps_1_d + (Pa * r_a + (1 - Pa)) * t_d) beta = np.power(1+beta, 1/48)-1 L_I = eps * (1 - Pa) L_Ia = eps * Pa I_D = d / t I_R = ((1 - d)/(t_d - d))/48theta = 48 # testing speed (30min) I_h = 1/theta Ia_R = 1 / t Ih_D = d_hospital / t_hospital Ih_R = ((1 - d_hospital) / (t_hospital_d - d_hospital))/48class node:def __init__(self, id):self.id = idself.susceptible = 0self.infected_ut = 0self.infected_t = 0self.death = 0self.in_hospital = 0self.infected_asymptomatic = 0self.recovered = 0self.latent = 0def set_susceptible(self, susceptible):self.susceptible = susceptibledef set_latent(self, latent):self.latent = latentdef set_infected_ut(self, infected_ut):self.infected_ut = infected_utdef set_infected_t(self, infected_t):self.infected_t = infected_tdef set_infected_asymptomatic(self, infected_asymptomatic):self.infected_asymptomatic = infected_asymptomaticdef set_death(self, death):self.death = deathdef set_in_hospital(self, in_hospital):self.in_hospital = in_hospitaldef set_recovered(self, recovered):self.recovered = recovereddef step(self,mask_number,mask_quality):if (self.susceptible + self.latent + self.infected_ut + self.infected_t + self.infected_asymptomatic + self.in_hospital + self.recovered > 0):#除去了死亡狀態(tài),其他狀態(tài)人數(shù)和大于0(換句話說,就是人沒有全死光)mask_factor = 1 - np.clip(mask_number / (self.susceptible +self.latent +self.infected_ut +self.infected_t +self.infected_asymptomatic +self.in_hospital +self.recovered),0, 1) * mask_quality#除的這一串相當(dāng)于是這個(gè)node目前有的口罩?jǐn)?shù)/目前存活的人#也即論文中說的口罩覆蓋率Π(t)#也就是這一串是論文中的(1-Π(t)γ)lambda_j = ((self.infected_ut +self.infected_t +self.infected_asymptomatic * r_a +self.latent * r_L) /(self.susceptible +self.latent +self.infected_ut + self.infected_t +self.infected_asymptomatic +self.in_hospital +self.recovered)) * beta * mask_factor#前面除的那一串是該node感染人數(shù)/該node總?cè)藬?shù) * β * (1-Π(t)γ)susceptible_to_latent, __ = np.random.multinomial(self.susceptible, [lambda_j, 1])#相當(dāng)于是從S 狀態(tài)到E 狀態(tài)的人數(shù)#我們?cè)纫还灿衧elf.susceptible個(gè)S狀態(tài)的人,每個(gè)人都有l(wèi)ambda_j的概率變成E狀態(tài)#于是我們就用多次二項(xiàng)分布的方法,判斷每一個(gè)個(gè)體是否會(huì)變成E狀態(tài)self.susceptible -= susceptible_to_latentself.latent += susceptible_to_latent#S狀態(tài)增加susceptible_to_latent個(gè)人,E狀態(tài)減少susceptible_to_latent個(gè)人latent_to_infected, latent_to_Ia, __ = np.random.multinomial(self.latent, [L_I, L_Ia, 1])self.infected_ut += latent_to_infectedself.infected_asymptomatic += latent_to_Iaself.latent -= (latent_to_Ia + latent_to_infected)#從E轉(zhuǎn)換到Iu和Ia的人數(shù)prob = I_hinfected_ut_to_t, __ = np.random.multinomial(self.infected_ut, [prob, 1])self.infected_ut -= infected_ut_to_tself.infected_t += infected_ut_to_t#從Iu轉(zhuǎn)換到Ia的人數(shù)infected_to_death, infected_to_recovered, __ = np.random.multinomial(self.infected_ut, [I_D, I_R, 1])self.death += infected_to_deathself.recovered += infected_to_recoveredself.infected_ut -= (infected_to_death + infected_to_recovered)#從Iu狀態(tài)(已經(jīng)感染疾病,但是沒有檢測(cè)的人)到死亡/康復(fù)的人infected_to_death, infected_to_recovered, __ = np.random.multinomial(self.infected_t, [I_D, I_R, 1])self.death += infected_to_deathself.recovered += infected_to_recoveredself.infected_t -= (infected_to_death + infected_to_recovered)#從It狀態(tài)(已經(jīng)感染疾病,同時(shí)被檢測(cè)出疾病的人)到死亡/康復(fù)的人Ia_to_recovered, __ = np.random.multinomial(self.infected_asymptomatic, [Ia_R, 1])self.recovered += Ia_to_recoveredself.infected_asymptomatic -= Ia_to_recovered#從Ia狀態(tài)(已經(jīng)感染疾病,但是疾病監(jiān)測(cè)沒有檢測(cè)出陽(yáng)性的人)【無(wú)癥狀感染者】到康復(fù)的人數(shù)in_hospital_to_death, in_hospital_to_recovered, __ = np.random.multinomial(self.in_hospital, [Ih_D, Ih_R, 1])self.death += in_hospital_to_deathself.recovered += in_hospital_to_recoveredself.in_hospital -= (in_hospital_to_death + in_hospital_to_recovered)#從Ih狀態(tài)(送醫(yī)治療的人)到康復(fù)/死亡的人

總結(jié)

以上是生活随笔為你收集整理的论文代码解读 Hierarchical Reinforcement Learning for Scarce Medical Resource Allocation的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

激情开心网站 | 亚洲日本va午夜在线电影 | 在线观看91 | 摸阴视频| 日韩在线高清 | 亚洲精品在线电影 | 97超视频在线观看 | 狠狠干天天色 | 日韩久久久久 | 国色天香av | 美女网站视频久久 | 99高清视频有精品视频 | 国产精品初高中精品久久 | 欧美在线观看小视频 | 91亚洲在线 | 久久无码av一区二区三区电影网 | 日韩欧美在线视频一区二区 | 中文资源在线播放 | 亚洲va欧美va人人爽春色影视 | 国产成人精品综合 | 国产直播av | 成人午夜电影网站 | 正在播放一区 | 欧美精品乱码久久久久久按摩 | 日韩电影在线观看一区二区 | 性色av免费观看 | 三级av在线免费观看 | 欧美日韩一级视频 | 日韩亚洲国产精品 | 伊人亚洲综合网 | 国产精品毛片一区视频播 | 色在线高清 | 亚洲精品午夜国产va久久成人 | 日韩免费观看一区二区三区 | 97在线播放 | 久久久www成人免费精品张筱雨 | 欧美一级在线 | 天天干夜夜干 | 国产成人性色生活片 | www99精品| 亚洲免费观看在线视频 | 日韩在线视频免费观看 | 国产精品99精品久久免费 | 超碰人在线 | 国产成人av在线影院 | 久久手机精品视频 | 婷婷日日 | 久久精品国产一区二区三 | 日本午夜在线亚洲.国产 | 天天躁日日躁狠狠躁av麻豆 | 亚洲一区网站 | 日日爽天天爽 | 久久精品国产亚洲精品 | 福利视频午夜 | 国产乱对白刺激视频在线观看女王 | 天天干天天干天天操 | 美女黄频视频大全 | 久久人人做 | 欧洲精品在线视频 | 亚洲综合欧美激情 | 中文字幕乱在线伦视频中文字幕乱码在线 | 日韩av偷拍 | 天天做天天爱夜夜爽 | 久久久免费看视频 | 亚洲aⅴ在线观看 | www.伊人色.com| 久久久国产一区二区三区四区小说 | 亚洲国产免费看 | 亚洲伊人av| 午夜在线免费观看视频 | 久久国产亚洲 | 国产少妇在线观看 | 1000部国产精品成人观看 | 日本h视频在线观看 | 久久久久久精 | 日韩高清免费电影 | 97超级碰| 99精品区| 久久久久综合 | 国产一区二区影院 | 人人爽爽人人 | 国产精品亚洲片在线播放 | 很污的网站 | 成人在线播放视频 | 亚洲欧美日韩一二三区 | 久久er99热精品一区二区 | 国产99久久久国产 | 丁香视频全集免费观看 | 日韩美在线观看 | 99视频一区 | 久久婷婷激情 | www.狠狠插.com| 97精品久久| 美女视频黄色免费 | 亚洲一区欧美精品 | 久久久国产一区二区 | 久久国产系列 | 国产黄色电影 | 成人动漫一区二区 | 国产资源中文字幕 | av综合站 | 91精品无人成人www | 久久少妇 | 久久久精品国产免费观看同学 | 国产精品一区二区美女视频免费看 | va视频在线 | 国产69久久| 在线观看免费视频 | 免费av在线播放 | 成人免费看黄 | 国产精品欧美久久久久无广告 | 韩国一区二区在线观看 | av黄色国产| 久久任你操| 久久免费视频在线观看6 | 国产又黄又爽又猛视频日本 | 黄色a视频| 在线观看黄色免费视频 | 国产一级电影免费观看 | 午夜天使 | 国产精品原创视频 | 九九热在线免费观看 | 狠狠色丁香婷婷综合久小说久 | 三级av免费观看 | 最新av网站在线观看 | 免费福利在线观看 | 欧美一级片播放 | 久久激情电影 | 99视频精品全部免费 在线 | 日韩 在线观看 | 韩日精品视频 | 麻豆传媒电影在线观看 | 亚洲国产精品第一区二区 | 精品视频免费看 | 黄色大全视频 | 伊人影院av | 欧美尹人 | 国产一级二级在线 | 精品视频区| 日韩久久午夜一级啪啪 | 免费福利在线观看 | 麻豆精品传媒视频 | 久香蕉 | 中文字幕色婷婷在线视频 | 最新国产在线观看 | 中文字幕 成人 | 久99久在线视频 | 免费观看十分钟 | 91污污视频在线观看 | 国产免费高清视频 | 97理论电影| 国产成人一区在线 | 国产一区av在线 | 国产护士在线 | 久久五月婷婷丁香 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 人成午夜视频 | 午夜在线日韩 | 波多野结衣精品 | 99精品偷拍视频一区二区三区 | 91色影院 | 天堂av高清 | 成人在线免费av | 色资源在线 | av成人在线看 | 97香蕉久久超级碰碰高清版 | 69中文字幕 | 亚洲国产精品电影 | 国产在线欧美日韩 | 91 在线视频播放 | 久久免费久久 | 欧美日韩在线精品一区二区 | 99精品一区二区三区 | 人人干网站| 亚洲精品国产精品国自产观看 | 六月丁香在线视频 | 操操操夜夜操 | 丁香婷婷自拍 | 一区二区伦理 | 国产在线观 | 亚洲精品乱码久久久久久写真 | 久草免费看 | 97精品在线 | 亚洲国产大片 | 国产精品乱码久久久久 | 九色视频网 | 久久久久久久久久久高潮一区二区 | 国产精品久久免费看 | 人人插人人射 | 91爱爱中文字幕 | 91.麻豆视频 | 国产成人精品一区二区三区福利 | 国模精品在线 | 玖草在线观看 | 亚洲欧美国内爽妇网 | 国产在线观看黄 | 日韩精品免费在线 | 蜜臀av.com | 国产视频一区精品 | 天天色草| 日韩成人免费在线电影 | 国产另类xxxxhd高清 | 欧美日韩视频免费看 | 欧美日韩精品影院 | 在线看国产一区 | 久久久午夜精品理论片中文字幕 | 九九免费观看视频 | 中文字幕在线播放日韩 | 伊人小视频 | 香蕉影院在线播放 | 免费视频久久久久久久 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产精品久久9 | 成人黄色av免费在线观看 | 中文字幕在线观看不卡 | 久综合网| 91一区一区三区 | 日韩激情在线视频 | 久久av中文字幕片 | 349k.cc看片app | 亚洲黄色高清 | 久久少妇免费视频 | 91精品成人 | 欧美激情视频一区二区三区 | 婷婷六月中文字幕 | 久久深夜 | 日韩电影在线观看一区二区 | 久久天堂网站 | 日韩精品视频在线免费观看 | 四虎永久精品在线 | 肉色欧美久久久久久久免费看 | 91精品国产综合久久福利不卡 | 激情小说网站亚洲综合网 | 色国产精品一区在线观看 | 日韩免费一区二区三区 | 夜夜摸夜夜爽 | 久久久久久久久久久免费视频 | 国产一区二区三区免费在线 | 一区二区三区不卡在线 | 日本中文字幕视频 | 精品久久久久亚洲 | 一区二区三区电影 | 天天干天天操天天入 | 免费观看一级 | 99精品色| 婷婷av网| 国产亚洲久久 | 日本性高潮视频 | 国产精品va在线观看入 | 天天操天天射天天 | 国产美女精品人人做人人爽 | 日日成人网 | 日韩性久久| 97色在线视频 | 精品视频免费久久久看 | 麻豆影视网站 | 综合色天天 | 久久精品免费看 | 不卡视频在线看 | 国产一区二区精品久久91 | 天天操天 | 99精品国产福利在线观看免费 | 欧美性春潮 | 91av在线免费观看 | 免费日韩精品 | 国产日韩高清在线 | 一区二区在线影院 | 深夜免费小视频 | 五月婷婷影院 | 黄色小说在线免费观看 | 91九色在线观看 | 免费看一级特黄a大片 | 欧美激情精品久久久 | 亚洲精品美女久久17c | 亚洲一区二区高潮无套美女 | 波多野结衣视频一区 | 国内久久精品视频 | 国产精品理论片 | 黄色片毛片 | 国产99爱 | 欧美另类视频 | 成人免费av电影 | 亚洲国产午夜视频 | 色国产精品一区在线观看 | 久久天天综合网 | 日本护士撒尿xxxx18 | 亚洲精品视频在线免费播放 | 久久综合狠狠综合久久狠狠色综合 | 99精品在线免费观看 | 国产婷婷在线观看 | 在线视频久久 | 超碰在线最新网址 | 超碰在线人人爱 | 激情欧美日韩一区二区 | 久久久三级视频 | 成人日韩av| 日日日视频| 成年人视频在线免费 | 久久激情视频网 | 久久久久久久精 | 99在线视频精品 | 国产精品黑丝在线观看 | 国产精品一级视频 | 欧美一级日韩三级 | 福利区在线观看 | 在线免费观看黄色大片 | 成人免费在线网 | 久草在线资源观看 | 久久综合九色综合久久久精品综合 | 中文字幕在线观看免费高清电影 | 最新av电影网址 | 久久久久久久久久久影视 | 久久99热这里只有精品 | 91麻豆免费看 | 中文字幕一区二区三区视频 | 热99在线 | 国产高清在线永久 | 亚洲v欧美v国产v在线观看 | 欧美在线观看视频一区二区三区 | 成人免费共享视频 | 国产亚洲人成网站在线观看 | 成人小视频在线免费观看 | 人人超碰人人 | 麻豆成人在线观看 | 国产精品视频最多的网站 | 国产精品aⅴ | 国产精品 久久 | 一区二区不卡 | 特级西西444www大精品视频免费看 | 热久久免费视频 | 超碰免费久久 | 日韩欧美在线视频一区二区 | 国产视频精品久久 | 丁香电影小说免费视频观看 | 伊人久久电影网 | 在线精品观看 | 高清久久久 | 成人中文字幕在线 | 欧洲精品视频一区二区 | 91热爆视频| 成人av在线直播 | 日韩久久午夜一级啪啪 | 久久久久久久久影视 | 日韩在线免费视频观看 | 久久看免费视频 | 亚洲黄色激情小说 | 美女视频久久黄 | 麻豆 free xxxx movies hd | 伊人电影天堂 | 国产一级免费在线观看 | 国产黄色一级片在线 | 久久无码av一区二区三区电影网 | 国产麻豆精品一区 | 69精品| 人人澡人人爽 | 久久亚洲人 | 成人黄色影片在线 | 久久久久久欧美二区电影网 | 久久免费高清视频 | 麻豆久久一区 | 欧美一二三视频 | 日日干夜夜爱 | 成年人电影毛片 | 一区二区精品在线视频 | 在线观看精品黄av片免费 | 国产色视频一区二区三区qq号 | 国产+日韩欧美 | www.综合网.com | 99r精品视频在线观看 | 亚洲91中文字幕无线码三区 | 香蕉免费| 日韩免费电影在线观看 | 亚洲免费视频观看 | 国产美女被啪进深处喷白浆视频 | 少妇搡bbb| 免费看精品久久片 | 91成人精品一区在线播放69 | 伊人网综合在线观看 | 97免费在线观看 | 天天干夜夜爽 | 在线观看免费91 | 日韩中文免费视频 | 日日干精品| 91丨九色丨蝌蚪丰满 | www.夜夜草| 中文字幕在线观看三区 | 国产精品初高中精品久久 | 日日碰狠狠躁久久躁综合网 | 久久国产精品一区二区三区 | 日本性xxx | 亚洲在线视频免费观看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 国产日韩欧美精品在线观看 | 日韩精品一区二区三区三炮视频 | 国产精品综合久久久久久 | 综合天天色 | 国产精品中文字幕在线播放 | 中文字幕在线专区 | 免费观看av网站 | 国产日产精品一区二区三区四区的观看方式 | 欧美亚洲一区二区在线 | 亚洲日本精品 | 亚洲丁香日韩 | 狠狠狠狠狠狠狠干 | 久久精品视频一 | 日本三级在线观看中文字 | 日韩在线免费不卡 | 欧美性生活大片 | 91av视屏| 337p日本欧洲亚洲大胆裸体艺术 | 国产精品久久久av | 免费视频xnxx com | 久久69av | 亚洲国产欧美在线人成大黄瓜 | 午夜精品久久久久久久99 | 欧美日韩一级久久久久久免费看 | 国产91免费在线 | 日本不卡视频 | 国产精品成人一区二区三区 | 国产在线色站 | 国产免费又粗又猛又爽 | 17婷婷久久www | 欧美精品v国产精品v日韩精品 | 黄色小网站免费看 | 婷婷丁香激情综合 | 日韩在线观看视频免费 | 欧美一级淫片videoshd | 手机看片国产 | 久久婷婷精品视频 | 久热色超碰 | www日韩欧美 | 激情av网| 天天躁日日躁狠狠躁av麻豆 | 国产清纯在线 | 91人人人 | 亚洲1级片 | 四虎成人精品永久免费av九九 | 日韩av手机在线看 | 久久高视频| 四虎在线视频 | 玖玖在线视频观看 | 亚洲国产精品va在线看 | 天天做日日爱夜夜爽 | 天天操天天操天天操天天操天天操 | 看片的网址 | 日韩av资源在线观看 | av中文在线| 69久久夜色精品国产69 | 久久视频网 | 久久国产精品99久久久久 | 久久综合色播五月 | 日本中文字幕网 | 国产视频资源在线观看 | 9久久精品| av电影免费看| 国产视频在线观看一区二区 | 国产精品午夜在线 | 伊色综合久久之综合久久 | 日韩精品免费一区二区三区 | 欧美日韩视频在线播放 | av片子在线观看 | 久久99精品国产麻豆宅宅 | 97超碰总站 | 热久久免费视频 | 成人精品一区二区三区中文字幕 | 在线黄频| 97国产大学生情侣白嫩酒店 | 亚洲精品久久久久久久不卡四虎 | 最近免费中文视频 | 亚洲一区二区91 | 97自拍超碰 | 在线观看av不卡 | 最近中文字幕高清字幕在线视频 | 久久久久成人精品 | 国产精品国产三级国产 | 天天色官网| 超碰97网站| 亚洲一级黄色片 | 久久手机精品视频 | 夜夜爽夜夜操 | 成人av免费网站 | 国产精品a久久 | www视频在线免费观看 | 亚洲成av人片在线观看香蕉 | 成人av一级片| 婷婷综合导航 | a级片韩国 | 国产黄色a | 久久精品看片 | 亚洲h色精品| 五月开心激情网 | 操久在线| 人人狠狠综合久久亚洲婷 | 国产一级片不卡 | 中文字幕日韩伦理 | 国产欧美高清 | 国产999精品久久久久久绿帽 | av中文字幕第一页 | 最新国产在线视频 | 欧美极度另类 | 西西大胆啪啪 | 亚洲最大在线视频 | 日韩高清网站 | 久一在线 | 天天操天天干天天操天天干 | 少妇bbbb搡bbbb桶 | 久久人人插 | 中文字幕第一页在线视频 | 国产免费亚洲高清 | 日日成人网 | 国产一区在线免费观看 | 在线观看视频一区二区三区 | 国产精品久久久久久久久久尿 | 成人av电影在线 | 99精品热| 91亚色视频 | 亚洲精品白浆高清久久久久久 | 久久国产精品影片 | 国产一级性生活 | 天天干天天做天天操 | 91污在线观看| 一区二区精品国产 | 在线观看深夜福利 | 香蕉视频在线免费 | 亚洲永久免费av | 亚洲天堂香蕉 | 久久99久久久久久 | 亚洲免费公开视频 | 区一区二在线 | 国产精品第一页在线 | 久久男人视频 | 亚洲精品小视频在线观看 | 黄色成年 | 又黄又爽的免费高潮视频 | 国产品久精国精产拍 | 激情文学综合丁香 | 亚洲成人频道 | 国产男女无遮挡猛进猛出在线观看 | 91伊人影院 | 最新av网站在线观看 | 日韩99热| 日韩免费一级a毛片在线播放一级 | 婷婷色狠狠 | 国产一区免费在线 | 99久久精品国产一区 | 日韩av一区二区三区 | 99久久夜色精品国产亚洲96 | 久青草影院 | 91在线看黄 | 免费在线国产 | 国产精品专区在线观看 | 91在线免费视频观看 | 亚洲精品国偷自产在线91正片 | 91在线视频免费91 | 久久精品三 | 日韩欧美视频在线观看免费 | 国产精品久久久久一区二区国产 | 精品国产区在线 | 国产做aⅴ在线视频播放 | 97人人模人人爽人人少妇 | 1024手机在线看 | 精品国产乱码久久久久 | 久久国产精品一国产精品 | 国产精品18久久久 | 亚洲视频www | 国产精品久久久久久久久久久不卡 | 狠狠色狠狠综合久久 | 久久亚洲欧美 | 日本不卡123区 | 久要激情网| 日韩欧美一区二区在线观看 | 午夜久久成人 | 国产高清不卡av | 中文字幕高清免费日韩视频在线 | 久草a在线| 福利一区视频 | 亚洲国产人午在线一二区 | 欧美精品在线观看免费 | 超碰人人在线观看 | 日韩亚洲在线视频 | 免费手机黄色网址 | 日本黄色大片儿 | 免费网站在线 | 久久久久久久久久久影院 | 免费观看性生活大片3 | 正在播放 久久 | 国产一级视频 | 亚洲天天干 | 久久人操 | 精品人人人 | 99成人精品 | 日本三级全黄少妇三2023 | 免费观看v片在线观看 | 首页国产精品 | 69av免费视频 | 日韩欧美大片免费观看 | 亚洲精品一区二区网址 | 国产青草视频在线观看 | 五月丁色 | 日韩网站在线 | 国产香蕉97碰碰久久人人 | 男女精品久久 | 伊人天天色 | 国产精品99精品久久免费 | 日韩美精品视频 | 99久久er热在这里只有精品15 | 成人网大片 | 欧美日韩精品免费观看视频 | 久久首页 | 国产69精品久久久久99 | 色网站在线观看 | 狠狠狠的干 | 午夜精品久久久久99热app | 在线观看av免费 | 国产黄色理论片 | 色狠狠久久av五月综合 | 欧美污污视频 | 国产又粗又硬又长又爽的视频 | 精品电影一区 | 精品国产一区二区三区四 | 国产网红在线 | 国产麻豆视频在线观看 | 日日日操操 | 国产伦理久久精品久久久久_ | 天天操天天操天天操天天 | 色视频网站在线观看一=区 a视频免费在线观看 | 国产成人精品一区二区三区福利 | 99久久这里有精品 | 欧美日韩一区二区三区不卡 | 国产福利91精品一区 | 日韩素人在线观看 | 成人免费xxx在线观看 | 中文字幕在线看视频国产 | 日韩精品久久久久久中文字幕8 | 国产在线最新 | 久久成人综合视频 | 欧美一区二区三区特黄 | 日韩国产精品久久久久久亚洲 | 最近的中文字幕大全免费版 | 中文字幕中文字幕在线一区 | 天天射天 | 国产视频精品久久 | 亚洲激情久久 | 波多野结衣电影一区二区三区 | 黄色三级在线观看 | 91福利国产在线观看 | 日韩中午字幕 | 久久亚洲人| 狠狠狠狠狠狠狠狠 | 久久久黄视频 | 国产精品99久久久久久小说 | 日韩av免费一区二区 | 中文一区二区三区在线观看 | 国产精品欧美久久久久三级 | 欧美日韩高清在线观看 | 午夜视频在线观看一区二区三区 | 亚洲第一伊人 | 亚洲乱码中文字幕综合 | 亚洲久久视频 | 成人丝袜 | 中文字幕高清免费日韩视频在线 | 久草干 | av中文字幕在线播放 | 99热在线这里只有精品 | 久久精品综合视频 | av资源在线看 | 日日夜夜精品网站 | 丰满少妇在线 | 欧美极品少妇xbxb性爽爽视频 | 午夜精品一二区 | 在线视频一区二区 | 国产aa精品 | 99色网站 | 中文字幕免费观看 | 免费日韩 精品中文字幕视频在线 | 毛片一区二区 | 在线观看亚洲视频 | 亚洲精品日韩av | 伊人狠狠| 美女av在线免费 | 久久99精品国产99久久 | 精品国产欧美 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 岛国av在线不卡 | 91在线免费播放 | 在线观看a视频 | 久久免费黄色大片 | 成人av资源 | 天天爱天天操天天爽 | 日韩激情小视频 | 欧美激情视频在线免费观看 | 亚洲精品在线免费 | 国产婷婷色 | 国产精品伦一区二区三区视频 | 国产精品欧美 | 成人在线视频你懂的 | 亚洲国产精品成人va在线观看 | 色综合久久88 | 99国产精品久久久久老师 | 久久天天躁狠狠躁夜夜不卡公司 | 成人一级 | 人人插人人插 | 黄色大片免费播放 | av一区二区在线观看中文字幕 | 91看片成人| 亚洲欧美日韩一区二区三区在线观看 | 久久精品国产免费看久久精品 | 五月天婷婷狠狠 | 亚洲欧洲在线视频 | 不卡av免费在线观看 | 很污的网站 | 黄色三级免费片 | 国产高清在线视频 | 亚洲做受高潮欧美裸体 | 97超视频 | 久久久久久久久久久国产精品 | 激情婷婷久久 | 欧美性色综合网站 | 国产一二区免费视频 | 狠狠伊人 | 成人a级免费视频 | 亚洲欧美怡红院 | 成年人免费看片 | www178ccom视频在线 | 在线网站黄 | 久久高视频| 日韩精品高清视频 | 久久九九影视网 | 国产色道 | 国产一区在线免费观看 | 亚洲激情校园春色 | 在线视频精品 | 亚洲精品久久激情国产片 | 91麻豆精品一区二区三区 | 在线你懂的视频 | 99精品视频免费在线观看 | 久久久麻豆视频 | 国产一级在线观看 | 国产精品美乳一区二区免费 | 久草在线视频国产 | 国产一区二区在线视频观看 | 免费观看9x视频网站在线观看 | 中文字幕乱码日本亚洲一区二区 | 久久成年人视频 | 五月综合在线观看 | 夜夜澡人模人人添人人看 | 四虎在线观看 | 日本精品二区 | 日韩电影一区二区三区在线观看 | 精品视频免费看 | 久久精品一区二区三区视频 | 日韩精品不卡在线 | av东方在线| 国产精品免费视频一区二区 | 日韩成人欧美 | 婷婷 中文字幕 | 国内丰满少妇猛烈精品播放 | 国产99一区视频免费 | www.久久婷婷 | 国产日韩精品在线观看 | 美国三级黄色大片 | 国产专区免费 | 懂色av懂色av粉嫩av分享吧 | 97电影在线 | 日韩av男人的天堂 | 日日操夜夜操狠狠操 | 国产视频97 | 久久精品电影 | www.天天干 | 最近中文字幕大全 | 在线日本看片免费人成视久网 | 日本一区二区不卡高清 | 视频在线一区二区三区 | 在线黄色毛片 | 亚洲最新av在线网址 | 国产精品每日更新 | 婷婷精品在线 | 久久久久国产一区二区三区四区 | 国产一区二区网址 | 黄色av成人在线观看 | 久免费视频| 激情欧美丁香 | 超碰电影在线观看 | 51久久夜色精品国产麻豆 | 免费看片网站91 | 日韩欧美一区二区三区在线观看 | 中文字幕一区在线 | 综合精品久久久 | 国产精品视频地址 | 黄色精品免费 | 久久久久久久99精品免费观看 | 久久久久久久免费观看 | 国产一级不卡视频 | 狠狠狠狠狠狠天天爱 | 日韩理论在线 | 成年人视频在线观看免费 | 五月婷婷在线观看 | 久久午夜鲁丝片 | 国产黄a三级 | 香蕉视频18| 久久综合色播五月 | 国产精品久久久久久久久久久杏吧 | 91麻豆精品91久久久久同性 | 四季av综合网站 | 国产短视频在线播放 | 亚洲国产免费看 | 亚洲精品国产高清 | 免费的黄色的网站 | 欧美视频xxx | 婷婷天天色 | 国产精品不卡一区 | 91亚·色 | 91亚洲精品在线 | 欧美日韩国产一二三区 | 欧美精品久久人人躁人人爽 | 精品国产黄色片 | 天天干天天操av | 日韩精品短视频 | 91在线看视频免费 | 成人性生活大片 | 超碰人人草 | 国产美女免费视频 | 国产日韩一区在线 | 91热在线| 最新av网址在线 | 国产精品一区二区三区久久 | 91av网址| 国产精品99久久久久人中文网介绍 | 香蕉视频91 | 久色免费视频 | 天天色成人网 | 在线视频手机国产 | 精品国产成人在线 | 国产美女网站在线观看 | 免费在线观看一级片 | 97超视频免费观看 | 色美女在线 | 二区三区中文字幕 | 国产传媒中文字幕 | 欧美日韩在线观看一区二区 | 日日日日干 | 国产三级午夜理伦三级 | 成人av播放 | 国产中文字幕一区二区三区 | 日韩欧美在线高清 | 国产黄大片在线观看 | 又色又爽又黄高潮的免费视频 | 色婷婷综合久久久久中文字幕1 | 久草在线视频国产 | 奇米影视8888在线观看大全免费 | 日本中文字幕高清 | 国产精品白浆 | 欧美极度另类性三渗透 | 国产视频 亚洲精品 | 在线观看国产一区 | 不卡在线一区 | 久久成人午夜视频 | 999视频在线播放 | 婷婷激情综合五月天 | 在线观看免费黄视频 | 丝袜少妇在线 | 操操操天天操 | 又黄又爽又刺激 | 久久草草影视免费网 | 国产精品 亚洲精品 | 美女精品网站 | 日本精品中文字幕在线观看 | 成人免费观看av | 西西大胆免费视频 | a爱爱视频 | 91精品国自产在线偷拍蜜桃 | 5月丁香婷婷综合 | 久综合网 | 天天爱天天射 | 国产黄色观看 | 日本中文在线播放 | 中文字幕资源在线 | 日韩欧美精品在线 | 国产精品久久99精品毛片三a | 97在线观看免费观看 | 91麻豆精品国产91久久久更新时间 | a精品视频| 91黄站| 国产精品久久久久久久久久久免费看 | 亚洲欧美国产精品va在线观看 | 一区中文字幕在线观看 | 天天综合在线观看 | 视频一区二区在线观看 | 久久久久久麻豆 | 国产精品二区在线观看 | 午夜精品三区 | 日韩欧美综合视频 | 国产精品手机看片 | 又黄又爽又刺激 | 日韩免费电影一区二区三区 | 色先锋资源网 | 日本在线观看一区二区三区 | 国产99久久精品一区二区永久免费 | 亚洲国产播放 | 久久精品永久免费 | 国产精品初高中精品久久 | 久久免费电影网 | 99中文字幕视频 | 久久成人在线视频 | 天天操狠狠操网站 | 亚洲精品乱码久久久久久 | 在线观看亚洲精品视频 | 国产偷v国产偷∨精品视频 在线草 | 狠狠的日日 | 国产探花 | 久草在线视频资源 | 亚洲国产日韩欧美在线 | 狠狠色丁香久久综合网 | 日日色综合 | 午夜久久福利视频 | 国产成人精品一区二区三区福利 | 日日干美女 | 中国美女一级看片 | 国产一级高清视频 | 国产黄色特级片 | 四虎影视欧美 | 亚洲精品视频网站在线观看 | 国产精品亚洲精品 | 国产精品短视频 | 51久久成人国产精品麻豆 | 国产精品99久久久久久久久久久久 | 黄色亚洲精品 | 国产视频一区精品 | av电影av在线| av高清影院 | 国产亚洲精品久久久久久大师 | 缴情综合网五月天 | 欧美激情视频一区二区三区 | 亚洲成人影音 | 色伊人网| 国产成人在线观看免费 | 中文字幕在线观看第二页 | 日日激情| 久久精品久久精品久久 | 91在线看网站 | 国产偷在线 | 成人av电影免费观看 | 久久综合狠狠 | 黄色片网站av | 色av婷婷| 99久久999久久久精玫瑰 | 国产vs久久| 欧美精品一区在线 | 国产精品久久久精品 | 国产无吗一区二区三区在线欢 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 九九热在线观看 | 五月综合网站 | 国产精品手机在线观看 | 人人插人人玩 | 四虎成人av| 亚洲精品www. | 激情欧美一区二区免费视频 | 色婷婷中文 | 麻豆成人小视频 | 日韩免费视频一区二区 | 久插视频 | 国产精品永久在线 | 中文字幕在线专区 | 亚洲另类在线视频 | 亚洲日本黄色 | 操操操综合 | 久在线| 99久久精品网 | 99热国产精品 | 草免费视频 | 五月婷婷六月丁香激情 | 亚洲精品videossex少妇 | 粉嫩一区二区三区粉嫩91 | 三级在线播放视频 | 亚洲2019精品 | 超碰在线人人97 | 麻豆91精品视频 | 日韩激情片在线观看 | 激情五月六月婷婷 | 超碰在线观看av | 欧美在线观看视频 | 久草影视在线观看 | 欧美一级看片 | 久久久久久久久久久免费av | 九九热1| 激情av网址 | 色婷婷综合五月 | 国产精品久久一区二区无卡 | 久久tv视频 | av噜噜噜在线播放 | 99人久久精品视频最新地址 | 日韩理论在线观看 | av免费在线观 | 久久久久黄| 午夜性盈盈 | 欧美大片在线看免费观看 | 国产高清在线免费视频 |