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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? loqo_solver.cpp

?? 支持向量分類算法在linux操作系統(tǒng)下的是實(shí)現(xiàn)
?? CPP
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
// D. Brugger, december 2006// $Id: loqo_solver.cpp 7 2006-12-16 16:45:32Z beeblbrox $//// Copyright (C) 2006 Dominik Brugger//// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.// // This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License along// with this program; if not, write to the Free Software Foundation, Inc.,// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.#include "loqo_solver.h"#ifndef CheckError#define CheckError(n) if(n){printf("line %d, file %s\n",__LINE__,__FILE__);}#endifSolver_LOQO::Solver_LOQO(int n, int q, int m){   // Ensure that n,q are even numbers.  this->n = n % 2 == 0 ? n : n-1;   this->n_old = this->n;   this->q = q % 2 == 0 ? q : q-1;   this->m = m;  // Ensure sane q  this->q = this->q > this->n ? this->n : this->q;  this->init_margin = 0.1;  this->init_iter = 500;  this->precision_violations = 0;  this->opt_precision = 1e-8;  NEXT_RAND = 1;}unsigned int Solver_LOQO::next_rand_pos(){  NEXT_RAND = NEXT_RAND*1103515245L + 12345L;  return NEXT_RAND & 0x7fffffff;}void Solver_LOQO::setup_up(int *work_set) {   for(int i=0; i<n; ++i)     up[i] = get_C(work_set[i]);}void Solver_LOQO::allocate_a(){   a = new double[n]; }void Solver_LOQO::allocate_d(){   d = new double[1]; }void Solver_LOQO::allocate_work_space(){   work_space = new double[5*n+1]; }void Solver_LOQO::setup_low(){   for(int i=0; i<n; ++i)     low[i] = 0; }Solver_Parallel_LOQO::Solver_Parallel_LOQO(int n, int q, int m, MPI_Comm comm, int nprows, 					   int npcols, int nb_distr) : Solver_LOQO(n,q,m){  this->comm = comm;  ierr = MPI_Comm_rank(comm, &this->rank); CheckError(ierr);  ierr = MPI_Comm_size(comm, &this->size); CheckError(ierr);  ierr = PLA_Comm_1D_to_2D(comm, nprows, npcols, &comm); CheckError(ierr);  // Initialize PLAPACK  ierr = PLA_Init(comm); CheckError(ierr);  ierr = PLA_Temp_create(nb_distr, 0, &templ); CheckError(ierr);  // Initialize PLAPACK objs  Q_bb_global = NULL; c_global = NULL; up_global = NULL;   low_global = NULL; a_global = NULL; d_global = NULL;  x = NULL; dist = NULL; g = NULL; t = NULL; yy = NULL; z = NULL;  s = NULL; plus_one = NULL; Q_bb_global_view = NULL;  c_global_view = NULL; up_global_view = NULL;  low_global_view = NULL; a_global_view = NULL;  x_view = NULL; dist_view = NULL; g_view = NULL; t_view = NULL;  z_view = NULL; s_view = NULL; x_loc_view = NULL;  x_loc = NULL; yy_loc = NULL; dist_loc = NULL;  dist_loc_view = NULL;}Solver_Parallel_LOQO::~Solver_Parallel_LOQO(){  // Finalize PLAPACK  ierr = PLA_Finalize(); CheckError(ierr);}class Solver_Parallel_LOQO_NU : public Solver_Parallel_LOQO{public:  Solver_Parallel_LOQO_NU(int n, int q, int m, MPI_Comm comm, int nprows, 			  int npcols, int nb_distr, double nu)     : Solver_Parallel_LOQO(n, q, m, comm, nprows, npcols, nb_distr)  {    this->nu = nu;  };private:  double nu;  void setup_a(int *work_set);  void setup_d(int *not_work_set);  int select_working_set(int *work_set, int *not_work_set);//   double calculate_rho() { si->r = dual[1]; return dual[0]; }  double calculate_rho();};double Solver_Parallel_LOQO_NU::calculate_rho(){  printf("Solver_Parallel_LOQO_NU::calculate_rho called!\n");  int nr_free1 = 0,nr_free2 = 0;  double ub1 = INF, ub2 = INF;  double lb1 = -INF, lb2 = -INF;  double sum_free1 = 0, sum_free2 = 0;//   printf("alpha = ");//   for(int i=0; i<l; ++i)//     printf(" %g",alpha[i]);//   printf("\n");  for(int i=0;i<l;i++)    {      if(y[i]==+1)	{	  if(is_lower_bound(i))	    ub1 = min(ub1,G[i]);	  else if(is_upper_bound(i))	    lb1 = max(lb1,G[i]);	  else	    {	      ++nr_free1;	      sum_free1 += G[i];	    }	}      else	{	  if(is_lower_bound(i))	    ub2 = min(ub2,G[i]);	  else if(is_upper_bound(i))	    lb2 = max(lb2,G[i]);	  else	    {	      ++nr_free2;	      sum_free2 += G[i];	    }	}    }  printf("nr_free1 = %d\n", nr_free1);  printf("sum_free1 = %g\n",sum_free1);  printf("nr_free2 = %d\n", nr_free2);  printf("sum_freee = %g\n",sum_free2);  double r1,r2;  if(nr_free1 > 0)    r1 = sum_free1/nr_free1;  else    r1 = (ub1+lb1)/2;	  if(nr_free2 > 0)    r2 = sum_free2/nr_free2;  else    r2 = (ub2+lb2)/2;	  si->r = (r1+r2)/2;  printf("(r1+r2)/2 = %g\n", (r1+r2)/2);  printf("(r1+r2)/2 = %g\n", (r1-r2)/2);  return (r1-r2)/2;}void Solver_Parallel_LOQO_NU::setup_a(int *work_set){  info("Solver_Parallel_LOQO_NU::setup_a called\n");  // Note that a has to be in column major layout.  for(int i=n_low_loc; i<n_up_loc; ++i)    {      a[(i-n_low_loc)*m] = y[work_set[i]];      a[(i-n_low_loc)*m+1] = 1;    }  ierr = PLA_Obj_set_to_zero(a_global_view); CheckError(ierr);  ierr = PLA_API_begin(); CheckError(ierr);  ierr = PLA_Obj_API_open(a_global_view); CheckError(ierr);  ierr = PLA_API_axpy_matrix_to_global(m, local_n, plus_one, (void *)a, m, 				       a_global_view, 0, n_low_loc);  CheckError(ierr);  ierr = PLA_Obj_API_close(a_global_view); CheckError(ierr);  ierr = PLA_API_end(); CheckError(ierr);  info("Solver_Parallel_LOQO_NU::setup_a done\n");}void Solver_Parallel_LOQO_NU::setup_d(int *not_work_set){  info("Solver_Parallel_LOQO_NU::setup_d called\n");  d[0] = 0;  for(int i=0; i<lmn; ++i)    {      if(fabs(alpha[not_work_set[i]]) > TOL_ZERO)	d[0] -= y[not_work_set[i]]*alpha[not_work_set[i]];    }  d[1] = nu*l;  info("Setting d[1] = %g\n", d[1]); info_flush();  for(int i=0; i<lmn; ++i)    d[1] -= alpha[not_work_set[i]];  ierr = PLA_Obj_set_to_zero(d_global); CheckError(ierr);  ierr = PLA_API_begin(); CheckError(ierr);  ierr = PLA_Obj_API_open(d_global); CheckError(ierr);  if(rank == 0)    ierr = PLA_API_axpy_vector_to_global(m, plus_one, (void *) d, 1, d_global, 					 0); CheckError(ierr);  ierr = PLA_Obj_API_close(d_global); CheckError(ierr);  ierr = PLA_API_end(); CheckError(ierr);  info("Solver_Parallel_LOQO_NU::setup_d done\n"); info_flush();}void Solver_Parallel_LOQO::setup_range(int *range_low, int *range_up, 				       int total_sz){  int local_sz = total_sz/size;  int idx_up = local_sz;  int idx_low = 0;  if(total_sz != 0)    {      for(int i=0; i<size-1; ++i)	{	  range_low[i] = idx_low;	  range_up[i] = idx_up;	  idx_low = idx_up;	  idx_up = idx_low + local_sz + 1;	}      range_low[size-1] = idx_low; range_up[size-1]=total_sz;    }  else    {      for(int i=0; i<size; ++i)	{	  range_low[i] = 0;	  range_up[i] = 0;	}    }}int Solver_Parallel_LOQO_NU::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 Gmin1 = INF; double Gmin2 = INF;  double Gmax1 = -INF; double Gmax2 = -INF;  int min1 = -1; int min2 = -1;  int max1 = -1; int max2 = -1;  for(int t=0; t<l; ++t)    {      if(y[t] == +1)	{	  if(!is_upper_bound(t))	    {	      if(G[t] < Gmin1)		{		  Gmin1 = G[t];		  min1 = t;		}	    }	  if(!is_lower_bound(t))	    {	      if(G[t] > Gmax1)		{		  Gmax1 = G[t];		  max1 = t;		}	    }	}      else	{	  if(!is_upper_bound(t))	    {	      if(G[t] < Gmin2)		{		  Gmin2 = G[t];		  min2 = t;		}	    }	  if(!is_lower_bound(t))	    {	      if(G[t] > Gmax2)		{		  Gmax2 = G[t];		  max2 = t;		}	    }	}    }  // check for optimality, max. violating pair.  printf("max(Gmax1-Gmin1,Gmax2-Gmin2) = %g < %g\n", 	 max(Gmax1-Gmin1,Gmax2-Gmin2),eps);  if(max(Gmax1-Gmin1,Gmax2-Gmin2) < eps)    return 1;  // Sort gradient  double *Gtmp = new double[l];  int *pidx = new int[l];  for(int i=0; i<l; ++i)    {      Gtmp[i] = G[i];      pidx[i] = i;    }  quick_sort(Gtmp, pidx, 0, l-1);//   printf("pidx = ");//   for(int i=0; i<l; ++i)//     printf(" %d", pidx[i]);//   printf("\n");  int top1=l-1; int top2=l-1;  int bot1=0; int bot2=0;  int count=0;  // Select a full set initially  int nselect = iter == 0 ? n : q;  while(count < nselect)    {      if(top1 > bot1)	{ 	  while(!( (is_free(pidx[top1]) || is_upper_bound(pidx[top1])) 		   && y[pidx[top1]] == +1))	    {	      if(top1 <= bot1) break;	      --top1;	    } 	  while(!( (is_free(pidx[bot1]) || is_lower_bound(pidx[bot1])) 		   && y[pidx[bot1]] == +1))	    {	      if(bot1 >= top1) break;	      ++bot1;	    }	}      if(top2 > bot2)	{	  while(!( (is_free(pidx[top2]) || is_upper_bound(pidx[top2]))		   && y[pidx[top2]] == -1))	    {	      if(top2 <= bot2) break;	      --top2;	    }	  while(!( (is_free(pidx[bot2]) || is_lower_bound(pidx[bot2]))		   && y[pidx[bot2]] == -1))	    {	      if(bot2 >= top2) break;	      ++bot2;	    }	}      if(top1 > bot1 && top2 > bot2)	{	  if(G[pidx[top1]]-G[pidx[bot1]] > G[pidx[top2]]-G[pidx[bot2]])	    {	      work_status[pidx[top1]] = WORK_B;	      work_status[pidx[bot1]] = WORK_B;	      --top1;	      ++bot1;	    }	  else	    {	      work_status[pidx[top2]] = WORK_B;	      work_status[pidx[bot2]] = WORK_B;	      --top2;	      ++bot2;	    }	  count += 2;	}      else if(top1 > bot1)	{	  work_status[pidx[top1]] = WORK_B;	  work_status[pidx[bot1]] = WORK_B;	  --top1;	  ++bot1;	  count += 2;	}      else if(top2 > bot2)	{	  work_status[pidx[top2]] = WORK_B;	  work_status[pidx[bot2]] = WORK_B;	  --top2;	  ++bot2;	  count += 2;	}      else	break;    } // while(count < nselect)  if(count < n)    {      // Compute subset of indices in previous working set       // which were not yet selected      int j=0;      int *work_count_subset = new int[l-count];      int *subset = new int[l-count];      int *psubset = new int[l-count];      for(int i=0; i<l; ++i)	{	  if(work_status[i] == WORK_N && work_count[i] > -1)	    {	      work_count_subset[j] = work_count[i];	      subset[j] = i;	      psubset[j] = j;	      ++j;	    }	}      quick_sort(work_count_subset, psubset, 0, j-1);      // Fill up with j \in B, 0 < alpha[j] < C      for(int i=0; i<j; ++i)	{	  if(count == n) break;	  if(is_free(subset[psubset[i]])) 	    {	      work_status[subset[psubset[i]]] = WORK_B;	      ++count;	    }	}      // Fill up with j \in B, alpha[j] = 0      for(int i=0; i<j; ++i)	{	  if(count == n) break;	  if(is_lower_bound(subset[psubset[i]]))	    {	      work_status[subset[psubset[i]]] = WORK_B;	      ++count;	    }	}      // Fill up with j \in B, alpha[j] = C      for(int i=0; i<j; ++i)	{	  if(count == n) break;	  if(is_upper_bound(subset[psubset[i]]))	    {	      work_status[subset[psubset[i]]] = WORK_B;	      ++count;	    }	}      // clean up      delete[] work_count_subset;      delete[] subset;      delete[] psubset;    } // if(count < n)  // Setup work_set and not_work_set  // update work_count  int nnew=0; int i=0; int j=0; n=0;  for(int t=0; t<l; ++t)    {      if(work_status[t] == WORK_B)	{	  if(work_count[t] == -1)	    ++nnew;	  work_set[i] = t; ++i; ++n;	  ++work_count[t];	}      else	{	  not_work_set[j] = t; ++j;	  work_count[t] = -1;	}    }  // Update q  printf("nnew = %d\n", nnew);  int kin = nnew;  nnew = nnew % 2 == 0 ? nnew : nnew-1;  int L = n/10 % 2 == 0 ? n/10 : (n/10)-1;  q = min(q, max( max( 10, L ), nnew ) );  printf("q = %d\n", q);  printf("n = %d\n",n);  if(kin == 0)    {      // Increase precision of solver.      if(opt_precision > 1e-20)	opt_precision /= 100;      else	{	  info("Error: Unable to select a suitable working set!!!\n");	  return 1; 	}    }  // clean up  delete[] Gtmp;  delete[] pidx;  printf("done.\n");  return 0;  }void Solver_Parallel_LOQO::allocate_a()

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美你懂的| 国产精品嫩草影院av蜜臀| 国产精品白丝jk黑袜喷水| 一区二区成人在线| 久久久精品tv| 欧美一区日韩一区| 在线精品视频免费播放| 国产91丝袜在线播放0| 日本免费新一区视频| 亚洲欧洲韩国日本视频| 久久人人97超碰com| 欧美久久久久中文字幕| 在线免费一区三区| 成人免费毛片高清视频| 国内精品国产成人| 看电视剧不卡顿的网站| 亚洲高清免费观看 | 欧美电影一区二区| 成人v精品蜜桃久久一区| 久久97超碰色| 蜜桃久久av一区| 亚洲第一主播视频| 一区二区三区在线免费观看| 国产精品色婷婷久久58| 久久久久久久久久美女| 日韩精品中文字幕一区二区三区 | 亚洲精品一区二区三区精华液| 欧美午夜免费电影| 久久精品人人爽人人爽| 欧美大尺度电影在线| 欧美放荡的少妇| 337p亚洲精品色噜噜狠狠| 欧美日韩视频在线第一区| 91久久一区二区| 色欧美日韩亚洲| 在线观看三级视频欧美| 欧美在线你懂的| 欧美在线不卡一区| 欧美日本在线播放| 欧美日本一道本| 91麻豆精品国产91久久久| 欧美日韩精品二区第二页| 欧美亚洲综合另类| 欧美福利一区二区| 日韩免费电影网站| 久久免费偷拍视频| 国产精品国产三级国产普通话三级| 国产精品蜜臀av| 亚洲免费观看视频| 亚洲国产精品人人做人人爽| 亚洲大片一区二区三区| 日韩专区欧美专区| 精品伊人久久久久7777人| 国产一区二区精品久久99| 成人毛片在线观看| 日本二三区不卡| 在线成人午夜影院| 26uuu亚洲综合色欧美| 欧美激情一区三区| 一区二区三区在线视频观看| 日韩一区精品字幕| 国内成+人亚洲+欧美+综合在线| 岛国精品在线观看| 91福利区一区二区三区| 日韩一区二区三区免费看| 国产婷婷色一区二区三区四区| 一区在线播放视频| 五月天婷婷综合| 国产电影一区二区三区| 色哟哟精品一区| 日韩一区二区电影在线| 国产精品嫩草久久久久| 午夜视频一区二区三区| 国产精品一品视频| 91蜜桃网址入口| 日韩欧美亚洲国产另类| 国产精品美女视频| 五月激情综合色| 丁香天五香天堂综合| 欧美性猛交xxxx乱大交退制版| 欧美tk—视频vk| 亚洲免费成人av| 精品亚洲欧美一区| 色噜噜狠狠成人网p站| 精品日韩在线一区| 亚洲精品免费在线观看| 精品亚洲成a人| 在线免费精品视频| 国产网红主播福利一区二区| 亚洲一区二区中文在线| 国产成人在线色| 欧美精品日韩精品| 自拍偷自拍亚洲精品播放| 青青草精品视频| 国产免费久久精品| 日韩av电影一区| 色综合久久天天| 久久精品一区二区三区四区| 亚洲国产精品一区二区www| 成人app在线观看| 日韩欧美国产wwwww| 亚洲免费av在线| 成人免费av资源| 久久嫩草精品久久久精品一| 日韩福利视频网| 欧美专区亚洲专区| 亚洲手机成人高清视频| 国产精品99久久久久久似苏梦涵 | 成人看片黄a免费看在线| 日韩三级视频在线观看| 亚洲在线观看免费| 色综合久久综合网| 国产精品久久久久四虎| 国产成人午夜精品5599| 精品免费一区二区三区| 日本不卡视频在线| 欧美日本国产一区| 亚洲电影欧美电影有声小说| 91香蕉视频在线| 国产精品久久久久影院老司 | 国产999精品久久久久久| 欧美成人女星排名| 美腿丝袜亚洲色图| 日韩一级视频免费观看在线| 视频一区二区国产| 欧美电影一区二区| 日韩二区三区四区| 日韩视频免费直播| 日本亚洲一区二区| 欧美电影免费观看高清完整版| 舔着乳尖日韩一区| 欧美精品粉嫩高潮一区二区| 亚洲一级在线观看| 555夜色666亚洲国产免| 午夜免费欧美电影| 91精选在线观看| 麻豆专区一区二区三区四区五区| 欧美另类高清zo欧美| 日韩电影免费一区| 日韩欧美www| 久久成人羞羞网站| 久久香蕉国产线看观看99| 国产九色sp调教91| 国产精品美女久久久久久久| 北条麻妃国产九九精品视频| 成人免费在线观看入口| 91麻豆国产香蕉久久精品| 夜夜嗨av一区二区三区中文字幕| 色久综合一二码| 香蕉久久夜色精品国产使用方法| 欧美日本国产视频| 寂寞少妇一区二区三区| 欧美国产激情二区三区| 色婷婷久久99综合精品jk白丝| 一区二区欧美在线观看| 91精品国产91久久久久久最新毛片 | 欧美日韩国产精品自在自线| 午夜亚洲福利老司机| 91精品国产全国免费观看| 精品亚洲成a人| 国产精品久久毛片av大全日韩| 在线这里只有精品| 蜜桃视频免费观看一区| 国产欧美日韩中文久久| 欧亚一区二区三区| 久久精品国产久精国产| 国产精品久久久久天堂| 欧美精品一二三四| 久久精品国产99国产精品| 精品无码三级在线观看视频| 国产免费久久精品| 欧美精品日韩精品| 成人免费高清在线| 日韩综合小视频| 国产精品家庭影院| 日韩一区二区三免费高清| 成人激情黄色小说| 视频一区欧美精品| 自拍偷自拍亚洲精品播放| 日韩一区二区三区在线观看| 99久久精品国产精品久久| 婷婷综合久久一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 欧美三级午夜理伦三级中视频| 国产精品 欧美精品| 亚洲超碰97人人做人人爱| 欧美激情在线一区二区三区| 91麻豆精品国产91久久久 | 成人av资源下载| 日韩av一二三| 一区二区欧美视频| 日本一区二区高清| 日韩三级电影网址| 在线亚洲精品福利网址导航| 韩国欧美国产1区| 亚洲成国产人片在线观看| 国产精品免费丝袜| 久久久久久9999| 91精品国产福利在线观看| 在线免费观看日韩欧美|