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)); } }
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); } } }