示例#1
0
void SolidSDF::createWeights(const CornerArray2f & phi,
                             FaceArray2Xf & uw,
                             FaceArray2Yf & vw)
{
    LOG_OUTPUT("Creating solid/fluid weights for velocities.");
    int iEnd = uw.nx() - 1;
    for (int j = 0; j < uw.ny(); ++j) {
        for (int i = 0; i < uw.nx(); ++i) {
            uw.face<LEFT>(i,j) = _weight(phi.corner<TOP_LEFT>(i,j),
                                         phi.corner<BOTTOM_LEFT>(i,j));
        }
        uw.face<RIGHT>(iEnd,j) = _weight(phi.corner<TOP_RIGHT>(iEnd,j),
                                         phi.corner<BOTTOM_RIGHT>(iEnd,j));
    }
        
    int jEnd = vw.ny() - 1;
    for (int i = 0; i < vw.nx(); ++i) {
        for (int j = 0; j < vw.ny(); ++j) {
            vw.face<BOTTOM>(i,j) = _weight(phi.corner<BOTTOM_RIGHT>(i,j),
                                           phi.corner<BOTTOM_LEFT>(i,j));
        }
        vw.face<TOP>(i,jEnd) = _weight(phi.corner<TOP_RIGHT>(i,jEnd),
                                       phi.corner<TOP_LEFT>(i,jEnd));
    }
}
示例#2
0
  void HiddenSynapse::inizialize_weight()
  {

    for(int i=0;i<_out;i++)
      {
        for(int s=0;s<_in;s++)
          {
            _weight(i,s)=((double)(rand())/(double)(RAND_MAX-1))-0.5;
            if(_weight(i,s)>0.5 || _weight(i,s)<-0.5)
              cout<<"Peso sballato: "<<_weight(i,s)<<" indice n: "<<i<<" indice l: "<<s<<"\n";
          }
      }
  }
示例#3
0
  void HiddenSynapse::adjuste_weight(double rate, int cicle, double momentum)
  {
    for (int i=0;i<_out;i++)
      {
        for (int j=0;j<_in;j++)
          {
            if(cicle==0 && _index==0)
              _previousDelta(i,j)=0;
            double tmp=_weight(i,j);
            _weight(i,j) -=rate*_gradient(i)*in_vect(j)-momentum*(_previousDelta(i,j));
            _previousDelta(i,j)=_weight(i,j)-tmp;

          }
      }
    for (int j=0;j<_in;j++)
      {
        error(j)=0;
      }

  }
示例#4
0
 double HiddenSynapse::get_input(int i)
 {
   DEBUG_MSG("get_input - invect size: " << in_vect.size() << " get param: " <<i);
   DEBUG_MSG("get_input - weight size: " << _weight.size1() <<"," << _weight.size2()<< " l size: " <<_in);
   double inp=0;
   for (int j=0;j<_in;j++)
     {
       inp +=in_vect(j)*_weight(i,j);
     }
   return inp;
 }
示例#5
0
 void HiddenSynapse::set_gradient(int i, double value)
 {
   DEBUG_MSG("set_gradient - gradient size: " << _gradient.size() << " get param: " <<i);
   DEBUG_MSG("set_gradient - weight size: " << _weight.size1() <<"," << _weight.size2()<< " l size: " <<_in);
   _gradient(i)=value;
   //double err=0;
   for (int j=0;j<_in;j++)
     {
       error(j) +=_gradient(i)*_weight(i,j);
     }
   DEBUG_MSG("set_gradient - error size: " << error.size());
   //error(i)=err;
   DEBUG_MSG("set_gradient - end");
 }
示例#6
0
文件: soctree.c 项目: rubicks/soctree
int soctree_size(soctree_t *p) {
  _node_t *root = _root(p);
  return root ? _weight(root) : -1;
}