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

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

?? smo.cpp

?? 做回歸很好
?? CPP
字號:
#include "smo.h"


smo_c::smo_c(){
  n=0;
  sum=0;
  x=0;
  qp=0;
  lambda_eq=0;
  is_zero = 1e-10;
  max_allowed_error= 1e-3;
  max_iteration = 10000;
};


smo_c::smo_c(const SVMFLOAT new_is_zero, const SVMFLOAT new_max_allowed_error, const SVMINT new_max_iteration){
  smo_c();
  init(new_is_zero,new_max_allowed_error,new_max_iteration);
};


void smo_c::init(const SVMFLOAT new_is_zero, const SVMFLOAT new_max_allowed_error, const SVMINT new_max_iteration){
  is_zero = new_is_zero;
  max_allowed_error = new_max_allowed_error;
  max_iteration = new_max_iteration;
};


void smo_c::set_max_allowed_error(SVMFLOAT new_max_allowed_error){
  if(new_max_allowed_error>0){
    max_allowed_error = new_max_allowed_error;
  };
};


inline
SVMFLOAT smo_c::x2tox1(const SVMFLOAT x2, const int id, 
		       const SVMFLOAT A1, const SVMFLOAT b){
  SVMFLOAT x1;
  if(id){
    x1 = -x2;
  }
  else{
    x1 = x2;
  };
  if(A1>0){
    x1+=b;
  }
  else{
    x1 -= b;
  };
  return x1;
};


inline
SVMFLOAT smo_c::x1tox2(const SVMFLOAT x1, const int id, 
		       const SVMFLOAT A2, const SVMFLOAT b){
  SVMFLOAT x2;
  if(id){
    x2 = -x1;
  }
  else{
    x2 = x1;
  };
  if(A2>0){
    x2+=b;
  }
  else{
    x2 -= b;
  };
  return x2;
};


inline
void smo_c::simple_solve(SVMFLOAT* x1, SVMFLOAT* x2,
			 const SVMFLOAT H1, const SVMFLOAT H2,
			 const SVMFLOAT c0, 
			 const SVMFLOAT c1, const SVMFLOAT c2,
			 const SVMFLOAT A1, const SVMFLOAT A2,
			 const SVMFLOAT l1, const SVMFLOAT l2,
			 const SVMFLOAT u1, const SVMFLOAT u2){
  /*
   * H1*x1^2+H2*x2^2+c0*x1*x2+c1*x1+c2*x2 -> min
   *
   * w.r.t.: A1*x1+A2*x2=const
   *         l1 <= x1 <= u1
   *         l2 <= x2 <= u2
   *
   */

  SVMFLOAT t;

  SVMFLOAT den;
  den = H1+H2;
  if(((A1 > 0) && (A2 > 0)) ||
     ((A1 < 0) && (A2 < 0))){
    den -= c0;
  }
  else{
    den += c0;
  };
  den*=2;
  if(den != 0){
    SVMFLOAT num;
    num = -2*H1*(*x1)-(*x2)*c0-c1;
    if(A1<0){
      num = -num;
    };
    if(A2>0){
      num += 2*H2*(*x2)+(*x1)*c0+c2;
    }
    else{
      num -= 2*H2*(*x2)+(*x1)*c0+c2;
    };

    t = num/den;
    
    SVMFLOAT up;
    SVMFLOAT lo;
    if(A1>0){
      lo = l1-(*x1);
      up = u1-(*x1);
    }
    else{
      lo = (*x1)-u1;
      up = (*x1)-l1;
    };
    if(A2<0){
      if(l2-(*x2) > lo) lo = l2-(*x2);
      if(u2-(*x2) < up) up = u2-(*x2);
    }
    else{
      if((*x2)-l2 < up) up =(*x2)-l2;
      if((*x2)-u2 > lo) lo = (*x2)-u2;
    };
    
    if(t < lo){
      t = lo;
    };
    if(t > up){
      t = up;  
    };
  }
  else{
    // den = 0 => linear target function => set x at bound
    SVMFLOAT factor;
    factor = 2*H1*(*x1)+(*x2)*c0+c1;
    if(A1<0){
      factor = -factor;
    };
    if(A2>0){
      factor -= 2*H2*(*x2)+(*x1)*c0+c2;
    }
    else{
      factor += 2*H2*(*x2)+(*x1)*c0+c2;
    };
    if(factor>0){
      // t = lo
      if(A1>0){
	t = l1-(*x1);
      }
      else{
	t = (*x1)-u1;
      };
      if(A2<0){
	if(l2-(*x2) > t) t = l2-(*x2);
      }
      else{
	if((*x2)-u2 > t) t = (*x2)-u2;
      };
    }
    else{
      // t = up
      if(A1>0){
	t = u1-(*x1);
      }
      else{
	t = (*x1)-l1;
      };
      if(A2<0){
	if(u2-(*x2) < t) t = u2-(*x2);
      }
      else{
	if((*x2)-l2 < t) t =(*x2)-l2;
      };
    };
  };

  // calc new x from t
  if(A1>0){
    (*x1) += t;
  }
  else{
    (*x1) -= t;
  };
  if(A2>0){
    (*x2) -= t;
  }
  else{
    (*x2) += t;
  };

  if(*x1-l1 <= is_zero){
    *x1 = l1; 
  }
  else if(*x1-u1 >= -is_zero){
    *x1 = u1;
  };
  if(*x2-l2 <= is_zero){
    *x2 = l2; 
  }
  else if(*x2-u2 >= -is_zero){
    *x2 = u2;
  };

};


int smo_c::minimize_ij(const SVMINT i, const SVMINT j){
  // minimize xi, xi with simple_solve

  SVMFLOAT sum_i; // sum_k Hik x_k
  SVMFLOAT sum_j;

  // init sum_i,j
  sum_i=sum[i];
  sum_j=sum[j];
  sum_i -= qp->H[i*(n+1)]*x[i];
  sum_i -= qp->H[i*n+j]*x[j];
  sum_j -= qp->H[j*n+i]*x[i];
  sum_j -= qp->H[j*(n+1)]*x[j];
  sum_i += qp->c[i];
  sum_j += qp->c[j];

  SVMFLOAT old_xi = x[i];
  SVMFLOAT old_xj = x[j];


//   if(qp->H[i*(n+1)] * qp->H[j*(n+1)] < qp->H[i*n+j] * qp->H[i*n+j]){
//     cout<<"ERROR: ij not PSD:"<<endl;
//     cout<<qp->H[i*(n+1)]<<"*"<<qp->H[j*(n+1)]<<"<"<<qp->H[i*n+j]<<"^2"<<endl;
//     //    exit(1);
//   };


  simple_solve(&(x[i]), &(x[j]),
	       qp->H[i*(n+1)]/2, qp->H[j*(n+1)]/2,
	       qp->H[i*n+j],
	       sum_i, sum_j,
	       qp->A[i], qp->A[j],
	       qp->l[i], qp->l[j],
	       qp->u[i], qp->u[j]);

  int ok;

  SVMFLOAT target;
  target = (old_xi-x[i])*(qp->H[i*(n+1)]/2*(old_xi+x[i])+sum_i)
    +(old_xj-x[j])*(qp->H[j*(n+1)]/2*(old_xj+x[j])+sum_j)
    +qp->H[i*n+j]*(old_xi*old_xj-x[i]*x[j]);
  if(target < 0){
    //       cout<<"increase on SMO: "<<target<<endl;
    x[i] = old_xi;
    x[j] = old_xj;
    old_xi=0;
    old_xj=0;
    ok=0;
  }
  else{
    old_xi-=x[i];
    old_xj-=x[j];
    SVMINT k;
    for(k=0;k<n;k++){
      sum[k]-=qp->H[i*n+k]*old_xi;
      sum[k]-=qp->H[j*n+k]*old_xj;
    };
    ok=1;
  };

  if((abs(old_xi) > is_zero) || (abs(old_xj) > is_zero)){
    ok =1;
  }
  else{
    ok=0;
  };
  return ok;
};


void smo_c::calc_lambda_eq(){
  SVMFLOAT lambda_eq_sum = 0;
  SVMINT count = 0;
  SVMINT i;
  for(i=0;i<qp->n;i++){
    if((x[i] > qp->l[i]) && (x[i]<qp->u[i])){
      if(qp->A[i]>0){
	lambda_eq_sum-= (sum[i]+qp->c[i]);
      }
      else{
	lambda_eq_sum+= sum[i]+qp->c[i];
      };
      count++;
    };
  };
  if(count>0){
    lambda_eq_sum /= (SVMFLOAT)count;
  }
  else{
    SVMFLOAT lambda_min = -infinity;
    SVMFLOAT lambda_max = infinity;
    SVMFLOAT nabla;
    for(i=0;i<qp->n;i++){
      nabla = sum[i]+qp->c[i];
      if(x[i] <= qp->l[i]){
	// lower bound
	if(qp->A[i]>0){
	  if(-nabla > lambda_min){
	    lambda_min = -nabla;
	  };
	}
	else{
	  if(nabla < lambda_max){
	    lambda_max = nabla;
	  };
	};
      }
      else{
	// upper bound
	if(qp->A[i]>0){
	  if(-nabla < lambda_max){
	    lambda_max = -nabla;
	  };
	}
	else{
	  if(nabla > lambda_min){
	    lambda_min = nabla;
	  };
	};
      };
    };
    if(lambda_min > -infinity){
      if(lambda_max < infinity){
	lambda_eq_sum = (lambda_max+lambda_min)/2;
      }
      else{
	lambda_eq_sum = lambda_min;
      };
    }
    else{
      lambda_eq_sum = lambda_max;
    };
  };
  lambda_eq = lambda_eq_sum;
};


void smo_c::set_qp(quadratic_program* the_qp){
  qp = the_qp;
  if(qp->n != n){
    n = qp-> n;
    delete []sum;
    sum = new SVMFLOAT[n];
  };
};


int smo_c::smo_solve(quadratic_program* the_qp,SVMFLOAT* the_x){
  int error=0;

  x = the_x;
  set_qp(the_qp);

  SVMINT i;
  SVMINT j;
  for(i=0;i<n;i++){
    sum[i] = 0;
    for(j=0;j<n;j++){
      sum[i] += qp->H[i*n+j]*x[j];
    };
  };

  SVMINT iteration=0;
  SVMFLOAT this_error;
  SVMFLOAT this_lambda_eq;
  SVMFLOAT max_lambda_eq=0;
  SVMFLOAT max_error = -infinity;
  SVMFLOAT min_error = infinity;
  SVMINT max_i = 0;
  SVMINT min_i = 1;
  SVMINT old_min_i=-1;
  SVMINT old_max_i=-1;
  while(1){
    // get i with largest KKT error
    if(! error){
      //      cout<<"l";
      calc_lambda_eq();
      max_error = -infinity;
      min_error = infinity;
      max_i = 0;
      min_i = 1;
      // heuristic for i
      for(i=0;i<n;i++){
	if(x[i] <= qp->l[i]){
	  // at lower bound
	  this_error = -sum[i]-qp->c[i];
	  if(qp->A[i]>0){
	    this_lambda_eq = this_error;
	    this_error -= lambda_eq;
	  }
	  else{
	    this_lambda_eq = -this_error;
	    this_error += lambda_eq;
	  };
	}
	else if(x[i] >= qp->u[i]){
	  // at upper bound
	  this_error = sum[i]+qp->c[i];
	  if(qp->A[i]>0){
	    this_lambda_eq = -this_error;
	    this_error += lambda_eq;
	  }
	  else{
	    this_lambda_eq = this_error;
	    this_error -= lambda_eq;
	  };
	}
	else{
	  // between bounds
	  this_error = sum[i]+qp->c[i];
	  if(qp->A[i]>0){
	    this_lambda_eq = -this_error;
	    this_error += lambda_eq;
	  }
	  else{
	    this_lambda_eq = this_error;
	    this_error -= lambda_eq;
	  };
	  if(this_error<0) this_error = -this_error;
	}
	if((this_error>max_error) && (old_max_i != i)){
	  max_i = i;
	  max_error = this_error;
	  max_lambda_eq = this_lambda_eq;
	};
	if((this_error<=min_error) && (i != old_min_i)){
	  min_i = i;
	  min_error = this_error;
	};
      };
      old_max_i = max_i;
      old_min_i = min_i;
    }
    else{
      // heuristic didn't work
      max_i = (max_i+1)%n;
      min_i = (max_i+1)%n;
    };

    // problem solved?
    if((max_error<=max_allowed_error) && (iteration>2)){
      error=0;
      break;
    };

    ////////////////////////////////////////////////////////////

    // new!!! find element with maximal diff to max_i
    // loop would be better
    SVMFLOAT max_diff = -1;
    SVMFLOAT this_diff;
    int n_up; // not at upper bound
    int n_lo;
    if(x[max_i] <= qp->l[max_i]){
      // at lower bound
      n_lo = 0;
    }
    else{
      n_lo = 1;
    };
    if(x[max_i] >= qp->u[max_i]){
      // at lower bound
      n_up=0;
    }
    else{
      n_up=1;
    };

    min_i = (max_i+1)%n;
    for(i=0;i<n;i++){
      if((i != max_i) &&
	 (n_up || (x[i] < qp->u[i])) &&
	 (n_lo || (x[i] > qp->l[i]))){
	if(x[i] <= qp->l[i]){
	  // at lower bound
	  this_error = -sum[i]-qp->c[i];
	  if(qp->A[i]<0){
	    this_error = -this_error;
	  };
	}
	else if(x[i] >= qp->u[i]){
	  // at upper bound
	  this_error = sum[i]+qp->c[i];
	  if(qp->A[i]>0){
	    this_error = -this_error;
	  };
	}
	else{
	  // between bounds
	  this_error = sum[i]+qp->c[i];
	  if(qp->A[i]>0){
	    this_error = -this_error;
	  };
	};
	this_diff = abs(this_error - max_lambda_eq);
	if(this_diff>max_diff){
	  max_diff = this_diff;
	  min_i = i;
	};
      };
    };


    ////////////////////////////////////////////////////////////

    // optimize
    SVMINT it=1;
    while((0 == minimize_ij(min_i,max_i)) && (it<n)){
      it++;
      min_i = (min_i+1)%n;
      if(min_i == max_i){
      	min_i = (min_i+1)%n;
      };
    };
    if(it==n){
      error=1;
    }
    else{
      error=0;
    };

    // time up?
    iteration++;
    if(iteration>max_iteration){
      calc_lambda_eq();
      error+=1;
      break;
    };
  };

  return error;
};


SVMFLOAT smo_c::get_lambda_eq(){
  return lambda_eq;
};

/**
 *
 *  nuSVM
 *
 **/

SVMFLOAT smo_c::get_lambda_nu(){
  return lambda_nu;
};


void smo_c::calc_lambda_nu(){
  SVMFLOAT lambda_pos_sum = 0;
  SVMFLOAT lambda_neg_sum = 0;
  SVMINT countpos = 0;
  SVMINT countneg = 0;
  SVMINT i;
  for(i=0;i<qp->n;i++){
    if((x[i] > qp->l[i]) && (x[i]<qp->u[i])){
      if(qp->A[i]>0){
	lambda_pos_sum += sum[i]+qp->c[i];
	countpos++;
      }
      else{
	lambda_neg_sum += sum[i]+qp->c[i];
	countneg++;
      };
    };
  };
  if((countpos>0) && (countneg>0)){
    lambda_pos_sum /= (SVMFLOAT)countpos;
    lambda_neg_sum /= (SVMFLOAT)countneg;
    lambda_eq = -(lambda_pos_sum-lambda_neg_sum)/2;
    lambda_nu = -(lambda_pos_sum+lambda_neg_sum)/2;
  }
  else{
    if(countpos>0){
      lambda_eq = -lambda_pos_sum / (SVMFLOAT)countpos;
      lambda_eq /= 2;
      lambda_nu = lambda_eq;
    }
    else if(countneg>0){
      lambda_eq = -lambda_neg_sum / (SVMFLOAT)countneg;
      lambda_eq /= 2;
      lambda_nu = lambda_eq;
    }
    else{
      calc_lambda_eq();
      lambda_nu=0;
    };
  };
};


int smo_c::smo_solve_const_sum(quadratic_program* the_qp,SVMFLOAT* the_x){
  // solve optimization problem keeping sum x_i fixed
  int error=0;

  x = the_x;
  set_qp(the_qp);

  SVMFLOAT target=0;
  SVMINT i;
  SVMINT j;
  for(i=0;i<n;i++){
    sum[i] = 0;
    for(j=0;j<n;j++){
      sum[i] += qp->H[i*n+j]*x[j];
    };
    target += x[i]*sum[i]/2;
    target += qp->c[i]*x[i];
  };

  SVMINT iteration=0;
  SVMFLOAT this_error;
  SVMFLOAT max_error = -infinity;
  SVMFLOAT min_error_pos = infinity;
  SVMFLOAT min_error_neg = infinity;
  SVMINT max_i = 0;
  SVMINT min_i = 1;
  SVMINT min_i_pos = 1;
  SVMINT min_i_neg = 1;
  SVMINT old_min_i=-1;
  SVMINT old_max_i=-1;
  int use_sign=1;
  while(1){
    // get i with largest KKT error
    if(! error){
      use_sign = -use_sign;
      calc_lambda_nu();
      max_error = -infinity;
      min_error_pos = infinity;
      min_error_neg = infinity;
      max_i = (old_max_i+1)%n;
      // heuristic for i
      for(i=0;i<n;i++){
	if(x[i] <= qp->l[i]){
	  // at lower bound
	  this_error = -sum[i]-qp->c[i]-lambda_nu;
	  if(qp->A[i]>0){
	    this_error -= lambda_eq;
	  }
	  else{
	    this_error += lambda_eq;
	  };
	}
	else if(x[i] >= qp->u[i]){
	  // at upper bound
	  this_error = sum[i]+qp->c[i]+lambda_nu;
	  if(qp->A[i]>0){
	    this_error += lambda_eq;
	  }
	  else{
	    this_error -= lambda_eq;
	  };
	}
	else{
	  // between bounds
	  this_error = sum[i]+qp->c[i]+lambda_nu;
	  if(qp->A[i]>0){
	    this_error += lambda_eq;
	  }
	  else{
	    this_error -= lambda_eq;
	  };
	  if(this_error<0) this_error = -this_error;
	}
	if(this_error>max_error){
	  if((old_max_i != i) && (qp->A[i] == use_sign)){
	    // look for specific sign
	    max_i = i;
	  };
	  max_error = this_error;
	};
	if((qp->A[i]>0) && (this_error<=min_error_pos) && (i != old_min_i)){
	  min_i_pos = i;
	  min_error_pos = this_error;
	};
	if((qp->A[i]<0) && (this_error<=min_error_neg) && (i != old_min_i)){
	  min_i_neg = i;
	  min_error_neg = this_error;
	};
      };

      old_max_i = max_i;
      // look for minimal error with same sign as max_i
      if(qp->A[max_i]>0){
	min_i = min_i_pos;
      }
      else{
	min_i = min_i_neg;
      };
      old_min_i = min_i;
    }
    else{
      // heuristic didn't work
      max_i = (max_i+1)%n;
      min_i = (max_i+1)%n;
    };

    // problem solved?
    if((max_error<=max_allowed_error) && (iteration > 2)){
      error=0;
      break;
    };

    // optimize
    SVMINT it=1; // n-1 iterations
    error=1;
    while((error) && (it<n)){
      if(qp->A[min_i] == qp->A[max_i]){
	error = ! minimize_ij(min_i,max_i);
      };
      it++;
      min_i = (min_i+1)%n;
      if(min_i == max_i){
      	min_i = (min_i+1)%n;
      };
    };
    // time up?
    iteration++;
    if(iteration>max_iteration){
      calc_lambda_nu();
      error+=1;
      break;
    };
  };

  SVMFLOAT ntarget=0;
  for(i=0;i<qp->n;i++){
    for(j=0;j<qp->n;j++){
      ntarget += x[i]*qp->H[i*qp->n+j]*x[j]/2;
    };
    ntarget += qp->c[i]*x[i];
  };

  if(target<ntarget){
    error++;
  };

  return error;
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品成人综合色在线婷婷| 91豆麻精品91久久久久久| 五月天丁香久久| 欧美96一区二区免费视频| 久久99精品国产麻豆婷婷| 久久国产综合精品| 99久久综合狠狠综合久久| 91啪在线观看| 欧美精品 日韩| 国产欧美日韩亚州综合| 依依成人精品视频| 老鸭窝一区二区久久精品| 国产成人福利片| 欧美剧情电影在线观看完整版免费励志电影| 欧美丰满一区二区免费视频| 久久久久久日产精品| 亚洲综合色噜噜狠狠| 国产专区欧美精品| 欧洲一区在线电影| 国产精品情趣视频| 精品一区二区综合| 欧美日韩国产免费一区二区| 国产欧美日韩卡一| 精品一区二区日韩| 欧美精品1区2区| 午夜精品福利在线| 欧美亚洲综合色| 亚洲精品成a人| 97se亚洲国产综合在线| 久久先锋影音av鲁色资源| 石原莉奈在线亚洲二区| 91福利视频在线| 夜色激情一区二区| 欧美在线视频不卡| 亚洲影视在线播放| 欧美日韩国产一级| 日韩激情一二三区| 日韩免费一区二区三区在线播放| 亚洲国产精品综合小说图片区| 91黄色激情网站| 亚洲第一福利一区| 日韩三级视频在线观看| 韩国av一区二区三区| 亚洲午夜日本在线观看| 欧美午夜精品免费| 日日夜夜免费精品视频| 69久久99精品久久久久婷婷 | 国产精品69毛片高清亚洲| 国产亚洲va综合人人澡精品| 国产一区高清在线| 一区二区三区.www| 精品欧美乱码久久久久久| 久久99久久精品欧美| 亚洲国产精华液网站w| 欧美亚洲国产怡红院影院| 日韩不卡一区二区三区| 欧美va亚洲va香蕉在线| 色综合婷婷久久| 精品写真视频在线观看 | 91久色porny | 久久综合九色欧美综合狠狠 | 亚洲激情综合网| 精品国产一区二区三区忘忧草| 99久久免费精品高清特色大片| 日韩制服丝袜av| 亚洲自拍与偷拍| 亚洲免费观看高清完整版在线观看| 制服视频三区第一页精品| 色综合激情五月| 91浏览器打开| 91蜜桃视频在线| 欧美日韩国产成人在线91| 99国产精品视频免费观看| 韩国成人精品a∨在线观看| 日韩成人dvd| 免费成人av在线| 麻豆精品久久久| 另类小说一区二区三区| 麻豆国产一区二区| 久久精品国产亚洲a| 男男gaygay亚洲| 麻豆91精品91久久久的内涵| 国产福利一区二区三区视频在线| 国产在线播放一区二区三区| 男人的天堂亚洲一区| 免费的成人av| 福利一区福利二区| 97精品视频在线观看自产线路二| 成人午夜精品在线| 99视频一区二区三区| 91国偷自产一区二区使用方法| 91麻豆免费看| 91精品国产色综合久久ai换脸 | 波多野结衣的一区二区三区| 成人app在线观看| 久久综合色综合88| 玉米视频成人免费看| 成人免费毛片片v| 欧美成人免费网站| 国产视频一区不卡| 亚洲激情一二三区| 久久精品国产99久久6| 成人h精品动漫一区二区三区| 成人av网址在线| 337p亚洲精品色噜噜| 国产欧美日韩一区二区三区在线观看 | 日韩美女视频在线| 亚洲免费伊人电影| 91性感美女视频| 久久久久久久电影| 蜜桃免费网站一区二区三区| 成熟亚洲日本毛茸茸凸凹| 日韩一本二本av| 日本大胆欧美人术艺术动态| 欧美综合一区二区三区| 亚洲国产成人私人影院tom| 亚洲va国产天堂va久久en| 久久精品国产99国产精品| 水野朝阳av一区二区三区| 99久精品国产| 一区二区三区在线影院| 五月天丁香久久| 欧美日韩一卡二卡三卡 | 在线日韩国产精品| 欧美精品一区男女天堂| 亚洲国产日日夜夜| 99vv1com这只有精品| 自拍偷拍欧美精品| 色婷婷综合久色| 国产日韩精品久久久| 国产无一区二区| 色哟哟一区二区在线观看| 日韩亚洲国产中文字幕欧美| 亚洲综合999| 欧美精品v日韩精品v韩国精品v| 国产目拍亚洲精品99久久精品 | aaa欧美色吧激情视频| 国产日韩欧美不卡| 色香蕉久久蜜桃| 强制捆绑调教一区二区| 久久久久亚洲综合| 欧美性大战久久久| 粉嫩在线一区二区三区视频| 色天天综合色天天久久| 一区二区三区四区五区视频在线观看 | 免费观看成人鲁鲁鲁鲁鲁视频| 欧美精品精品一区| 青青草原综合久久大伊人精品优势| 宅男在线国产精品| 日本不卡不码高清免费观看| 欧美一区二区三区在线看| 黑人精品欧美一区二区蜜桃| 久久久天堂av| 久久精品国产亚洲aⅴ| 日本一区二区视频在线观看| 99国产精品国产精品毛片| 亚洲成人免费看| 久久人人97超碰com| 欧美性受xxxx黑人xyx| 极品销魂美女一区二区三区| 一区在线观看免费| 日韩视频在线一区二区| 91污在线观看| 国产精品一二三| 午夜精品一区二区三区三上悠亚| 精品久久国产97色综合| 91久久奴性调教| 成人av网站在线观看免费| 轻轻草成人在线| 亚洲精品成人a在线观看| 久久久蜜臀国产一区二区| 欧美日韩中文字幕精品| 99久久婷婷国产综合精品电影| 久草在线在线精品观看| 婷婷一区二区三区| 亚洲柠檬福利资源导航| 中文字幕亚洲欧美在线不卡| 精品国产一区a| 久久综合九色综合97婷婷女人| 67194成人在线观看| 欧美日韩欧美一区二区| 欧美日韩情趣电影| 欧美肥妇毛茸茸| 777xxx欧美| 久久久亚洲综合| 欧美成人精品3d动漫h| 日韩一区二区在线看| 91精品综合久久久久久| 在线观看一区不卡| 精品1区2区3区| 日韩亚洲电影在线| 精品999久久久| 亚洲私人黄色宅男| 免费观看成人av| 99久久免费视频.com| 色综合av在线| 日韩精品最新网址| 国产精品人人做人人爽人人添| 久久久久高清精品| 亚洲日本乱码在线观看|