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

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

?? moga2.cpp

?? 多目標遺傳算法優化程序
?? CPP
字號:
#include "moga2.h"
#include "aleatorio.h"

Representacion::Representacion(int b,int ngenes,double *linf, double *lsup, int *pres,int iguales){
  int j=0;
  bits=0;
  base=b;  
  presicion=new(int[ngenes]);
  bitsXgene=new(int[ngenes]);
  lInf=new(double[ngenes]);
  lSup=new(double[ngenes]);
  for(int i=0;i<ngenes;i++){
    presicion[i]=pres[j];//cuantos decimales de presicion se trabajara
    //calculo del numero de bits
    bitsXgene[i]=(int)ceil(log((lsup[j]-linf[j])*pow(10,pres[j])*1.000001)/log(base));
    bits+=bitsXgene[j];
    lInf[i]=linf[j];//lower bound
    lSup[i]=lsup[j];//upperbound
    if(iguales!=1)j++;
  }
  cout<<bits<<"bits\n";
  nGenes=ngenes;
}
int Representacion::retBits(){
  return bits;
}

Representacion::~Representacion(){
  delete [] presicion;
  delete [] bitsXgene;
  delete [] lInf;
  delete [] lSup;
}

/*
 Metodo que copia un arreglo de enteros (genotipo) hacia memoria y regresa un puntero hacia ese espacio de memoria 
*/

void Representacion::copia(int *num,int *num2,int n)
{
  int *pnum=num;
  for(int i=0;i<n;i++,pnum++,num2++)//recorre todo el genotipo,haciendo
    *pnum=*num2;//una copia hacia la memoria creada.
}

void Representacion::copia(double *num,double *num2,int n)
{
  double *pnum=num;
  for(int i=0;i<n;i++,pnum++,num2++)//recorre todo el genotipo,haciendo
    *pnum=*num2;//una copia hacia la memoria creada.
}

/*
Metodo que convierte de Gray a binario
*/
int *Representacion::gray_A_binario(int *g){
  int *b=new int[bits];
  int *pb;
  pb=b;
  int valor=*g;
  *pb=valor;
  g++;
  pb++;
  for(int k=1;k<bits;k++,g++,pb++){
    if(*g==1)valor=(valor==1)?0:1; //simula el not.
    *pb=valor;
  }
  return b;
}

/*
  metodo que a partir de un arreglo de enteros (genotipo(simulacion de arreglo binario)) de codifica su valor (fenotipo) dentro de un rango minimo y un rango maximo 
*/
double Representacion::decodifica (int cual,int *num)
{
  double fenotipo=0.0;
  int cantbits=0;
  int i;
  int *cadena,*pb;
  if(base==2) //si es base 2 entonces  decodifica a binario
    cadena=gray_A_binario(num);
  else cadena=num;
  for(i=0;i<cual;i++)
    cantbits+=bitsXgene[i];
  
  pb=cadena;
  for(i=0;i<bitsXgene[cual];i++)//recorrer todo el genotipo, para hacer la suma
    fenotipo+=ldexp(pb[i+cantbits],i);//de las potencias de dos reespectivas y
  if(base==2)
    delete [] cadena;
  double regreso=(lInf[cual]+fenotipo*(lSup[cual]-lInf[cual])/(pow(base,bitsXgene[cual])-1));  //mediante la formula que dio en clase adecuo los valores dentro de los 
  return regreso;
}

/*
metodo que imprime el genotipo
*/
void Representacion::imprime(double *num,int n)
{
  for(int i=0;i<n;i++,num++)//recorre el genotipo, e imprime su valor.
    cout<<*num<<" ";
}

void Representacion::imprime(int *num,int n){
  for(int i=0;i<n;i++,num++)//recorre el genotipo, e imprime su valor.
    cout<<*num<<" ";
}

/*
  metodo que genera un genotipo con la seleccion del valor de los alelos al azar con probabilidad de 0.5
*/
int *Representacion::genera(){
  int *gtemp,*genotipo;
  genotipo=new(int[bits]);//asigna memoria hacia el genotipo a generar
  gtemp=genotipo;
  for(int i=0;i<bits;i++,gtemp++){//genera el genotipo, alelo a alelo,mediante
   *gtemp=(int)Aleatorio(0,base-1);//probabilidad.
  }
  return genotipo;//regresa el genotipo generado
}

/*
  metodo que genera un genotipo con la seleccion del valor de los alelos al azar con probabilidad de 0.5
*/
int *Representacion::inicializa(){
  int *gtemp,*genotipo;
  genotipo=new(int[bits]);//asigna memoria hacia el genotipo a generar
  gtemp=genotipo;
  for(int i=0;i<bits;i++,gtemp++)//genera el genotipo, alelo a alelo,mediante
    *gtemp=0;//probabilidad.
  return genotipo;//regresa el genotipo generado
}

/*
  Metodo que cruza dos genotipos, a partir de dos posiciones dadas
  (cruza de dos puntos)
*/
void Representacion::cruza(int *padre1,int *padre2,int posicion1,int posicion2){
  int cambio;
  for(int i=0;i<bits;i++,padre1++,padre2++){
    cambio=(posicion1<=i&&i<=posicion2)?1:0;
    if(cambio){
      int t=*padre1;
      *padre1=*padre2;
      *padre2=t;
    }
  }
}

/*
  metodo que muta a un genotipo a partir de una probabilidad dada y regresa el numero de mutaciones efecutadas
*/
int Representacion::muta(int *padre,float Pm){
  int *ptemp, mutaciones=0,r;
  ptemp=padre;
  for(int i=0;i<bits;i++,ptemp++){//recorre el genotipo, y si el flip da 
    int valor=flip(Pm);
    if(valor){//1 entonces muta
      mutaciones++;
      do{
	r=(int) Aleatorio(0,base-1);}
      while(r==*ptemp);
      *ptemp=r;
    }
  }
  return mutaciones;//regresa el total de las mutaciones.
}


/*
  Metodo donde se efectua la cruza, y la mutacion.

 */
void MOGAII::CruzaYMutacion(){
  //se recorre la poblacion generada, de 2 en dos, y de acuerdo al Pc y a Pm 
  //se cruzan y se mutan
  int pDeCruza[2],menor;
  for(int i=0;i<M;i+=2){
    if(flip(Pc)){//para checar si va a haber cruza
      pDeCruza[0]=(int)Aleatorio(1,bits-2);//se busca el punto de 
      //cruza1 y dos  y se realiza la cruza
      do
	pDeCruza[1]=(int)Aleatorio(1,bits-2);
      while(pDeCruza[1]==pDeCruza[0]);
      menor=(pDeCruza[0]<pDeCruza[1])?0:1;
      cruza(poblacionNueva[i].genotipo,poblacionNueva[i+1].genotipo,pDeCruza[menor],pDeCruza[1-menor]);
    }

    muta(poblacionNueva[i].genotipo,Pm);//se muta de acuerdo a Pm
    muta(poblacionNueva[i+1].genotipo,Pm);//se muta de acuerdo a Pm
    evalua(poblacionNueva[i].genotipo,poblacionNueva[i].aptObj);//se calcula su aptitud
    evalua(poblacionNueva[i+1].genotipo,poblacionNueva[i+1].aptObj);//se calcula su aptitud
  }
}

/*Selecci'on por universal estocastico:
Propuesta por Baker (1987)
El objetivo es minimizar la mala distribuci'on de los individuos en la poblaci'on en funci'on de sus valores esperados.
El algoritmo es O(n)

*/
void MOGAII::Seleccion(){
	int i;
  double media=0;
  //se recorre la poblacion, para encontrar al mas apto, y se almacena
  //tambien en este ciclo se hace la suma de aptitudes
  
  sumaValores=0;
  //Calculo de los valores esperados.
  for( i=0;i<M;i++)
    sumaValores+=poblacion[i].apt;//se hace la suma de aptituds

  media=sumaValores/M;//se saca la media (aptitudes entre poblacion
  for( i=0;i<M;i++){
    poblacion[i].valEsp=poblacion[i].apt/media;
  }
  /*  
  for(int i=0;i<M;i++)
   cout<<poblacion[arrordenado[i]].valEsp<<endl;
  
    exit(0);
  */
}

void MOGAII::NuevaPoblacion()
{
  double aleatorio;
    //generacion de la nueva poblacion a partir de la ruleta
  double ptr=Aleatorio2(0,1);//probabilidad.
  double sum=0.0;
  int j=0;
  for(int i=0;i<M;i++){
    int repetido=0;
    for(sum+=poblacion[arrordenado[i]].valEsp;sum>ptr;ptr+=1,j++){
      copia(poblacionNueva[j].genotipo,poblacion[arrordenado[i]].genotipo,bits);//se almacena el genotipo seleccio;//nado y se dispone ha generar al 2oindividuo
      poblacionNueva[j].rank=poblacion[arrordenado[i]].rank;     
      //      if(repetido>1)cout<<"encontre uno\n";
      repetido++;

    }
  }
}

void MOGAII::GenerarPoblacionAleatoria(){
  poblacion=new (Individuo[M]);
  poblacionNueva=new (Individuo[M]);
  for(int i=0;i<M;i++){
    poblacion[i].genotipo=genera();
    poblacionNueva[i].genotipo=genera();
    poblacion[i].aptObj=new (double[nObjs]);
    poblacionNueva[i].aptObj=new (double[nObjs]);
    poblacion[i].aptObjEsc=new (double[nObjs]);
    poblacionNueva[i].aptObjEsc=new (double[nObjs]);
    poblacion[i].loc=0;
    poblacionNueva[i].loc=0;
    //    evalua(poblacion[i].genotipo,poblacion[i].aptObj);
  }
}
void MOGAII::EvaluarPoblacion(){
  for(int i=0;i<M;i++)
    evalua(poblacion[i].genotipo,poblacion[i].aptObj);
}
void MOGAII::evalua(int *genotipo,double *aptObj){
  double x1,x2;
  double q_=4,alfa=2,PI=3.1415926;
  x1=decodifica(0,genotipo);
  x2=decodifica(1,genotipo);
  aptObj[0]=x1;
  aptObj[1]=(1+10*x2)*(1-(pow(x1/(1+10*x2),alfa))-(x1/(1+10*x2)*sin(2*PI*q_*x1)));

}
void MOGAII::NuevaGeneracion(){
  Individuo *poblatemp;
  poblatemp=poblacion;//ahora la poblacion incial, va a ser la que
  poblacion=poblacionNueva;//va a ser generada (pero sin adicion extra de memoria)
  poblacionNueva=poblatemp;//y la generada, ahora se convierte en la
  //padre
}

MOGAII::MOGAII(int gmax,int m, double pc, double pm,int ngenes,int nobjs,double *linf, double *lsup, int *pres,int tampareto):Representacion(2,ngenes,linf,lsup,pres,1){

  M=m;
  Pc=pc;
  nGenes=ngenes;
  nObjs=nobjs;
  Pm=pm;
  Gmax=gmax;
  srand(time(0)); 
  malla=new MallaAdap(nobjs,tampareto,bits);
}

void MOGAII::ImprimeValores(){
  for(int i=0;i<M;i++){
    if(poblacion[i].rank==1)
	cout<<poblacion[i].aptObj[0]<<" "<<poblacion[i].aptObj[1]<<endl;
  }
}

/*
  Funcion que indica si un individuo domina a otro
si el primero domina al segundo retorna 1
si el segundo domina al primero retoruna -1
si son iguales retorna 0
si ninguno domina retorna 11
*/

int MOGAII::Domina(Individuo *I1,Individuo *I2){

  
  int anterior = 0;
  int mejor;
  double *ind1=I1->aptObj;
  double *ind2=I2->aptObj;
  /*
  if (ind1[0]<=ind2[0]&&ind1[1]<ind2[1] || ind1[0]<ind2[0]&&ind1[1]<=ind2[1])return 1;
  else if(ind1[0]>=ind2[0]&&ind1[1]>ind2[1] || ind1[0]>ind2[0]&&ind1[1]>=ind2[1])return -1;
  else return 0;
  */
  
  //  int a=restricciones(I1->genotipo);
  //  int b=restricciones(I2->genotipo);
  //  if(a<b)//el primero domina
  //    return 1;
  //  else if(b<a)//el segundo domina
  //    return -1;
  for(int i=0;i<nObjs;i++,ind1++,ind2++){
    if(*ind1 <*ind2)	mejor = 1;
    else if(*ind2<*ind1)mejor = -1;
    else mejor = 0;
    if(mejor!=anterior&&anterior!=0&&mejor!=0) return(11);
    if(mejor!=0) anterior = mejor;
  }
  return(anterior);
  
}

void MOGAII::AsignarJerarquia(){
	int i,j;
  NMayor=0;
  Individuo *pp=poblacion;

  for( i=0;i<M;i++)
    poblacion[i].rank=1;

  for( i=0;i<M;i++){
    for(int j=0;j<M;j++){
      switch(Domina(pp+i,pp+j)){
      case 11://nadie domina
      case 0://son iguales
	break;//no pasa nada
      case 1://el primero domina al segundo
	//poblacion[j].rank++;
	//if(NMayor<poblacion[j].rank)NMayor=poblacion[j].rank;
	break;
      case -1://el segundo domina al primero
	poblacion[i].rank++;
	if(NMayor<poblacion[i].rank)NMayor=poblacion[i].rank;
	break;
      }
    }
  }
  //  ImprimeValores();
  //exit(0);
}

void MOGAII::AsignarAptitudLineal(){
	int i,j,k,l;
  double *sumatoriaApt=new (double[M]);
  int *cantidadSumApt=new(int[M]);

  arrordenado=new(int[M]);

  for( i=0;i<M;i++){
    sumatoriaApt[i]=0;
    cantidadSumApt[i]=0;
    arrordenado[i]=0;
  }
  //ordenamiento del arreglo mediante llaves en arrordenado y calculo de la aptitud
  for( i=0,k=M+1,l=0;i<M;i++){
    for( j=0;j<M;j++){
      if(poblacion[j].rank==i+1){
	sumatoriaApt[poblacion[j].rank-1]+=pow(k,2);
	cantidadSumApt[poblacion[j].rank-1]++;
	k--;
	arrordenado[l]=j;
	l++;
      }
    }
  }

  //promediar la aptitud de los individuos con similar jerarqu'ia
  for(i=0;i<M;i++){
    poblacion[i].apt=sumatoriaApt[poblacion[i].rank-1]/cantidadSumApt[poblacion[i].rank-1];
    //    cout<<poblacion[arrordenado[i]].apt<<endl;
  }
}

void MOGAII::calculoSigmaShare(){
	int i,j;
  double *max=new double[nObjs];
  double *min=new double [nObjs];
  double sumatoria=0;
  for( i=0;i<nObjs;i++){
    min[i]=10*pow(10,5);
    max[i]=-10*pow(10,5);
  }
  for( i=0;i<M;i++){
    for( j=0;j<nObjs;j++){
      min[j]=(min[j]<poblacion[i].aptObj[j])?min[j]:poblacion[i].aptObj[j];
      max[j]=(max[j]>poblacion[i].aptObj[j])?max[j]:poblacion[i].aptObj[j];
    }
  }
  for( i=0;i<nObjs;i++)
    sumatoria+=pow(max[i]-min[i],2);
  q=3;
  sigmaShare=sumatoria/(M-1);

  //sigmaShare=sqrt(sumatoria)/pow(2*q,1/nObjs);
  
  //cout<<sigmaShare<<endl;
}


void MOGAII::EscalarApt(){

	int i,j;
  double *max=new(double[nObjs]);
  for( i=0;i<nObjs;i++)
    max[i]=-10000;
  for( i=0;i<M;i++)
    for(j=0;j<nObjs;j++)
      max[j]=(poblacion[i].aptObj[j]>max[j])?poblacion[i].aptObj[j]:max[j];
  for( i=0;i<M;i++)
    for( j=0;j<nObjs;j++)
      poblacion[i].aptObjEsc[j]=poblacion[i].aptObj[j]/max[j];
}

void MOGAII::AsignarAptitudCompartida(){
	int i,j,k;
  double *sumatoriaPhis=new(double[M]);
  for( i=0;i<M;i++)sumatoriaPhis[i]=0;

  for( i=0;i<M;i++){
    for( j=i+1;j<M;j++){
      double dist=0;
      for( k=0;k<nObjs;k++)
	dist+=pow(poblacion[i].aptObjEsc[k]-poblacion[j].aptObjEsc[k],2);
      dist=sqrt(dist);
      if(dist<sigmaShare){
	sumatoriaPhis[i]+=1-(dist/sigmaShare);
	sumatoriaPhis[j]+=1-(dist/sigmaShare);
      }
    }
    poblacion[i].apt/=sumatoriaPhis[i];
    poblacion[i].apt+=1/(poblacion[i].rank);
  }
}

void MOGAII::Algoritmo(){
int i;
  GenerarPoblacionAleatoria();
  Individuo *pp=poblacion;
    EvaluarPoblacion();

    AsignarJerarquia();
    AsignarAptitudLineal();
    calculoSigmaShare();
    EscalarApt();
    AsignarAptitudCompartida();
    for( i=0;i<M;i++)
      malla->FunPARETO(pp+i);

  for( i=0;i<Gmax;i++){
    Seleccion();
    NuevaPoblacion();
    CruzaYMutacion();
    NuevaGeneracion();

    AsignarJerarquia();
    AsignarAptitudLineal();
    calculoSigmaShare();
    EscalarApt();
    AsignarAptitudCompartida();

   for( i=0;i<M;i++)
    malla->FunPARETO(pp+i);
  }
  malla->ImprimeValores();
  //ImprimeValores();
}


int main(){
  double *linf,*lsup;
  int *pre,p=6;
  int nObjs=2;
  int nGenes=2;
  double pc=0.8;
  double pm=1.0/40.0;
  int gmax=200;
  int m=100;
  int tampareto=100;
  linf=new(double[nObjs]);
  linf[0]=0;
  linf[1]=0;
  lsup=new(double[nObjs]);
  lsup[0]=1;
  lsup[1]=1;
  pre=new(int[nObjs]);
  pre[0]=6;
  pre[1]=6;

  MOGAII moga2(gmax,m,pc,pm,nGenes,nObjs,linf,lsup,pre,tampareto);
  moga2.Algoritmo();
  cout<<"the program is over"<<endl;
  return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产一区二区三区| 亚洲视频狠狠干| 欧美激情一区在线| 一区二区三区不卡视频在线观看| 婷婷丁香久久五月婷婷| 国产超碰在线一区| 欧美一区午夜视频在线观看| 欧美高清在线精品一区| 亚洲成人资源在线| 色综合一区二区| 久久久91精品国产一区二区精品| 亚洲一二三级电影| 97精品视频在线观看自产线路二| 日韩三级精品电影久久久| 亚洲图片欧美综合| av在线免费不卡| 国产日韩欧美综合在线| 日本欧美久久久久免费播放网| 91久久精品一区二区二区| 中文字幕久久午夜不卡| 裸体一区二区三区| 9191久久久久久久久久久| 亚洲综合一区二区精品导航| 丁香六月综合激情| 久久精品亚洲一区二区三区浴池| 蜜桃视频一区二区| 日韩一区二区在线观看视频| 亚洲高清不卡在线观看| 在线中文字幕一区二区| 亚洲靠逼com| 91在线丨porny丨国产| 久久久久久黄色| 国产一区二区不卡老阿姨| 日韩欧美精品在线| 蜜桃传媒麻豆第一区在线观看| 欧美日韩mp4| 午夜精品视频一区| 欧美一区二区黄| 久久国产精品72免费观看| 精品久久久久香蕉网| 美脚の诱脚舐め脚责91 | 激情国产一区二区| 2017欧美狠狠色| 国产精品一二一区| 欧美激情在线观看视频免费| 成人va在线观看| 亚洲欧美日韩国产成人精品影院| 一本高清dvd不卡在线观看| 亚洲女性喷水在线观看一区| 欧美在线观看视频在线| 亚洲大片免费看| 精品日韩在线观看| 国产ts人妖一区二区| 亚洲欧美日韩系列| 欧美一区二区在线播放| 国产精品一级在线| 尤物视频一区二区| 日韩欧美一区中文| 成人av动漫网站| 亚洲123区在线观看| 久久久亚洲高清| 日本国产一区二区| 男女男精品网站| 日本一区二区三区免费乱视频 | 久久久精品国产免大香伊| 国产成人av一区| 亚洲午夜久久久久中文字幕久| 9191久久久久久久久久久| 国产精品资源在线观看| 一区二区三区日韩精品视频| 91精品国产综合久久国产大片| 国产精品一品二品| 亚洲超碰97人人做人人爱| 国产丝袜欧美中文另类| 欧美丝袜丝nylons| 国产91精品久久久久久久网曝门 | 欧洲另类一二三四区| 韩国av一区二区三区四区| 亚洲精品免费在线观看| 精品av久久707| 欧美午夜精品一区| 成人av资源在线观看| 久久精品国产免费看久久精品| 亚洲色欲色欲www| 精品久久久久香蕉网| 欧美三级韩国三级日本一级| 国产宾馆实践打屁股91| 蜜桃视频一区二区三区 | 中文字幕乱码久久午夜不卡| 欧美日韩在线免费视频| 成人激情校园春色| 欧美aaaaaa午夜精品| 一二三四社区欧美黄| 国产农村妇女精品| 久久综合久色欧美综合狠狠| 欧美日韩日日骚| 色综合天天综合色综合av| 国产一区美女在线| 激情欧美一区二区三区在线观看| 亚洲午夜羞羞片| 亚洲欧美欧美一区二区三区| 亚洲国产电影在线观看| 久久综合国产精品| 精品少妇一区二区三区在线播放 | 亚洲aⅴ怡春院| 亚洲精品高清视频在线观看| 国产区在线观看成人精品| 日韩精品一区二区三区中文精品| 欧美日韩精品福利| 欧美日韩五月天| 欧美午夜影院一区| 精品视频在线免费| 欧美午夜在线观看| 91福利国产成人精品照片| 91久久线看在观草草青青| 91蜜桃网址入口| av在线播放一区二区三区| av中文字幕不卡| 99国产精品久久久久久久久久久 | 亚洲精品中文字幕乱码三区| 中文字幕一区免费在线观看| 国产精品久久免费看| 国产精品每日更新在线播放网址| 国产亚洲欧美在线| 日本一区二区三区在线观看| 日本一区二区久久| 国产精品成人网| 亚洲激情第一区| 亚洲精品免费在线观看| 午夜精品免费在线观看| 麻豆精品视频在线观看免费| 狠狠色丁香九九婷婷综合五月| 蜜桃视频一区二区三区| 国产福利一区二区三区在线视频| 国产成人8x视频一区二区| 成人亚洲一区二区一| 91麻豆6部合集magnet| 欧美视频精品在线观看| 91精品国产综合久久久蜜臀粉嫩| 日韩精品一区二区三区在线观看| www国产成人| 亚洲视频在线观看三级| 婷婷久久综合九色综合绿巨人| 久久99久久久欧美国产| 99热精品一区二区| 8x8x8国产精品| 国产日韩欧美精品综合| 亚洲午夜免费福利视频| 激情综合色播五月| 91片在线免费观看| 日韩一区二区三区视频在线观看| 久久蜜臀精品av| 亚洲最新视频在线播放| 麻豆精品一区二区av白丝在线| 成人动漫精品一区二区| 制服丝袜激情欧洲亚洲| 欧美国产日韩亚洲一区| 午夜精品久久久久久久99水蜜桃 | 久久久99久久精品欧美| 亚洲精品中文在线影院| 国产做a爰片久久毛片| 欧美性色黄大片手机版| 国产视频一区二区在线观看| 亚洲综合免费观看高清完整版在线 | 精品视频在线免费观看| 国产日韩欧美在线一区| 丝袜亚洲另类欧美| 99久久婷婷国产综合精品| 欧美一区二区三区在线| 亚洲欧美日韩国产手机在线 | 亚洲成人动漫精品| 国产 欧美在线| 日韩欧美一级在线播放| 亚洲综合免费观看高清完整版在线| 韩国av一区二区三区在线观看| 欧美伊人久久久久久午夜久久久久| 久久久久国产精品麻豆ai换脸| 亚洲h动漫在线| 91亚洲精品久久久蜜桃网站| 久久久久综合网| 开心九九激情九九欧美日韩精美视频电影| 成人手机电影网| 日韩欧美国产小视频| 亚洲bt欧美bt精品777| 色婷婷综合久久久中文一区二区 | 丁香激情综合国产| 精品国产免费视频| 日韩专区在线视频| 欧美亚洲一区二区在线| 亚洲日穴在线视频| bt7086福利一区国产| 欧美大白屁股肥臀xxxxxx| 亚洲成人av福利| 欧美日韩在线电影| 亚洲777理论| 欧美日韩视频第一区| 五月综合激情婷婷六月色窝| 欧美日韩综合不卡| 亚洲一区二区三区三| 欧美视频日韩视频|