Пример #1
0
void SRBM::
CondProb(double *pIn, int len, vector<double> &rProbs,  PROB_TYPE pType)
{
  if (pType == V_GIVEN_H && len != m_hNum)
  {
    fprintf(stderr, "Error: inLength %d vs hNum %d\n", len, m_hNum);
    exit(0);
  }
  
  if (pType == H_GIVEN_V && len != m_vNum)
  {
    fprintf(stderr, "Error: inLength %d vs vNum %d\n", len, m_vNum);
    exit(0);
  }


	if (pType == H_GIVEN_V)
  {
		// compute p(h_i|v), using the ith column of W
		rProbs.resize(m_hNum);
    for (int i = 0; i < m_hNum; ++i)
    {
			double act = m_pHB[i];
			for (int k = 0; k < m_vNum; ++k)
				act += m_ppW[k][i] * pIn[k];
			
			rProbs[i] = sigmoid(act);

//      getCol(m_ppW, m_vNum, m_hNum, i, pWeight);
//			rProbs[i] = sigmoid(m_pHB[i] + dotProduct(pWeight, m_vNum, pIn, len));
#if 0			
			if (m_verbose == true && i % 2 == 0)
			{
      	fprintf(stderr, "\n\ncolumn %d:", i);
				disVec(pWeight, m_vNum);
				fprintf(stderr, "input vec:");
				disVec(pIn, m_vNum);
				fprintf(stderr, "\ndot Product:%.2f, x:%.2f, probability:%.2f\n", 
								dotProduct(pWeight, m_vNum, pIn,len),
								m_pHB[i] + dotProduct(pWeight, m_vNum, pIn,len),
								rProbs[i]);
			}
#endif
    }
  }
  else
	{
		// compute p(v_i|h), using the ith row of W
		rProbs.resize(m_vNum);
    for (int i = 0; i < m_vNum; ++i)
      rProbs[i] = sigmoid(m_pVB[i] + dotProduct(m_ppW[i], m_hNum, pIn, len));
  }
}
Пример #2
0
void Particles::initialize() {
  int displayxi = int(displayx); 
  int displayyi = int(displayy);
  int radiusi = int(radius);
  int wallwidthi = int(wallwidth);
  srand(time(NULL));
    
  for( int i = 0; i<Nparticles; i++ ) {
    float tempR = rand() % ((displayyi-24)/2);
    float tempAngle = rand() % 360;
    float tempX = -tempR*sin(tempAngle*conv);
    float tempY = tempR*cos(tempAngle*conv);
    sf::Vector2f temp(tempX, tempY);
    sf::Vector2f placeParticles = temp + centerofmap;
   
    particles.setPosition( placeParticles );
    
    sf::Vector2f currentParticle = particles.getPosition();
    sf::Vector2f tempPos(0,0);
    sf::Vector2f disVec(0,0);
    float distance = 0;

    // Need to check if particles overlap during initialization
    // if it does overlap, just move it by some amount
    // We do not need to check if there is just one particle
    if( i==0 ) {
      storeParticles.push_back( particles );
    }
    else { 
      for( it = storeParticles.begin(); it != storeParticles.end(); it++ ) {
	tempPos = (*it).getPosition();
	disVec = currentParticle - tempPos;
	
	distance = sqrt(pow(disVec.x,2) + pow(disVec.y,2) );

	if( distance < 2.2*radius ) deleted++;

	while( distance < 2.2*radius ){
	  (particles).setPosition( rand()%(displayxi-2*wallwidthi-3*radiusi)+(wallwidthi+1.5*radiusi), rand()%(displayyi-3*radiusi-2*wallwidthi)+(wallwidthi+1.5*radiusi) );
	  
	  currentParticle = particles.getPosition();
	  tempPos = (*it).getPosition();
	  disVec = currentParticle - tempPos;
	  distance = sqrt(pow(disVec.x,2) + pow(disVec.y,2) );
	  if( i>=2 ) {
	    for( bit=storeParticles.begin(); bit != it; bit++ ){
	      tempPos = (*bit).getPosition();
	      disVec = currentParticle - tempPos;
	      distance = sqrt( pow(disVec.x,2)+pow(disVec.y,2));
	      if( distance < 2.2*radius ){
		(particles).setPosition( rand()%(displayxi-2*wallwidthi-3*radiusi)+(wallwidthi+1.5*radiusi), rand()%(displayyi-3*radiusi-2*wallwidthi)+(wallwidthi+1.5*radiusi) );
	      }
	    }
	  }
	} 
      }
      storeParticles.push_back(particles);    
    }
  } 
}