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

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

?? loqo_solver.cpp

?? 支持向量分類算法在linux操作系統下的是實現
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
      ierr = PLA_Obj_local_buffer(x_loc_view, (void **) &addr_buf);      CheckError(ierr);      alpha_new = (LOQOfloat *) addr_buf;      ierr = PLA_Obj_local_buffer(yy_loc, (void **) &addr_buf);      CheckError(ierr);      dual = (LOQOfloat *) addr_buf;      ierr = PLA_Obj_local_buffer(dist_loc_view, (void **) &addr_buf);      dist_ = (LOQOfloat *) addr_buf;      ++iter;      // Setup problem for parallel LOQO solver      time = MPI_Wtime();      info("setup_problem...");      setup_problem(work_set, not_work_set);      info("done.\n"); info_flush();      info("setup_up...");      setup_up(work_set);      info("done.\n"); info_flush();      info("setup_low...");      setup_low();      info("done.\n"); info_flush();      //print_problem();      time = MPI_Wtime() - time;      problem_setup_time += time;      // Compute obj before optimization      info("Computing obj before..."); info_flush();      obj_before = 0.0;      int start_i = 0;      for(int i=0; i<n; ++i, ++start_i)	{	  if(work_set[i] >= l_low_loc)	    break;	}      //      for(int i=n_low_loc; i<n_up_loc; ++i)      for(int i=start_i; work_set[i] < l_up_loc && i<n; ++i)	{	  //obj_before += alpha[work_set[i]]*c[i-n_low_loc];	  obj_before += alpha[work_set[i]]*c[i-start_i]; 	  for(int j=0; j<n; ++j)//  	    obj_before += 0.5*alpha[work_set[i]]*Q_bb[local_n*j+(i-n_low_loc)]*// 	      alpha[work_set[j]]; 	    obj_before += 0.5*alpha[work_set[i]]*Q_bb[num_rows*j+(i-start_i)]*	      alpha[work_set[j]];	}      // Get local changes for obj_before from other processors      double obj_before_loc=0.0;      double obj_before_other=0.0;      for(int i=0; i<size; ++i)	{	  if(i == rank)	    ierr = MPI_Bcast(&obj_before, 1, MPI_DOUBLE, i, comm);	  else	    {	      ierr = MPI_Bcast(&obj_before_loc, 1, MPI_DOUBLE, i, comm);	      obj_before_other += obj_before_loc;	    }	}      obj_before += obj_before_other;      printf("obj before = %g\n", obj_before); fflush(stdout);      info("done.\n"); info_flush();      // Run solver      time = MPI_Wtime();      status = solve_inner(work_set);      time = MPI_Wtime() - time;      inner_solver_time += time;      // Update gradient.      time = MPI_Wtime();      int *nz = new int[n];      for(int i=0; i<n; ++i)	{	  delta_alpha[i] = alpha_new[i] - alpha[work_set[i]];	  if(fabs(delta_alpha[i]) > TOL_ZERO)	    nz[i] = 1; 	  else	    nz[i] = 0;	}      info("Updating G_b..."); info_flush();      // Compute G_b      for(int i=start_i; work_set[i] < l_up_loc && i<n; ++i)      // for(int i=n_low_loc; i<n_up_loc; ++i)	{ 	  for(int j=0; j<n; ++j)	    { 	      if(nz[j])// 		G[work_set[i]] += Q_bb[j*local_n+(i-n_low_loc)] * // 		  delta_alpha[j];		G[work_set[i]] += Q_bb[j*num_rows+(i-start_i)] * 		  delta_alpha[j];	    }	}      info("done.\n"); info_flush();      // Update local part of the parallel cache status      for(int i=0; i<l; ++i)	{	  if(Q.is_cached(i))	    p_cache_status[rank*size + i] = CACHED;	  else	    p_cache_status[rank*size + i] = NOT_CACHED;	}      // Synchronize parallel cache status      for(int k=0; k<size; ++k)	{	  ierr = MPI_Bcast(&p_cache_status[k*size], l, MPI_CHAR, k, comm); 	  CheckError(ierr);	  	}//       printf("p_cache_status %d =",rank);//       for(int k=0; k<size; ++k)// 	{// 	  for(int i=0; i<l; ++i)// 	    {// 	      printf(" %d", p_cache_status[k*size+i]);// 	    }// 	  printf("\n");// 	}//       printf("\n");      // Smart parallel cache handling      int *idx_cached = new int[n];      int *idx_not_cached = new int[n];      int count_cached = 0; int count_not_cached = 0;      int next_k = 0; bool found = false;      int next_not_cached = 0;      for(int i=0; i<n; ++i)	{	  if(nz[i])	    {	      for(int k=next_k; !found && k<size; ++k)		{		  if(p_cache_status[k*size + work_set[i]] == CACHED)		    {		      if(k == rank) // Do we have it?			{			  idx_cached[count_cached] = i;			  ++count_cached;			}		      found = true;		      next_k = k == size-1 ? 0 : k+1;		    }		}	      for(int k=0; !found && k<next_k; ++k)		{		  if(p_cache_status[k*size + work_set[i]] == CACHED)		    {		      if(k == rank) // Do we have it?			{			  idx_cached[count_cached] = i;			  ++count_cached;			}		      found = true;		      next_k = k == size-1 ? 0 : k+1;		    } 		}	      if(!found) // not in any cache		{		  if(rank == next_not_cached) // Do we have to compute it?		    {		      idx_not_cached[count_not_cached] = i;		      ++count_not_cached;		    }		  next_not_cached = next_not_cached == size-1 ? 0 : 		    next_not_cached + 1;		}	      found = false;	    } // if(nz[i])	}      info("Updating G_n..."); info_flush();      // Compute G_n      for(int j=0; j<lmn; ++j)	G_n[j] = 0;//       printf("idx_cached %d =", rank);//       for(int i=0; i<count_cached; ++i)// 	printf(" %d", idx_cached[i]);//       printf("\n");//       printf("idx_not_cached %d =", rank);//       for(int i=0; i<count_not_cached; ++i)// 	printf(" %d", idx_not_cached[i]);//       printf("\n");      // First update the cached part...      for(int i=0; i<count_cached; ++i)	{	  const Qfloat *Q_i = Q.get_Q_subset(work_set[idx_cached[i]],					      not_work_set,lmn);	  for(int j=0; j<lmn; ++j)	    G_n[j] += Q_i[not_work_set[j]] * delta_alpha[idx_cached[i]];	}      // now update the non-cached part      for(int i=0; i<count_not_cached; ++i)	{	  const Qfloat *Q_i = Q.get_Q_subset(work_set[idx_not_cached[i]],					      not_work_set,lmn);	  for(int j=0; j<lmn; ++j)	    G_n[j] += Q_i[not_work_set[j]] * delta_alpha[idx_not_cached[i]];	}//       for(int i=start_i; work_set[i] < l_up_loc && i<n; ++i)// 	 //      for(int i=n_low_loc; i<n_up_loc; ++i)// 	{// 	  if(nz[i]){// 	    const Qfloat *Q_i = Q.get_Q_subset(work_set[i],not_work_set,lmn);// 	    for(int j=0; j<lmn; ++j)// 	      G_n[j] += Q_i[not_work_set[j]] * delta_alpha[i];// 	  }// 	}            info("done.\n"); info_flush();      delete[] idx_cached;      delete[] idx_not_cached;      delete[] nz;      time = MPI_Wtime() - time;      gradient_updating_time += time;      // Synchronize gradient with other processors      info("Synchronizing gradient..."); info_flush();      sync_gradient(work_set, not_work_set);      info("done.\n"); info_flush();//       info("synced G proc[%d]=",rank);//       for(int i=0; i<l; ++i)// 	info(" %g", G[i]);//       info("\n");//       info_flush();      // Update alpha      for(int i=0; i<n; ++i)	{	  alpha[work_set[i]] = alpha_new[i];	  update_alpha_status(work_set[i]);	}    } // while(1)  // Calculate rho  si->rho = calculate_rho();  // Calculate objective value  {    double v = 0;    int i;    for(i=0;i<l;i++)      v += alpha[i] * (G[i] + b[i]);    si->obj = v/2;  }  // Put back the solution  {//     printf("alpha = ");    for(int i=0;i<l;i++)      {	alpha_[i] = alpha[i];// 	printf(" %g\n",alpha[i]);      }//     printf("\n");  }  si->upper_bound_p = Cp;  si->upper_bound_n = Cn;  info("\noptimization finished, #iter = %d\n",iter);  total_time = MPI_Wtime() - total_time;  // print timing statistics  if(rank == 0)    {      info("Total opt. time = %lf\n", total_time); info_flush();      info("Problem setup time = %lf (%lf%%)\n", problem_setup_time,	   problem_setup_time/total_time*100); info_flush();      info("Inner solver time = %lf (%lf%%)\n", inner_solver_time,	   inner_solver_time/total_time*100); info_flush();      info("Gradient updating time = %lf (%lf%%)\n", gradient_updating_time,	   gradient_updating_time/total_time*100); info_flush();    }  // Clean up  delete[] b;  delete[] y;  delete[] alpha;  delete[] alpha_status;  delete[] delta_alpha;  delete[] work_status;  delete[] work_count;  delete[] work_set;  delete[] not_work_set;  delete[] G;  delete[] Q_bb;  delete[] c;  delete[] up;  delete[] low;  delete[] a;  delete[] d;  delete[] l_low;  delete[] l_up;  delete[] n_low;  delete[] n_up;  delete[] lmn_low;  delete[] lmn_up;  delete[] G_n;  delete[] p_cache_status;  ierr = PLA_Obj_free(&Q_bb_global); CheckError(ierr);  ierr = PLA_Obj_free(&c_global); CheckError(ierr);  ierr = PLA_Obj_free(&up_global); CheckError(ierr);  ierr = PLA_Obj_free(&low_global); CheckError(ierr);  ierr = PLA_Obj_free(&a_global); CheckError(ierr);  ierr = PLA_Obj_free(&d_global); CheckError(ierr);  ierr = PLA_Obj_free(&x_loc); CheckError(ierr);  ierr = PLA_Obj_free(&x); CheckError(ierr);  ierr = PLA_Obj_free(&g); CheckError(ierr);  ierr = PLA_Obj_free(&t); CheckError(ierr);  ierr = PLA_Obj_free(&yy); CheckError(ierr)  ierr = PLA_Obj_free(&yy_loc); CheckError(ierr);  ierr = PLA_Obj_free(&z); CheckError(ierr);  ierr = PLA_Obj_free(&s); CheckError(ierr);}void Solver_Parallel_LOQO::sync_gradient(int *work_set, int *not_work_set){  int start_i = 0;  for(int i=0; i<n; ++i, ++start_i)    {      if(work_set[i] >= l_low_loc)	break;    }  // Synchronize G_b  //  double *G_send = new double[local_n];  double *G_send = new double[num_rows];  double *G_recv = new double[n];  int count=0;  for(int i=start_i; work_set[i] < l_up_loc && i<n; ++i)    //for(int i=n_low_loc; i<n_up_loc; ++i)    {      G_send[count] = G[work_set[i]];      ++count;    }//   printf("G_send = ");//   for(int i=start_i; work_set[i] < l_up_loc && i<n; ++i)//     printf(" %g", G_send[i]);//   printf("\n");//   printf("count = %d\n", count);//   printf("num_rows = %d\n", num_rows);  int *sendcounts = new int[size];  int *sdispls = new int[size];  for(int i=0; i<size; ++i)    {      //      sendcounts[i] = local_n;      sendcounts[i] = num_rows;      sdispls[i] = 0;    }  int *recvcounts = new int[size];  int *rdispls = new int[size];  for(int k=0; k<size; ++k)    {      int start_i_other = 0;      for(int i=0; i<n; ++i, ++start_i_other)	if(work_set[i] >= l_low[k])	  break;      int num_rows_other = 0;      for(int i=start_i_other; work_set[i] < l_up[k] && i<n; ++i)	++num_rows_other;      recvcounts[k] = num_rows_other;      if(k == 0)	rdispls[k] = 0;      else	rdispls[k] = rdispls[k-1] + recvcounts[k-1];    }//   recvcounts[0] = n_up[0] - n_low[0];//   rdispls[0] = 0;//   for(int i=1; i<size; ++i)//     {//       recvcounts[i] = n_up[i] - n_low[i];//       rdispls[i] = rdispls[i-1] + recvcounts[i-1];//     }  ierr = MPI_Alltoallv(G_send, sendcounts, sdispls, MPI_DOUBLE,		       G_recv, recvcounts, rdispls, MPI_DOUBLE, comm);  CheckError(ierr);  // Update local G_b  for(int k=0; k<size; ++k)     {      if(k != rank)	{	  int start_i_other = 0;	  for(int i=0; i<n; ++i, ++start_i_other)	    if(work_set[i] >= l_low[k])	      break;	  // G_b	  for(int i=start_i_other; work_set[i] < l_up[k] && i<n; ++i)	    G[work_set[i]] = G_recv[rdispls[k]+(i-start_i_other)];// 	  for(int j=n_low[i]; j<n_up[i]; ++j)// 	    G[work_set[j]] = G_recv[rdispls[i]+(j-n_low[i])];	}    }  delete[] G_send;  delete[] G_recv;  delete[] sendcounts;  delete[] sdispls;  delete[] recvcounts;  delete[] rdispls;  double *G_buf = new double[lmn];  // Synchronize G_n  for(int i=0; i<size; ++i)    {      if(rank == i)	{	  for(int j=0; j<lmn; ++j)	    G_buf[j] = G_n[j];	}      ierr = MPI_Bcast(G_buf, lmn, MPI_DOUBLE, i, comm); CheckError(ierr);      // Accumulate contributions      for(int j=0; j<lmn; ++j)	G[not_work_set[j]] += G_buf[j];    }  delete[] G_buf;}int Solver_LOQO::select_working_set(int *work_set, int *not_work_set){ printf("selecting working set...");  // reset work status  n = n_old;  for(int i=0; i<l; ++i)      work_status[i] = WORK_N;  double Gmax1 = -INF;		// max { -y_i * grad(f)_i | i in I_up(\alpha) }  double Gmax2 = -INF;		// max { y_i * grad(f)_i | i in I_low(\alpha) }  for(int i=0; i<l; ++i)    {      if(!is_upper_bound(i))	{	  if(y[i] == +1)	    {	      if(-G[i] > Gmax1)		Gmax1 = -G[i];	    }	  else	    {	      if(-G[i] > Gmax2)		Gmax2 = -G[i];	    }	}      if(!is_lower_bound(i))	{	  if(y[i] == +1)	    {	      if(G[i] > Gmax2)		Gmax2 = G[i];	    }	  else	    {	      if(G[i] > Gmax1)		Gmax1 = G[i];	    }	}    }  // check for optimality  printf("Gmax1 + Gmax2 = %g < %g\n", Gmax1+Gmax2,eps);  if(Gmax1 + Gmax2 < eps)      return 1;  // Compute yG  double *yG = new double[l];  int *pidx = new int[l];  for(int i=0; i<l; ++i)    {      if(y[i] == +1)	yG[i] = G[i];      else	yG[i] = -G[i];      pidx[i] = i;    }  quick_sort(yG, pidx, 0, l-1);//   printf("yG = ");//   for(int i=0; i<l; ++i)//     printf(" %g",yG[i]);//   printf("\n");//   printf("pidx = ");//   for(int i=0; i<l; ++i)//     printf(" %d",pidx[i]);//   printf("\n");  int top=l-1; int bot=0; int count=0;  // Select a full set initially  int nselect = iter == 0 ? n : q;  while(top > bot && count < nselect)    {      while(!(is_free(pidx[top]) 	      || (is_upper_bound(pidx[top]) && y[pidx[top]] == +1)	      || (is_lower_bound(pidx[top]) && y[pidx[top]] == -1)	      ))	--top;      while(!(is_free(pidx[bot])	      || (is_upper_bound(pidx[bot]) && y[pidx[bot]] == -1)	      || (is_lower_bound(pidx[bot]) && y[pidx[bot]] == +1)	      ))	++bot;      if(top > bot)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级在线观看一区二区| 亚洲色图一区二区三区| 欧美午夜在线一二页| 99vv1com这只有精品| 国产成人精品一区二区三区网站观看| 国产麻豆视频精品| 国产一区二区剧情av在线| 国产精品白丝av| 成人av电影免费在线播放| 99视频精品在线| 欧美中文字幕一区二区三区| 欧美日韩亚州综合| 91精品国产品国语在线不卡| 日韩精品一区在线| 中文乱码免费一区二区| 亚洲人成在线播放网站岛国| 香蕉av福利精品导航| 久久97超碰国产精品超碰| 国产精品亚洲一区二区三区妖精| 99视频国产精品| 在线观看不卡一区| 欧美猛男gaygay网站| 日韩精品一区二区在线| 国产精品婷婷午夜在线观看| 亚洲精品国久久99热| 蜜桃传媒麻豆第一区在线观看| 国产电影一区在线| 色欧美乱欧美15图片| 欧美v日韩v国产v| 亚洲图片激情小说| 日本成人在线一区| av在线不卡电影| 日韩欧美一区二区不卡| 国产精品国模大尺度视频| 亚洲超碰精品一区二区| 国产91精品一区二区麻豆网站| 91黄色激情网站| 国产午夜亚洲精品午夜鲁丝片 | 成人av在线一区二区三区| 91成人免费网站| 欧美经典三级视频一区二区三区| 一区二区三区不卡在线观看 | 亚洲444eee在线观看| 亚洲美女免费在线| 久久av老司机精品网站导航| 99久久精品免费| 精品剧情在线观看| 亚洲精品免费在线播放| 成人性视频免费网站| 精品国产一区二区三区忘忧草| 成人欧美一区二区三区1314| 久久aⅴ国产欧美74aaa| 欧美日韩激情一区二区三区| 亚洲欧洲国产日韩| 高清在线观看日韩| 久久免费国产精品| 免费在线观看视频一区| 欧美日韩国产精品自在自线| 亚洲一区二区四区蜜桃| 色久优优欧美色久优优| 国产精品素人一区二区| 国产一区二区三区四区在线观看| 91精品在线一区二区| 午夜不卡av在线| 欧美日本在线播放| 午夜精品一区二区三区三上悠亚| 91极品美女在线| 亚洲一级二级在线| 在线欧美一区二区| 亚洲美女视频在线观看| 色婷婷av一区二区| 一区二区三区欧美亚洲| 欧美三级三级三级爽爽爽| 亚洲国产aⅴ天堂久久| 欧美另类高清zo欧美| 亚洲成人av一区二区| 欧美日韩一区不卡| 秋霞国产午夜精品免费视频| 欧美一级理论片| 久久99精品国产91久久来源| 久久综合五月天婷婷伊人| 国产一区二区福利视频| 国产欧美日韩卡一| 99国产精品国产精品久久| 一区二区三区免费| 欧美精品日韩综合在线| 麻豆精品在线看| 久久精品视频网| av电影在线观看完整版一区二区| 亚洲日本欧美天堂| 欧美日韩在线三级| 奇米精品一区二区三区在线观看| 日韩美女一区二区三区四区| 国产高清亚洲一区| 亚洲日韩欧美一区二区在线| 欧美精品自拍偷拍动漫精品| 久88久久88久久久| 亚洲欧洲日产国产综合网| 欧美酷刑日本凌虐凌虐| 激情欧美一区二区| 亚洲欧美视频在线观看| 欧美一区二区三区日韩| 岛国一区二区在线观看| 亚洲1区2区3区4区| 久久久精品免费观看| 欧美午夜免费电影| 国产成人精品免费视频网站| 亚洲黄网站在线观看| 日韩欧美国产午夜精品| 国产mv日韩mv欧美| 污片在线观看一区二区| 国产精品人人做人人爽人人添| 欧美肥妇毛茸茸| 成人一区二区三区在线观看| 五月婷婷久久综合| 国产精品色婷婷久久58| 欧美一级欧美三级| 91美女在线观看| 国模少妇一区二区三区| 图片区小说区区亚洲影院| 国产精品国产a级| 日韩欧美的一区| 色婷婷综合久久久久中文一区二区| 免费在线观看一区二区三区| 亚洲欧美视频在线观看视频| 久久久高清一区二区三区| 欧美丰满高潮xxxx喷水动漫| 色婷婷综合久久久中文字幕| 国产在线视频一区二区| 亚洲成人黄色影院| 亚洲三级视频在线观看| 中文字幕av资源一区| ww亚洲ww在线观看国产| 91精品国产综合久久精品性色| 色久综合一二码| 色综合久久天天| 成人av小说网| 成人sese在线| 国产成人综合视频| 国产一区二区三区免费在线观看| 日韩激情一二三区| 亚洲国产视频在线| 亚洲一区在线电影| 一区二区三区精品| 亚洲精品国产精华液| 亚洲男帅同性gay1069| 日韩毛片视频在线看| 亚洲品质自拍视频| 亚洲美女电影在线| 亚洲在线观看免费| 亚洲综合色噜噜狠狠| 亚洲综合激情另类小说区| 有坂深雪av一区二区精品| 亚洲靠逼com| 伊人色综合久久天天人手人婷| 亚洲黄色av一区| 午夜欧美在线一二页| 日本怡春院一区二区| 午夜国产精品一区| 精品在线免费视频| 国产盗摄视频一区二区三区| 国产精品亚洲成人| 99视频精品免费视频| 欧美亚洲日本一区| 欧美精品乱人伦久久久久久| 日韩欧美一级特黄在线播放| 久久久久久一二三区| 亚洲欧洲性图库| 天天综合色天天综合| 久久精品国产第一区二区三区| 国产一本一道久久香蕉| 成人黄色一级视频| 欧美视频在线一区二区三区 | 亚洲日本韩国一区| 日韩综合小视频| 国产精品自拍在线| 91麻豆视频网站| 91精品欧美久久久久久动漫| 国产人成亚洲第一网站在线播放| 成人欧美一区二区三区1314| 亚洲成av人在线观看| 国产乱人伦精品一区二区在线观看 | 日本精品一区二区三区高清 | 日韩午夜激情av| 国产喂奶挤奶一区二区三区| 亚洲日本丝袜连裤袜办公室| 日韩精品电影一区亚洲| 国产精品一二三在| 欧美日韩一区二区三区视频| 久久精品视频在线看| 性感美女极品91精品| 成人视屏免费看| 欧美顶级少妇做爰| 亚洲天天做日日做天天谢日日欢| 青青草成人在线观看| aa级大片欧美| 欧美激情自拍偷拍| 视频在线观看91| 色综合久久综合网97色综合| 欧美www视频|