亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bpnet.cpp

?? bp網絡代碼 VC編寫
?? CPP
字號:
// BpNet.cpp : implementation file
////////////////////////////////////////////////////////////////////
/////////////////人工神經網絡BP算法/////////////////////////////////
//1、動態改變學習速率
//2、加入動量項
//3、運用了Matcom4.5的矩陣運算庫(可免費下載,頭文件matlib.h),
//   方便矩陣運算,當然,也可自己寫矩陣類
//4、可暫停運算
//5、可將網絡以文件的形式保存、恢復
///////////////作者:同濟大學材料學院   張純禹//////////////////////
///////////////email:chunyu_79@hotmail.com//////////////////////////
///////////////QQ:53806186//////////////////////////////////////////
///////////////歡迎不斷改進!歡迎討論其他實用的算法!/////////////////

#include "BpNet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CBpNet
IMPLEMENT_SERIAL( CBpNet, CObject, 1 )

CBpNet::CBpNet()
{initM(MATCOM_VERSION);//啟用矩陣運算庫
}

CBpNet::~CBpNet()
{exitM();
 delete this;
}




/////////////////////////////////////////////////////////////////////////////
// CBpNet message handlers
//創建新網絡
void CBpNet::Create(Mm mInputData, Mm mTarget, int iInput, int iHidden, int iOutput)
{ int i,j;
  mSampleInput=zeros(mInput.rows(),mInput.cols());
  mSampleTarget=zeros(mTarget.rows(),mTarget.cols());  
  mSampleInput=mInputData;
  mSampleTarget=mTarget;
  this->iInput=iInput;
  this->iHidden=iHidden;
  this->iOutput=iOutput;
  //創建計算用的單個樣本矩陣
  mInput=zeros(1,this->iInput);
  mHidden=zeros(1,this->iHidden);
  mOutput=zeros(1,this->iOutput);
  //創建權重矩陣,并賦初值
  mWeighti=zeros(this->iInput,this->iHidden);
  mWeighto=zeros(this->iHidden,this->iOutput); 
  //賦初值
  for(i=1;i<=this->iInput;i++)
	  for(j=1;j<=this->iHidden;j++)
		  mWeighti.r(i,j)=randab(-1.0,1.0);
  for(i=1;i<=this->iHidden;i++)
	  for(j=1;j<=this->iOutput;j++)
		  mWeighto.r(i,j)=randab(-1.0,1.0);
  
  //創建闕值矩陣,并賦值
  mThresholdi=zeros(1,this->iHidden);
  for(i=1;i<=this->iHidden;i++)
	  mThresholdi.r(i)=randab(-1.0,1.0);
  mThresholdo=zeros(1,this->iOutput);
  for(i=1;i<=this->iOutput;i++)
	  mThresholdo.r(i)=randab(-1.0,1.0);
  //創建權重變化矩陣
  mChangei=zeros(this->iInput,this->iHidden);
  mChangeo=zeros(this->iHidden,this->iOutput);
  
  mInputNormFactor=zeros(iInput,2);
  mTargetNormFactor=zeros(iOutput,2);
  //誤差矩陣
   mOutputDeltas=zeros(iOutput);
   mHiddenDeltas=zeros(iHidden);
  //學習速率賦值
  dblLearnRate1=0.5;
  dblLearnRate2=0.5;
  dblMomentumFactor=0.95;
  
  m_isOK=false;
  m_IsStop=false;
  dblMse=1.0e-6;//誤差限
  dblError=1.0;
  lEpochs=0;

}
//根據已有的網絡進行預測
Mm CBpNet::simulate(Mm mData)
{int i,j;
 Mm mResult;
 Mm data=zeros(mData.rows(),mData.cols());
 data=mData;
 if(mData.cols()!=iInput)
 {::MessageBox(NULL,"輸入數據變量個數錯誤!","輸入數據變量個數錯誤!",MB_OK);
  return mResult;
 }
 mResult=zeros(data.rows(),iOutput); 
 //正規化數據
 for(i=1;i<=data.rows();i++)
	 for(j=1;j<=data.cols();j++) 
         data.r(i,j)=(data.r(i,j)-mInputNormFactor.r(j,1))/(mInputNormFactor.r(j,2)-mInputNormFactor.r(j,1));
 //計算
	 int iSample;
	 Mm mInputdata,mHiddendata,mOutputdata;
	 mInputdata=zeros(1,iInput);
	 mHiddendata=zeros(1,iHidden);
	 mOutputdata=zeros(1,iOutput);
	 double sum=0.0;
   for(iSample=1;iSample<=data.rows();iSample++){ 
	 //輸入層數據
	    for(i=1;i<=iInput;i++)
		  mInputdata.r(i)=data.r(iSample,i);
	 //隱層數據	
		for(j=1;j<=iHidden;j++){
		  sum=0.0;
		 for(i=1;i<=iInput;i++)
			sum+=mInputdata.r(i)*mWeighti.r(i,j);
		 sum-=mThresholdi.r(j); 
		 mHiddendata.r(j)=1.0/(1.0+exp(-sum));
		}
    
  //輸出數據
	for(j=1;j<=iOutput;j++){
		sum=0.0;
		for(i=1;i<=iHidden;i++)
			sum+=mHiddendata.r(i)*mWeighto.r(i,j);
		sum-=mThresholdo.r(j); 
		mOutputdata.r(j)=1.0/(1.0+exp(-sum));
	}
	
	//轉換
	for(j=1;j<=iOutput;j++)
        mResult.r(iSample,j)=mOutputdata.r(j)*(mTargetNormFactor.r(j,2)-mTargetNormFactor.r(j,1))+mTargetNormFactor.r(j,1);
 }
  
 return (mResult);
}

void CBpNet::LoadBpNet(CString &strNetName)
{CFile file;
 
 if(file.Open(strNetName,CFile::modeRead)==0)   
 {MessageBox(NULL,"無法打開文件!","錯誤",MB_OK);
  return;
 }
 else{
	 CArchive myar(&file,CArchive::load);
	 Serialize(myar); 
	 myar.Close();
 }
 file.Close(); 
}

bool CBpNet::SaveBpNet(CString &strNetName)
{CFile file;
 if(strNetName.GetLength()==0)
	 return(false);
 if(file.Open(strNetName,CFile::modeCreate|CFile::modeWrite)==0)   
 {MessageBox(NULL,"無法創建文件!","錯誤",MB_OK);
  return(false);
 }
 else{
	 CArchive myar(&file,CArchive::store);
	 Serialize(myar); 
	 myar.Close();
 }
 file.Close(); 
 return(true);
}
//網絡學習
void CBpNet::learn()
{ int iSample=1;
  double dblTotal;
  MSG msg;
  if(m_IsStop)
	  m_IsStop=false;
  //數據正規化處理
  normalize();

  while(dblError>dblMse&&!m_IsStop){
   dblTotal=0.0;
   for(iSample=1;iSample<=mSampleInput.rows();iSample++){
	forward(iSample);
    backward(iSample);
	dblTotal+=dblErr;//總誤差
  }
   if(dblTotal/dblError>1.04){//動態改變學習速率
	   dblLearnRate1*=0.7;
       dblLearnRate2*=0.7;
   }
   else{
       dblLearnRate1*=1.05;
       dblLearnRate2*=1.05;
   }
   lEpochs++;
   dblError=dblTotal;

   ::PeekMessage(&msg,NULL,0,0,PM_REMOVE);
   ::DispatchMessage(&msg);
     msg.message=-1;
   ::DispatchMessage(&msg);//這樣可以消除屏閃和假死機
  }
if(dblError<=dblMse)
 m_isOK=true;
else
 m_isOK=false;

}

void CBpNet::stop()
{
 m_IsStop=true;
}

double CBpNet::randab(double a, double b)
{ //注意,如果應用矩陣庫,頭文件matlib.h對rand()函數重新定義,只產生(0,1)
  //之間的隨機數
  return((b-a)*rand()+a);
}

//將數據轉化到(0,1)區間
void CBpNet::normalize()
{
 
 int i,j;
  //輸入數據范圍
  mInputNormFactor=scope(mSampleInput);
  //目標數據范圍
  mTargetNormFactor=scope(mSampleTarget);

 for(i=1;i<=mSampleInput.rows();i++)
	 for(j=1;j<=mSampleInput.cols();j++)
		 mSampleInput.r(i,j)=(mSampleInput.r(i,j)-mInputNormFactor.r(j,1))/(mInputNormFactor.r(j,2)-mInputNormFactor.r(j,1));
 
 for(i=1;i<=mSampleTarget.rows();i++)
	 for(j=1;j<=mSampleTarget.cols();j++)
		 mSampleTarget.r(i,j)=(mSampleTarget.r(i,j)-mTargetNormFactor.r(j,1))/(mTargetNormFactor.r(j,2)-mTargetNormFactor.r(j,1));
 
}

//前向計算 
void CBpNet::forward(int iSample)
{//根據第iSample個樣本,前向計算
	if(iSample<1||iSample>mSampleInput.rows()){
		MessageBox(NULL,"無此樣本數據:索引出界!","無此樣本數據:索引出界!",MB_OK);
		return;
	}
	int i,j;
	double sum=0.0;
	
	//輸入層數據
	for(i=1;i<=iInput;i++)
		mInput.r(i)=mSampleInput.r(iSample,i);
	
	//隱層數據
    
	for(j=1;j<=iHidden;j++){
		sum=0.0;
		for(i=1;i<=iInput;i++)			
			sum+=mInput.r(i)*mWeighti.r(i,j);
		
		sum-=mThresholdi.r(j); 
		mHidden.r(j)=1.0/(1.0+exp(-sum));
	}
    	
	//輸出數據
	for(j=1;j<=iOutput;j++){
		sum=0.0;
		for(i=1;i<=iHidden;i++)
			sum+=mHidden.r(i)*mWeighto.r(i,j);
		sum-=mThresholdo.r(j); 
		mOutput.r(j)=1.0/(1.0+exp(-sum));
	}
   	
}

//后向反饋
void CBpNet::backward(int iSample)
{
	if(iSample<1||iSample>mSampleInput.rows()){
		MessageBox(NULL,"無此樣本數據:索引出界!","無此樣本數據:索引出界!",MB_OK);
		return;
	}
    int i,j;
	
    //輸出誤差
	for(i=1;i<=iOutput;i++)
		mOutputDeltas.r(i)=mOutput.r(i)*(1-mOutput.r(i))*(mSampleTarget.r(iSample,i)-mOutput.r(i));
	
	//隱層誤差
	double sum=0.0;
	for(j=1;j<=iHidden;j++){
		sum=0.0;
		for(i=1;i<=iOutput;i++)
			sum+=mOutputDeltas.r(i)*mWeighto.r(j,i);
		mHiddenDeltas.r(j)=mHidden.r(j)*(1-mHidden.r(j))*sum;
	}
	//更新隱層-輸出權重
	
	double dblChange;
	for(j=1;j<=iHidden;j++)
		for(i=1;i<=iOutput;i++){
			dblChange=mOutputDeltas.r(i)*mHidden.r(j);
			mWeighto.r(j,i)=mWeighto.r(j,i)+dblLearnRate2*dblChange+dblMomentumFactor*mChangeo.r(j,i);
			mChangeo.r(j,i)=dblChange;
		}
    
	//更新輸入-隱層權重
    for(i=1;i<=iInput;i++)
		for(j=1;j<=iHidden;j++){
			dblChange=mHiddenDeltas.r(j)*mInput.r(i);
            mWeighti.r(i,j)=mWeighti.r(i,j)+dblLearnRate1*dblChange+dblMomentumFactor*mChangei.r(i,j); 
			mChangei.r(i,j)=dblChange;
		}
	//修改闕值
	for(j=1;j<=iOutput;j++)
	    mThresholdo.r(j)-=dblLearnRate2*mOutputDeltas.r(j);  
	for(i=1;i<=iHidden;i++) 
	    mThresholdi.r(i)-=dblLearnRate1*mHiddenDeltas.r(i); 
   	//計算誤差
	dblErr=0.0;
	for(i=1;i<=iOutput;i++)
		dblErr+=0.5*(mSampleTarget.r(iSample,i)-mOutput.r(i))*(mSampleTarget.r(iSample,i)-mOutput.r(i));
	
   
}

//求數據列的范圍
Mm CBpNet::scope(Mm mData)
{Mm mScope;
 mScope=zeros(mData.cols(),2);
 double  min,max;
 for(int i=1;i<=mData.cols();i++){
	 min=max=mData.r(1,i); 
	 for(int j=1;j<=mData.rows();j++){
		 if(mData.r(j,i)>=max)
			 max=mData.r(j,i);
		 if(mData.r(j,i)<=min)
			 min=mData.r(j,i);
	 }
	 if(min==max)
		 min=0.0;
	 mScope.r(i,1)=min;
	 mScope.r(i,2)=max;
 }
 return(mScope);

}

//顯示矩陣數據,方便調試
void CBpNet::display(Mm data)
{CString strData,strTemp;
 int i=1,j=1;
 for(i=1;i<=data.rows();i++){
	 for(j=1;j<=data.cols();j++){
	 strTemp.Format("%.3f ",data.r(i,j));
	 strData+=strTemp;
	 }
	 strData=strData+"\r\n";
 }
 ::MessageBox(NULL,strData,"",MB_OK);

}

void CBpNet::Serialize(CArchive &ar)
{CObject::Serialize(ar);
 ///////////////////////////////////// 
if(ar.IsStoring()){
     int i,j;
	 double dblData;
	 CString strTemp="Bp";
	 ar<<strTemp;//寫入標志
	//紀錄神經元個數
	 ar<<iInput<<iHidden<<iOutput;
    //紀錄權值
	 for(i=1;i<=iInput;i++)
		 for(j=1;j<=iHidden;j++){
			 dblData=mWeighti.r(i,j);
		     ar<<dblData;
		 }
     for(i=1;i<=iHidden;i++)
		 for(j=1;j<=iOutput;j++){
			 dblData=mWeighto.r(i,j);
			 ar<<dblData;
		 }
	
      //記錄權值變化
	 for(j=1;j<=iHidden;j++)
		for(i=1;i<=iOutput;i++)
			ar<<mChangeo.r(j,i);
	
    //輸入-隱層權重變化
     for(i=1;i<=iInput;i++)
		for(j=1;j<=iHidden;j++)
			ar<<mChangei.r(i,j);
		
      //紀錄闕值
	 for(i=1;i<=iHidden;i++){
              dblData=mThresholdi.r(i);
			  ar<<dblData;
			  }
     for(i=1;i<=iOutput;i++){
		      dblData=mThresholdo.r(i);
			  ar<<dblData;
			  }
     //紀錄輸入輸出的極值
	 for(i=1;i<=iInput;i++){
		  dblData=mInputNormFactor.r(i,1);
		  ar<<dblData; //極小值
		  dblData=mInputNormFactor.r(i,2);
		  ar<<dblData; //極大值
         }
	 for(i=1;i<=iOutput;i++)
		 {dblData=mTargetNormFactor.r(i,1);
		  ar<<dblData; //輸出數據極小值
		  dblData=mTargetNormFactor.r(i,2);
		  ar<<dblData; 
		 }
	 //誤差范圍
	 ar<<dblMse; 
	 //學習速率
	 ar<<dblLearnRate1<<dblLearnRate2;
	 
}
         
 else{
	 int i,j;
	 CString strTemp="";
	 double dblTemp;
	 ar>>strTemp;//讀入標志
	//讀入神經元個數
	 ar>>iInput>>iHidden>>iOutput;
	 mChangei=zeros(iInput,iHidden);
     mChangeo=zeros(iHidden,iOutput);
	 mWeighti=zeros(iInput,iHidden);
	 mWeighto=zeros(iHidden,iOutput);
    //讀入權值
	 for(i=1;i<=iInput;i++)
		  for(j=1;j<=iHidden;j++)
		  { ar>>dblTemp;
		    mWeighti.r(i,j)=dblTemp;
		  }
	 	  
     for(i=1;i<=iHidden;i++)
		 for(j=1;j<=iOutput;j++)
		 { ar>>dblTemp;
		   mWeighto.r(i,j)=dblTemp;
		 }
	
	 //讀入權值變化
	 for(j=1;j<=iHidden;j++)
		for(i=1;i<=iOutput;i++)
			ar>>mChangeo.r(j,i);
	
     //輸入-隱層權重
     for(i=1;i<=iInput;i++)
		for(j=1;j<=iHidden;j++)
			ar>>mChangei.r(i,j);
	
     //讀入闕值
     mThresholdi=zeros(1,iHidden);
	 for(i=1;i<=iHidden;i++)
	 {ar>>dblTemp;
	  mThresholdi.r(i)=dblTemp;
	 }
	 mThresholdo=zeros(1,iOutput);
     for(i=1;i<=iOutput;i++)
	 {ar>>dblTemp;
	  mThresholdo.r(i)=dblTemp;
	 }
     //讀入輸入輸出的極值
     mInputNormFactor=zeros(iInput,2);
	 for(i=1;i<=iInput;i++){
		  ar>>dblTemp;
		  mInputNormFactor.r(i,1)=dblTemp; //極小值
		  ar>>dblTemp;
		  mInputNormFactor.r(i,2)=dblTemp; //極大值
         }
	 mTargetNormFactor=zeros(iOutput,2);
	 for(i=1;i<=iOutput;i++)
		 {ar>>dblTemp;
	      mTargetNormFactor.r(i,1)=dblTemp; //輸出數據極小值
		  ar>>dblTemp;
		  mTargetNormFactor.r(i,2)=dblTemp; 
		 }
	 //讀入誤差范圍
	 ar>>dblMse; 
	 //讀入學習速率
	 ar>>dblLearnRate1>>dblLearnRate2;
	 

	 //創建計算用的單個樣本矩陣
     mInput=zeros(1,iInput);
     mHidden=zeros(1,iHidden);
     mOutput=zeros(1,iOutput);
	 //誤差矩陣
	 mOutputDeltas=zeros(iOutput);
	 mHiddenDeltas=zeros(iHidden);
     
 }

}

//如果不是新網絡,比如從文件恢復的網絡,調用此函數構建學習樣本
void CBpNet::LoadPattern(Mm mIn, Mm mOut)
{ if(mIn.cols()!=iInput||mOut.cols()!=iOutput){
	::MessageBox( NULL,"學習樣本格式錯誤!","錯誤",MB_OK);
	return;
}
  mSampleInput=zeros(mIn.rows(),mIn.cols());
  mSampleTarget=zeros(mOut.rows(),mOut.cols());  
  mSampleInput=mIn;
  mSampleTarget=mOut;
    
  m_isOK=false;
  m_IsStop=false;
  lEpochs=0;
  dblMomentumFactor=0.95;
  dblError=1.0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一级二级三级| 精品国产在天天线2019| 日韩av成人高清| 久久久久久久免费视频了| 日日嗨av一区二区三区四区| 国产丝袜欧美中文另类| 色菇凉天天综合网| 九九九精品视频| 亚洲精品乱码久久久久久黑人 | 夜夜精品视频一区二区| 91精品国产aⅴ一区二区| 成人精品国产福利| 日韩成人一区二区| 国产精品理论片| 欧美一区二区人人喊爽| 国产成人综合精品三级| 午夜精品久久久久久久99水蜜桃 | 国产女人18水真多18精品一级做| 欧美在线观看一区| 久久 天天综合| 一区二区国产视频| 国产日韩精品视频一区| 欧美午夜在线观看| 成人美女视频在线观看| 麻豆传媒一区二区三区| 亚洲国产综合色| 国产精品国产三级国产普通话99 | 日韩国产在线一| 亚洲精品福利视频网站| 久久精品一级爱片| 在线成人免费观看| 在线免费一区三区| 一本一本大道香蕉久在线精品| 久久精品国产77777蜜臀| 亚洲国产视频在线| 亚洲精选视频在线| 中文字幕欧美国产| 国产精品美女久久久久久 | 日韩成人精品视频| 无吗不卡中文字幕| 亚洲大型综合色站| 日韩一区精品视频| 美女视频第一区二区三区免费观看网站| 日韩国产精品久久久久久亚洲| 蜜臀久久99精品久久久画质超高清 | 久久亚洲免费视频| 久久这里都是精品| 亚洲国产激情av| 亚洲欧洲精品天堂一级 | 国产视频911| 国产精品网站在线| 国产精品电影一区二区三区| 亚洲人成人一区二区在线观看| 亚洲另类中文字| 婷婷成人激情在线网| 免费成人av在线播放| 日本不卡一二三| 国产乱码字幕精品高清av| 成人小视频免费观看| 99视频在线观看一区三区| 欧美在线免费播放| 日韩欧美123| 中文字幕av不卡| 一区二区三区加勒比av| 免费不卡在线观看| 成人午夜电影久久影院| 色婷婷综合久久久久中文| 欧美精品视频www在线观看| 日韩亚洲欧美在线| 日本一区免费视频| 亚洲影视资源网| 极品销魂美女一区二区三区| 懂色av一区二区三区免费看| 日本韩国欧美三级| 精品国产一区a| 亚洲男人的天堂在线观看| 视频在线在亚洲| 成人激情免费网站| 欧美日韩国产区一| 国产亚洲成av人在线观看导航 | 欧美一区二区三区免费| 国产午夜精品一区二区| 亚洲午夜久久久久久久久电影院| 精品制服美女久久| 91国偷自产一区二区开放时间| 欧美sm极限捆绑bd| 亚洲黄色录像片| 国产精品一线二线三线精华| 欧美三级蜜桃2在线观看| 欧美韩国日本综合| 日本午夜精品视频在线观看| 粉嫩av亚洲一区二区图片| 欧美精品在欧美一区二区少妇| 亚洲国产精品二十页| 美国av一区二区| 欧美日韩中字一区| 国产精品国产自产拍在线| 精品一区二区在线观看| 欧美性videosxxxxx| 国产精品蜜臀av| 国产一区二区精品久久91| 欧美性猛交一区二区三区精品 | 日韩av成人高清| 色综合色综合色综合| 久久这里只有精品6| 午夜精品国产更新| 色综合一个色综合| 国产三级久久久| 美国一区二区三区在线播放| 欧美色视频在线观看| 亚洲丝袜制服诱惑| 成人综合在线观看| 久久蜜桃av一区二区天堂| 青椒成人免费视频| 欧美日韩高清一区二区三区| 亚洲黄色录像片| 色又黄又爽网站www久久| 国产日韩欧美亚洲| 国产一区在线观看视频| 欧美一级国产精品| 日韩精品高清不卡| 欧美色大人视频| 亚洲国产欧美日韩另类综合| www.在线欧美| 亚洲三级在线看| 成人h精品动漫一区二区三区| 久久综合久久综合亚洲| 捆绑变态av一区二区三区| 91麻豆精品91久久久久同性| 午夜精品影院在线观看| 欧美怡红院视频| 亚洲妇女屁股眼交7| 欧美亚洲综合在线| 五月婷婷久久综合| 欧美一区日韩一区| 美女视频一区二区三区| 91精品国产综合久久久久久漫画 | 国产盗摄女厕一区二区三区| 久久久久久久久岛国免费| 国产精品77777竹菊影视小说| 国产午夜久久久久| 懂色中文一区二区在线播放| 国产精品沙发午睡系列990531| 不卡一区在线观看| 亚洲美女精品一区| 欧美日韩不卡视频| 日韩福利电影在线观看| 日韩欧美激情在线| 国产伦精品一区二区三区免费迷| 久久久国产午夜精品| 不卡一区在线观看| 亚洲精品免费在线播放| 7777精品伊人久久久大香线蕉完整版 | 国产成人亚洲综合a∨婷婷| 国产肉丝袜一区二区| 91在线视频免费观看| 亚洲国产一区二区a毛片| 欧美一区二区国产| 国产精品123| 亚洲青青青在线视频| 欧美精品亚洲二区| 国产精品一级二级三级| 亚洲视频免费在线观看| 欧美视频在线不卡| 国精品**一区二区三区在线蜜桃 | 日韩电影免费一区| 久久九九影视网| 欧美亚洲综合久久| 久久草av在线| 亚洲欧美日韩系列| 欧美一区二区不卡视频| 国产91精品在线观看| 亚洲午夜成aⅴ人片| 欧美精品一区二区三区很污很色的| 99久久er热在这里只有精品15| 亚洲成人一二三| 国产欧美久久久精品影院| 色婷婷综合久久久中文一区二区| 强制捆绑调教一区二区| 日韩一区在线看| 日韩欧美一区二区久久婷婷| 99国产精品国产精品毛片| 秋霞午夜av一区二区三区| 国产精品三级久久久久三级| 91精品国产高清一区二区三区蜜臀| 国产毛片精品国产一区二区三区| 亚洲一区二区三区四区不卡| 久久嫩草精品久久久精品| 欧美区一区二区三区| 丰满放荡岳乱妇91ww| 日本美女视频一区二区| 亚洲欧美日韩在线不卡| 久久精品一区四区| 日韩一区二区免费视频| 色婷婷av一区二区三区软件| 国产精品1区2区3区在线观看| 亚洲不卡在线观看| 国产精品久久久久久久久晋中| 欧美电影免费观看高清完整版在线观看 | 亚洲色图一区二区|