Ejemplo n.º 1
0
Pikmin::Pikmin()
{
	std::discrete_distribution<int> disc_dist {8,40,20,8,8,8,8};
	color = Color(disc_dist(rng));

	std::uniform_int_distribution<int> uni_dist(0, namelist.size() - 1);
	name = namelist[uni_dist(rng)];
}
Ejemplo n.º 2
0
float perform_random_point_queries (SpatialIndex::ISpatialIndex * tree,
                                    const SpatialIndex::Region & query_region,
                                    const unsigned number_of_queries)
{
    boost::mt11213b generator (42u);
    const double x[3] = {0.0, 0.0, 0.0};

    access_count_visitor v;
    for (unsigned j = 0; j < number_of_queries; j++)
    {
        SpatialIndex::Point rnd_point (x, query_region.m_dimension);
        for (size_t i = 0; i < query_region.m_dimension; i++)
        {
            boost::uniform_real<> uni_dist (query_region.m_pLow[i],
                                            query_region.m_pHigh[i]);
            boost::variate_generator<boost::mt11213b &,
                boost::uniform_real<> > uni(generator, uni_dist);
            rnd_point.m_pCoords[i] = uni();
        }
        assert (query_region.containsPoint (rnd_point));

        v.new_query();
        tree->pointLocationQuery (rnd_point, v);
    }
    v.print_stats();
    return v.get_avg_io();
}
double HG_Random::get_random_01_value() {
  // Define a uniform random number distribution which produces "double"
  // values between 0 and 1 (0 inclusive, 1 exclusive).
  boost::uniform_real<> uni_dist(0,1);
  boost::variate_generator<HG_RandomGenerator_t&, boost::uniform_real<> > uni(HG_Random::random_generator, uni_dist);
  return uni();
}
Ejemplo n.º 4
0
int main(){
  //ROOT::Cintex::Cintex::Enable();
  
  pool::POOLContext::loadComponent( "SEAL/Services/MessageService" );
  pool::POOLContext::loadComponent("COND/Services/TBufferBlobStreamingService");
  pool::POOLContext::setMessageVerbosityLevel( seal::Msg::Error );  
  pool::Placement place;
  place.setDatabase("sqlite_file:strip.db", pool::DatabaseSpecification::PFN );
  place.setContainerName("mySiStripNoisesRcd");
  place.setTechnology(pool::POOL_RDBMS_HOMOGENEOUS_StorageType.type());
  pool::IFileCatalog* fileCatalog = new pool::IFileCatalog;
  fileCatalog->setWriteCatalog( "file:me.xml" );
  fileCatalog->connect();
  fileCatalog->start();
  pool::IDataSvc* datasvc = pool::DataSvcFactory::instance( fileCatalog );
  pool::DatabaseConnectionPolicy policy;
  policy.setWriteModeForNonExisting( pool::DatabaseConnectionPolicy::CREATE );
  policy.setWriteModeForExisting( pool::DatabaseConnectionPolicy::OVERWRITE);
  datasvc->session().setDefaultConnectionPolicy( policy );
  datasvc->transaction().start(pool::ITransaction::UPDATE);
  
  mySiStripNoises* myobj = new mySiStripNoises;
  unsigned int detidseed=1234;
  unsigned int bsize=100;
  unsigned int nAPV=2;
  base_generator_type rng(42u);
  boost::uniform_real<> uni_dist(0,1);
  boost::variate_generator<base_generator_type&, boost::uniform_real<> > uni(rng, uni_dist);
  for(unsigned int detid=detidseed; detid<(detidseed+bsize);detid++){
    std::vector<short> theSiStripVector;
    for(unsigned int strip=0; strip<128*nAPV; ++strip){
      std::cout<<strip<<std::endl;
      float noise = uni();;      
      myobj->setData(noise,theSiStripVector);
    }
    myobj->put(detid,theSiStripVector);
  }    
  std::cout<<"about to build ref"<<std::endl;
  pool::Ref< mySiStripNoises > simple(datasvc,myobj);
  std::cout<<"about to mark write"<<std::endl;
  simple.markWrite(place);
  std::cout<<"about to commit"<<std::endl;
  std::string t=simple.toString();
  std::cout<<"token "<<t<<std::endl;
  datasvc->transaction().commit();
  std::cout<<"committed"<<std::endl;
  datasvc->transaction().start(pool::ITransaction::READ);
  std::cout<<"about to read back"<<std::endl;
  pool::Ref< mySiStripNoises > p(datasvc,t);
  unsigned int a=p->v_noises.size();
  std::cout<<"size a "<<a<<std::endl;
  unsigned int b=p->indexes.size();
  std::cout<<"size b "<<b<<std::endl;
  datasvc->transaction().commit();
  datasvc->session().disconnectAll();
  fileCatalog->commit();
  fileCatalog->disconnect();
  return 0;
}
Ejemplo n.º 5
0
void elastic_smooth_hinge_psdca::train(void) {
  const double one_over_nlam_ = 1.0 / (num_ins_ * lambda_);
  const double one_over_lam_ = 1.0 / lambda_;
  int i = 0;
  double delta_alpha_i = 0.0;
  double alpha_i_old = 0.0;

  std::default_random_engine g;
  std::uniform_int_distribution<> uni_dist(0, num_ins_ - 1);

  init_w_za_over_n();
  calculate_duality_gap(true, false);
  const auto ins_is_begin_it = std::begin(all_ins_index_);
  auto random_it = std::next(ins_is_begin_it, uni_dist(g));
  for (itr_ = 1; itr_ < max_iter_ && duality_gap_ > stop_criterion_; ++itr_) {
    for (int ir = 0; ir < num_ins_; ++ir) {
      random_it = std::next(ins_is_begin_it, uni_dist(g));
      i = *random_it;
      alpha_i_old = dual_var_[i];
      delta_alpha_i =
          (1.0 - gamma_ * alpha_i_old - y_[i] * (x_.row(i) * primal_var_)(0)) /
          (gamma_ + zi_sq_[i] * one_over_nlam_);
      delta_alpha_i =
          std::max(-alpha_i_old, std::min(1.0 - alpha_i_old, delta_alpha_i));
      dual_var_[i] += delta_alpha_i;
      za_over_n_ += (y_[i] * delta_alpha_i * one_over_n_) * x_.row(i);
      for (int j = 0; j < num_fea_; ++j) {
        primal_var_[j] =
            fsss::sign(one_over_lam_ * za_over_n_[j]) *
            std::max(0.0, std::abs(one_over_lam_ * za_over_n_[j]) - 1.0);
      }
    }
    if ((itr_ + 1) % frequency_cal_gap_ == 0) {
      calculate_duality_gap(true, false);
      // std::cout << itr_ << " optimization end gap : " << duality_gap_ << " "
      //           << primal_obj_value_ << ", " << dual_obj_value_ << std::endl;
    }
  }
}
Ejemplo n.º 6
0
Archivo: Box.cpp Proyecto: allogn/TOUCH
	// Make a random box inside the World Box with the given percentage Volume
	void Box::randomBox(const Box& world, const float percentageVolume,Box& random)
	{
	bigSpaceUnit newVolume = volume(world)*percentageVolume/100;
	spaceUnit dimensionInc = pow(newVolume,1.0/3.0) /2;

	for (size_t i = 0; i < DIMENSION; i++)
		{
		boost::uniform_real<> uni_dist (world.low.Vector[i],world.high.Vector[i]);
		boost::variate_generator<boost::mt11213b &,boost::uniform_real<> > uni(generator, uni_dist);
		float center = uni();
		random.low.Vector[i]  = center-dimensionInc;
		random.high.Vector[i] = center+dimensionInc;
		}
	}
Ejemplo n.º 7
0
    Pill(std::random_device& rd)
    {
        std::uniform_int_distribution<decltype(s_)> uni_dist;

        s_ = uni_dist(rd);

        int resp = b32_ndigits_;
        b32_str_[resp] = '\0';

        // http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt

        static constexpr const char* const b32_charset =
            "ybndrfg8ejkmcpqxot1uwisza345h769";

        const unsigned char* os = reinterpret_cast<const unsigned char*>(&s_);
        const unsigned char* osp = os + sizeof(s_);

        unsigned long x = 0;

        switch ((osp - os) % 5) {
        case 0:
            do {
                x = *--osp;
                b32_str_[--resp] = b32_charset[x % 32];
                x /= 32;
            case 4:
                x |= (static_cast<unsigned long>(*--osp)) << 3;
                b32_str_[--resp] = b32_charset[x % 32];
                x /= 32;
                b32_str_[--resp] = b32_charset[x % 32];
                x /= 32;
            case 3:
                x |= (static_cast<unsigned long>(*--osp)) << 1;
                b32_str_[--resp] = b32_charset[x % 32];
                x /= 32;
            case 2:
                x |= (static_cast<unsigned long>(*--osp)) << 4;
                b32_str_[--resp] = b32_charset[x % 32];
                x /= 32;
                b32_str_[--resp] = b32_charset[x % 32];
                x /= 32;
            case 1:
                x |= (static_cast<unsigned long>(*--osp)) << 2;
                b32_str_[--resp] = b32_charset[x % 32];
                x /= 32;
                b32_str_[--resp] = b32_charset[x];
            } while (osp > os);
        }
    }
Ejemplo n.º 8
0
int SampleUniform (int min, int max, int seed)
{
    // Create a Mersenne twister random number generator
    // that is seeded once with #seconds since 1970
    static mt19937 rng(static_cast<unsigned> (seed));
 
    // select Gaussian probability distribution
    uniform_int<> uni_dist(min, max);
 
    // bind random number generator to distribution, forming a function
    variate_generator<mt19937&, uniform_int<> >  uniform_sampler(rng, uni_dist);
 
    // sample from the distribution
    return uniform_sampler();
}
Ejemplo n.º 9
0
AnyType uniform_vector::run(AnyType & args)
{
    int dim = args[0].getAs<int>();
    double min_ = args[1].getAs<double>();
    double max_ = args[2].getAs<double>();
    int seed = args[3].getAs<int>();

    if (dim < 1) {
        throw std::invalid_argument("invalid argument - dim should be positive");
    }
    ColumnVector res(dim);
    boost::minstd_rand generator(seed);
    boost::uniform_real<> uni_dist(min_, max_);
    boost::variate_generator<boost::minstd_rand&, boost::uniform_real<> > uni(generator, uni_dist);
    for (int i = 0; i < dim; i++){
        res(i) = (double)uni();
    }
    return res;
}
Ejemplo n.º 10
0
int main()
{

    /* Quick hack for Dominic should be removed later, has nothing to do with 2dx_S
    int n = 20;
    int r_inner = 4;
    int r_outer = 9;

    SingleParticle2dx::real_array2d_type data2d = SingleParticle2dx::real_array2d_type(boost::extents[n][n]);

    for (int i=0; i<n; i++)
    {
    	for (int j=0; j<n; j++)
    	{
    		double r = sqrt( (i-n/2)*(i-n/2) + (j-n/2)*(j-n/2) );
    		//if ( (r>r_inner) && (r<r_outer) )
    		if ( (r<r_outer) )
    		{
    			data2d[i][j] = 1;
    		}
    		else
    		{
    			data2d[i][j] = 0;
    		}
    	}
    }

    SingleParticle2dx::Utilities::MRCFileIO::writeToMrc(&data2d, "scheibe.mrc");
    return 0;
    */


    boost::uniform_real<> uni_dist(-1,1);
    boost::variate_generator<boost::mt19937, boost::uniform_real<> > generator(boost::mt19937(time(0)), uni_dist );

    SingleParticle2dx::ConfigContainer* config = SingleParticle2dx::ConfigContainer::Instance();
    config->setParticleSize(n);

    SingleParticle2dx::DataStructures::Projection2d proj(n,n);

    std::vector<SingleParticle2dx::DataStructures::Orientation*> orient_vec;
    std::vector<std::string> name_vec;

    orient_vec.push_back(new SingleParticle2dx::DataStructures::Orientation(0,0,0));
    name_vec.push_back("test_0_0_0.mrc");
//	orient_vec.push_back(new SingleParticle2dx::DataStructures::Orientation(0,0,45));
//	name_vec.push_back("test_0_0_45.mrc");

//	orient_vec.push_back(new SingleParticle2dx::DataStructures::Orientation(0,30,0));
//	name_vec.push_back("test_0_30_0.mrc");
//	orient_vec.push_back(new SingleParticle2dx::DataStructures::Orientation(0,30,45));
//	name_vec.push_back("test_0_30_45.mrc");

//	orient_vec.push_back(new SingleParticle2dx::DataStructures::Orientation(30,45,0));
//	name_vec.push_back("test_30_45_0.mrc");
//	orient_vec.push_back(new SingleParticle2dx::DataStructures::Orientation(30,45,30));
//	name_vec.push_back("test_30_45_45.mrc");

    SingleParticle2dx::real_array3d_type protein = SingleParticle2dx::real_array3d_type(boost::extents[2*dh+2*offset+1][2*dh+2*offset+1][2*dh+2*offset+1]);
    SingleParticle2dx::real_array3d_type data3d = SingleParticle2dx::real_array3d_type(boost::extents[n][n][n]);

    generateObject(dh+offset, dh+offset, dh+offset, protein);
    SingleParticle2dx::Utilities::MRCFileIO::writeToMrc(&protein, "protein.mrc");

    SingleParticle2dx::DataStructures::Reconstruction3d rec(n,n,n);


    for (int k=0; k<static_cast<int>(orient_vec.size()); k++)
    {
        std::cout << "Generate model " << k+1 << "/" << orient_vec.size() << std::endl;

        SingleParticle2dx::Utilities::DataContainerFunctions::resetData(&data3d);

        for(int i=lat; i<(n-lat); i+=lat)
        {
            for(int j=lat; j<(n-lat); j+=lat)
            {
                insertObject(i, j, n/2, data3d, protein, generator);
            }
        }

        std::cout << "projecting down" << std::endl;


        for(int i=0; i<n; i++)
        {
            for(int j=0; j<n; j++)
            {
                for(int k=0; k<i; k++)
                {
                    float aux = data3d[i][j][k];
                    data3d[i][j][k] = data3d[k][j][i];
                    data3d[k][j][i] = aux;
                }
            }
        }

        rec.setFourierSpaceData(data3d);
        rec.setProjectionMethod(4);
        SingleParticle2dx::DataStructures::ParticleContainer dummy_container;
        rec.forceProjectionPreparation(dummy_container);
        rec.writeToFile("test3d.mrc");

        int tilt = 0;
        SingleParticle2dx::DataStructures::Orientation o(0, tilt, -90);
        rec.calculateProjection(o, proj);
        proj.writeToFile("proj_" + SingleParticle2dx::Utilities::StringFunctions::TtoString(tilt) + ".mrc" );


        SingleParticle2dx::DataStructures::Orientation o2(90, 30, -180);
        rec.calculateProjection(o2, proj);
        proj.writeToFile("proj_" + SingleParticle2dx::Utilities::StringFunctions::TtoString(30) + ".mrc" );

    }


    rec.writeToFile( "test_syn.mrc" );

    return 0;
}
Ejemplo n.º 11
0
void elastic_smooth_hinge_psdca::train_sfs3(const bool dynamic) {
  const double one_over_nlam_ = 1.0 / (num_ins_ * lambda_);
  const double one_over_lam_ = 1.0 / lambda_;
  int i = 0;
  double delta_alpha_i = 0.0;
  double alpha_i_old = 0.0;
  double yi = 0.0;

  init_w_za_over_n();
  calculate_duality_gap(true, false);
  if (duality_gap_ <= stop_criterion_)
    return;
  double gap_pre = duality_gap_;
  int pre_sfs_itr = 1;

  if (!dynamic) {
    sfs3(true);
  }

  int nss_size = nss_index_.size();

  std::vector<std::uniform_int_distribution<>> uni_distri;
  std::uniform_int_distribution<> uni_dist(0, nss_size - 1);
  uni_distri.push_back(uni_dist);
  auto ins_is_begin_it = std::begin(nss_index_);
  std::default_random_engine g;
  auto random_it = std::next(ins_is_begin_it, uni_distri[0](g));
  for (itr_ = 1; itr_ < max_iter_ && duality_gap_ > stop_criterion_; ++itr_) {
    for (int ir = 0; ir < num_ins_; ++ir) {
      random_it = std::next(ins_is_begin_it, uni_distri[0](g));
      i = *random_it;
      alpha_i_old = dual_var_[i];
      yi = y_[i];
      delta_alpha_i =
          (1.0 - gamma_ * alpha_i_old - yi * (x_.row(i) * primal_var_)(0)) /
          (gamma_ + zi_sq_[i] * one_over_nlam_);
      delta_alpha_i =
          std::max(-alpha_i_old, std::min(1.0 - alpha_i_old, delta_alpha_i));
      dual_var_[i] += delta_alpha_i;

      za_over_n_ += (yi * delta_alpha_i * one_over_n_) * x_.row(i);
      for (auto &&j : nfs_index_) {
        primal_var_[j] =
            fsss::sign(one_over_lam_ * za_over_n_[j]) *
            std::max(0.0, std::abs(one_over_lam_ * za_over_n_[j]) - 1.0);
      }
    }
    if (itr_ % frequency_cal_gap_ == 0) {
      calculate_duality_gap(true, false);
      if (duality_gap_ < stop_criterion_)
        return;
      if ((duality_gap_ / gap_pre < frequency_sfs3_ || itr_ <= 2) && dynamic) {
        gap_pre = duality_gap_;
        pre_sfs_itr = itr_;
        sfs3(false);
        if (nss_index_.size() == 0)
          return;
        ins_is_begin_it = std::begin(nss_index_);
        std::uniform_int_distribution<> u_d(0, nss_index_.size() - 1);
        uni_distri[0] = u_d;
      }
    }
  }
}
 int testSQLiteDatabaseConnection()
 {
     SQLiteDatabaseConnection connection;
     QFile file("sqlitetest.db");
     
     std::cerr << "Removing database test file \"sqlitetest.db\"..." << std::endl;
     if (file.exists())
         file.remove();
     
     std::cerr << "Opening \"sqlitetest.db\"..." << std::endl;
     connection.open("sqlitetest.db");
     CHECK(connection.isDBOpen());
     
     std::cerr << "Closing database..." << std::endl;
     connection.close();
     CHECK(!connection.isDBOpen());
     
     std::cerr << "Reopening \"sqlitetest.db\"..." << std::endl;
     connection.open("sqlitetest.db");
     CHECK(connection.isDBOpen());
     
     RoutingNode node(25, 51.0, 7.0);
     std::cerr << "Save Node..." << std::endl;
     CHECK(connection.saveNode(node));
     node = RoutingNode(26, 51.5, 7.5);
     CHECK(connection.saveNode(node));
     CHECK(*connection.getNodeByID(26) == node);
     CHECK(*connection.getNodeByID(RoutingNode::convertIDToLongFormat(26)) == node);
     
     RoutingEdge edge(45, 25, 26);
     std::cerr << "Save Edge..." << std::endl;
     edge.setCycleBarrier(true);
     edge.setCyclewayType(5);
     CHECK(connection.saveEdge(edge, "Teststraße"));
     CHECK_EQ_TYPE(connection.getStreetName(edge), "Teststraße", QString);
     edge = RoutingEdge(46, 26, 25);
     CHECK(connection.saveEdge(edge));
     
     GPSPosition min(50.0, 6.0);
     GPSPosition max(52.0, 8.0);
     QVector<boost::shared_ptr<RoutingNode> > list = connection.getNodes(min, max);
     CHECK(!list.isEmpty());
     CHECK(list.size() == 2);
     
     std::cerr << "Node 0 from DB: " << *(list[0]) << std::endl;
     std::cerr << "Node 1 from DB: " << *(list[1]) << std::endl;
     CHECK((*list[0] == node) || (*list[1] == node));
     
     boost::minstd_rand generator(42u);
     boost::uniform_real<> uni_dist(50, 52);
     boost::variate_generator<boost::minstd_rand&, boost::uniform_real<> > uni(generator, uni_dist);
     
     std::cerr << "Inserting 10000 Nodes within one transaction..." << std::endl;
     bool successInsertManyNodes = true;
     CHECK(connection.beginTransaction());
     for (int i=0; i<10000; i++)
     {
         node = RoutingNode(i + 100, uni(), uni() - (51.0 - 7.0));
         successInsertManyNodes = successInsertManyNodes && connection.saveNode(node);
     }
     CHECK(successInsertManyNodes);
     CHECK(connection.endTransaction());
     std::cerr << "Hier erwartet: Resultcode 19 (-> Constraint failed)" << std::endl;
     CHECK(!connection.saveNode(node));
     
     boost::shared_ptr<RoutingEdge> dbEdge(connection.getEdgeByEdgeID(46));
     CHECK_EQ(edge, *dbEdge);
     
     QVector<boost::shared_ptr<RoutingEdge> > edgeList;
     edgeList = connection.getEdgesByStartNodeID(26);
     CHECK_EQ(edge, *edgeList[0]);
     edgeList = connection.getEdgesByStartNodeID(26);
     CHECK_EQ(edge, *edgeList[0]);
     
     edgeList = connection.getEdgesByEndNodeID(25);
     CHECK_EQ(edge, *edgeList[0]);
     edgeList = connection.getEdgesByEndNodeID(25);
     CHECK_EQ(edge, *edgeList[0]);
     
     
     std::cerr << "Inserting 10000 Edges within one transaction..." << std::endl;
     bool successInsertManyEdges = true;
     CHECK(connection.beginTransaction());
     for (int i=0; i<10000; i++)
     {
         edge = RoutingEdge(i + 100, i+99, i+100);
         successInsertManyEdges = successInsertManyEdges && connection.saveEdge(edge);
     }
     CHECK(successInsertManyEdges);
     CHECK(connection.endTransaction());
     std::cerr << "Hier erwartet: Resultcode 19 (-> Constraint failed)" << std::endl;
     CHECK(!connection.saveEdge(edge));
     
     
     edgeList = connection.getEdgesByStartNodeID(99);
     CHECK(!edgeList.isEmpty());
     edgeList = connection.getEdgesByStartNodeID(100);
     CHECK(!edgeList.isEmpty());
     
     CHECK(connection.beginTransaction());
     CHECK(connection.deleteEdge(99, 100));
     CHECK(connection.deleteEdge(100, 101));
     CHECK(connection.endTransaction());
     
     edgeList = connection.getEdgesByStartNodeID(99);
     CHECK(edgeList.isEmpty());
     edgeList = connection.getEdgesByStartNodeID(100);
     CHECK(edgeList.isEmpty());
     
     return EXIT_SUCCESS;
 }
Ejemplo n.º 13
0
void elastic_soft_insensitive_psdca::train_ss(const bool dynamic) {
  int i = 0;
  double yi = 0.0;
  double delta_alpha_i = 0.0, pdelta_alpha_i = 0.0, mdelta_alpha_i = 0.0,
         delta_denominator = 0.0;
  double alpha_i_old = 0.0;

  const double one_over_nlam_ = 1.0 / (num_ins_ * lambda_);
  const double one_over_lam_ = 1.0 / lambda_;

  init_w_za_over_n();
  calculate_duality_gap(true, false);
  if (duality_gap_ <= stop_criterion_)
    return;
  double gap_old = duality_gap_;
  double gap_pre = duality_gap_;
  if (!dynamic)
    initial_safe_feature_screen(true);

  int nss_size = nss_index_.size();

  std::vector<std::uniform_int_distribution<>> uni_distri;
  std::uniform_int_distribution<> uni_dist(0, nss_size - 1);
  uni_distri.push_back(uni_dist);
  auto ins_is_begin_it = std::begin(nss_index_);
  std::default_random_engine g;
  auto random_it = std::next(ins_is_begin_it, uni_distri[0](g));
  for (itr_ = 1; itr_ < max_iter_ && duality_gap_ > stop_criterion_; ++itr_) {
    if (nss_size == 0 || nfs_index_.size() == 0)
      return;
    for (int ir = 0; ir < num_ins_; ++ir) {
      random_it = std::next(ins_is_begin_it, uni_distri[0](g));
      i = *random_it;
      yi = y_[i];
      alpha_i_old = dual_var_[i];
      delta_denominator = 1.0 / (gamma_ + zi_sq_[i] * one_over_nlam_);
      delta_alpha_i = delta_denominator * (yi - gamma_ * alpha_i_old -
                                           (x_.row(i) * primal_var_)(0));
      pdelta_alpha_i = delta_alpha_i + epsilon_ * delta_denominator;
      mdelta_alpha_i = delta_alpha_i - epsilon_ * delta_denominator;

      if (-pdelta_alpha_i > alpha_i_old) {
        pdelta_alpha_i = std::max(-1.0 - alpha_i_old,
                                  std::min(1.0 - alpha_i_old, pdelta_alpha_i));
        dual_var_[i] += pdelta_alpha_i;
        if (std::abs(pdelta_alpha_i) > 0.0)
          za_over_n_ += (pdelta_alpha_i * one_over_n_) * x_.row(i);
      } else if (-mdelta_alpha_i < alpha_i_old) {
        mdelta_alpha_i = std::max(-1.0 - alpha_i_old,
                                  std::min(1.0 - alpha_i_old, mdelta_alpha_i));
        dual_var_[i] += mdelta_alpha_i;
        if (std::abs(mdelta_alpha_i) > 0.0)
          za_over_n_ += (mdelta_alpha_i * one_over_n_) * x_.row(i);
      } else {
        dual_var_[i] = 0.0;
        if (std::abs(alpha_i_old) > 0.0)
          za_over_n_ -= (alpha_i_old * one_over_n_) * x_.row(i);
      }

      for (auto &&j : nfs_index_) {
        primal_var_[j] =
            fsss::sign(one_over_lam_ * za_over_n_[j]) *
            std::max(0.0, std::abs(one_over_lam_ * za_over_n_[j]) - 1.0);
      }
    }
    if (itr_ % frequency_cal_gap_ == 0) {
      calculate_duality_gap(true, false);
      if ((duality_gap_ / gap_old < frequency_sfs3_ || itr_ < 2) && dynamic) {
        gap_old = duality_gap_;
        initial_safe_sample_screen(true);
        if (nss_index_.size() == 0)
          return;
        ins_is_begin_it = std::begin(nss_index_);
        std::uniform_int_distribution<> u_d(0, nss_index_.size() - 1);
        uni_distri[0] = u_d;
      } else if (std::abs(gap_pre - duality_gap_) < 0.1 * stop_criterion_ &&
                 dynamic) {
        inverse_screen();
        if ((sam_screening_index_.first.size() +
             sam_screening_index_.second.size() + num_inv_sam_scr_) <
            screening_end_rate_ * num_ins_) {
          safe_sample_screen(true);
          if (nss_index_.size() == 0)
            return;
          ins_is_begin_it = std::begin(nss_index_);
          std::uniform_int_distribution<> u_d(0, nss_index_.size() - 1);
          uni_distri[0] = u_d;
        }
      }
      gap_pre = duality_gap_;
    }
    // std::cout << itr_ << " optimization end gap: " << duality_gap_ << " "
    //           << primal_obj_value_ << ", dov " << dual_obj_value_ << " "
    //           << num_fea_ - w_nnz_index_.size() << " "
    //           << sam_screening_index_.second.size() << " "
    //           << sam_screening_index_.first.size() << std::endl;
  }
}
Ejemplo n.º 14
0
Eigen::VectorXd l2r_l1hinge_spdc::train_warm_start(const Eigen::VectorXd &alp) {
  set_alpha(alp);
  alpha_ = Eigen::VectorXd::Constant(num_ins_, C);
  // set_w_by_alpha(alpha_);
  double alpha_old = 0.0;
  std::default_random_engine g;
  std::uniform_int_distribution<> uni_dist(0, num_ins_ - 1);
  const auto ins_is_begin_it = std::begin(active_index_);
  w_ = Eigen::VectorXd::Zero(num_fea_);
  spdc_w_ = w_;
  auto random_it = std::next(ins_is_begin_it, uni_dist(g));
  gamma_ = 0.1;
  double tau_ = std::sqrt(gamma_ / (1.0 * (1.0 / C))) / R_;
  double sigma_ = std::sqrt(((1.0 / C) * 1.0) / gamma_) / R_;
  double theta_ =
      1.0 - 1.0 / ((1.0 / C) + R_ * std::sqrt((1.0 / C) / (1.0 * gamma_)));
  // double tau_ = std::sqrt(1.0) / (2.0 * R_);
  // double sigma_ = std::sqrt(1.0 / 1.0) / (2.0 * R_);
  // double theta_ = 1.0 - 1.0 / (1.0 + (R_ / gamma_) * std::sqrt(1.0 / 1.0));
  const double sig_gam = -sigma_ * gamma_ - 1.0;

  int i = 0, itr_ = 0;
  double delta_alpha_i = 0.0, yi = 0.0, beta_i = 0.0, alpha_i_new = 0.0,
         eta = 0.0;
  Eigen::VectorXd delta_v(num_fea_), w_new(num_fea_);
  calculate_duality_gap(true, true);
  std::cout << tau_ << " " << sigma_ << " " << theta_ << " " << R_ << std::endl;
  std::cout << " start optimization " << max_iteration << std::endl;
  for (itr_ = 1; itr_ < max_iteration && duality_gap_ > 1e-6; ++itr_) {
    for (int ir = 0; ir < num_ins_; ++ir) {
      random_it = std::next(ins_is_begin_it, uni_dist(g));
      i = *random_it;
      yi = y_[i];
      // beta_i = -(sigma_ * (yi * (x_.row(i) * spdc_w_)(0) - 1.0)) + alpha_[i];
      beta_i = (sigma_ * (yi * (x_.row(i) * spdc_w_)(0) - 1.0) - alpha_[i]) /
               (sig_gam);
      alpha_i_new = std::min(C, std::max(0.0, beta_i));
      delta_alpha_i = alpha_i_new - alpha_[i];
      alpha_[i] = alpha_i_new;
      delta_v = (yi * delta_alpha_i) * x_.row(i);
      // w_new = (1.0 / (1.0 + tau_)) * (w_ - tau_ * (za_ - delta_v));
      for (int j = 0; j < num_fea_; ++j) {
        eta = (1.0 / (1.0 + tau_)) * (w_[j] + tau_ * (za_[j] + delta_v[j]));
        spdc_w_[j] = eta + theta_ * (eta - w_[j]);
        w_[j] = eta;
      }
      // spdc_w_ = w_new + theta_ * (w_new - w_);
      // w_ = w_new;
      // for (srm_iit it(x_, i); it; ++it)
      //   za_[it.index()] += delta_v[it.index()];
      za_ += delta_v;
    }
    // if (itr_) {
    calculate_duality_gap(true, true);
    std::cout << itr_ << " optimization end gap : " << duality_gap_ << " "
              << primal_obj_value_ << " " << dual_obj_value_ << std::endl;
  }
  std::cout << itr_ << " optimization end gap : " << duality_gap_ << " "
            << primal_obj_value_ << " " << dual_obj_value_ << std::endl;
  std::cout << w_.transpose() << std::endl;
  return w_;
}
Ejemplo n.º 15
0
// Random double from [0,1)
double r01(boost::mt19937& rng) {
    boost::uniform_real<> uni_dist(0, 1);
    boost::variate_generator<boost::mt19937&, boost::uniform_real<> > uni(rng, uni_dist);
    return uni();
}
Ejemplo n.º 16
0
int main()
{
  // Define a random number generator and initialize it with a reproducible
  // seed.
  base_generator_type generator(42);

  std::cout << "10 samples of a uniform distribution in [0..1):\n";

  // Define a uniform random number distribution which produces "double"
  // values between 0 and 1 (0 inclusive, 1 exclusive).
  boost::uniform_real<> uni_dist(0,1);
  boost::variate_generator<base_generator_type&, boost::uniform_real<> > uni(generator, uni_dist);

  std::cout.setf(std::ios::fixed);
  // You can now retrieve random numbers from that distribution by means
  // of a STL Generator interface, i.e. calling the generator as a zero-
  // argument function.
  for(int i = 0; i < 10; i++)
    std::cout << uni() << '\n';

  /*
   * Change seed to something else.
   *
   * Caveat: std::time(0) is not a very good truly-random seed.  When
   * called in rapid succession, it could return the same values, and
   * thus the same random number sequences could ensue.  If not the same
   * values are returned, the values differ only slightly in the
   * lowest bits.  A linear congruential generator with a small factor
   * wrapped in a uniform_smallint (see experiment) will produce the same
   * values for the first few iterations.   This is because uniform_smallint
   * takes only the highest bits of the generator, and the generator itself
   * needs a few iterations to spread the initial entropy from the lowest bits
   * to the whole state.
   */
  generator.seed(static_cast<unsigned int>(std::time(0)));

  std::cout << "\nexperiment: roll a die 10 times:\n";

  // You can save a generator's state by copy construction.
  base_generator_type saved_generator = generator;

  // When calling other functions which take a generator or distribution
  // as a parameter, make sure to always call by reference (or pointer).
  // Calling by value invokes the copy constructor, which means that the
  // sequence of random numbers at the caller is disconnected from the
  // sequence at the callee.
  experiment(generator);

  std::cout << "redo the experiment to verify it:\n";
  experiment(saved_generator);

  // After that, both generators are equivalent
  assert(generator == saved_generator);

  // as a degenerate case, you can set min = max for uniform_int
  boost::uniform_int<> degen_dist(4,4);
  boost::variate_generator<base_generator_type&, boost::uniform_int<> > deg(generator, degen_dist);
  std::cout << deg() << " " << deg() << " " << deg() << std::endl;
  
  {
    // You can save the generator state for future use.  You can read the
    // state back in at any later time using operator>>.
    std::ofstream file("rng.saved", std::ofstream::trunc);
    file << generator;
  }

  return 0;
}
Ejemplo n.º 17
0
void elastic_soft_insensitive_psdca::train(void) {
  int i = 0;
  double yi = 0.0;
  double delta_alpha_i = 0.0, pdelta_alpha_i = 0.0, mdelta_alpha_i = 0.0,
         delta_denominator = 0.0;
  double alpha_i_old = 0.0;

  const double one_over_nlam_ = 1.0 / (num_ins_ * lambda_);
  const double one_over_lam_ = 1.0 / lambda_;

  std::default_random_engine g;
  std::uniform_int_distribution<> uni_dist(0, num_ins_ - 1);

  init_w_za_over_n();
  calculate_duality_gap(true, false);
  const auto ins_is_begin_it = std::begin(all_ins_index_);
  auto random_it = std::next(ins_is_begin_it, uni_dist(g));

  for (itr_ = 1; itr_ < max_iter_ && duality_gap_ > stop_criterion_; ++itr_) {
    for (int ir = 0; ir < num_ins_; ++ir) {
      random_it = std::next(ins_is_begin_it, uni_dist(g));
      i = *random_it;
      yi = y_[i];
      alpha_i_old = dual_var_[i];
      delta_denominator = 1.0 / (gamma_ + zi_sq_[i] * one_over_nlam_);
      delta_alpha_i = delta_denominator * (yi - gamma_ * alpha_i_old -
                                           (x_.row(i) * primal_var_)(0));
      pdelta_alpha_i = delta_alpha_i + epsilon_ * delta_denominator;
      mdelta_alpha_i = delta_alpha_i - epsilon_ * delta_denominator;

      if (-pdelta_alpha_i > alpha_i_old) {
        pdelta_alpha_i = std::max(-1.0 - alpha_i_old,
                                  std::min(1.0 - alpha_i_old, pdelta_alpha_i));
        dual_var_[i] += pdelta_alpha_i;
        if (std::abs(pdelta_alpha_i) > 0.0)
          za_over_n_ += (pdelta_alpha_i * one_over_n_) * x_.row(i);
      } else if (-mdelta_alpha_i < alpha_i_old) {
        mdelta_alpha_i = std::max(-1.0 - alpha_i_old,
                                  std::min(1.0 - alpha_i_old, mdelta_alpha_i));
        dual_var_[i] += mdelta_alpha_i;
        if (std::abs(mdelta_alpha_i) > 0.0)
          za_over_n_ += (mdelta_alpha_i * one_over_n_) * x_.row(i);
      } else {
        dual_var_[i] = 0.0;
        if (std::abs(alpha_i_old) > 0.0)
          za_over_n_ -= (alpha_i_old * one_over_n_) * x_.row(i);
      }

      for (int j = 0; j < num_fea_; ++j) {
        primal_var_[j] =
            fsss::sign(one_over_lam_ * za_over_n_[j]) *
            std::max(0.0, std::abs(one_over_lam_ * za_over_n_[j]) - 1.0);
      }
    }
    if (itr_ % frequency_cal_gap_ == 0) {
      calculate_duality_gap(true, false);
      // std::cout << itr_ << " optimization end gap : " << duality_gap_ << " "
      //           << primal_obj_value_ << " " << dual_obj_value_ << std::endl;
    }
  }
}