LaNAS/Distributed_LaNAS/server/Node.py [115:179]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        return self.x_bar + 2*Cp*math.sqrt( 2* math.log(self.parent.n) / self.n )
    
    def get_xbar(self):
        return self.x_bar

    def get_n(self):
        return self.n
    
    def get_parent_str(self):
        return self.parent.get_name()

    def train(self):
        if self.parent == None and self.is_root == True:
        # training starts from the bag
            assert len(self.bag) > 0
            self.classifier.update_samples(self.bag )
            self.good_kid_data, self.bad_kid_data = self.classifier.split_data()
        elif self.is_leaf:
            if self.is_good_kid:
                self.bag = self.parent.good_kid_data
            else:
                self.bag = self.parent.bad_kid_data
        else:
            if self.is_good_kid:
                self.bag = self.parent.good_kid_data
                self.classifier.update_samples(self.parent.good_kid_data )
                self.good_kid_data, self.bad_kid_data = self.classifier.split_data()
            else:
                self.bag = self.parent.bad_kid_data
                self.classifier.update_samples(self.parent.bad_kid_data )
                self.good_kid_data, self.bad_kid_data = self.classifier.split_data()
        if len(self.bag) == 0:
           self.x_bar = float('inf')
           self.n     = 0
        else:
           self.x_bar = np.mean( np.array(list(self.bag.values())) )
           self.n     = len( self.bag.values() )

    def predict(self):
        if self.parent == None and self.is_root == True and self.is_leaf == False:
            self.good_kid_data, self.bad_kid_data = self.classifier.split_predictions(self.bag)
        elif self.is_leaf:
            if self.is_good_kid:
                self.bag = self.parent.good_kid_data
            else:
                self.bag = self.parent.bad_kid_data
        else:
            if self.is_good_kid:
                self.bag = self.parent.good_kid_data
                self.good_kid_data, self.bad_kid_data = self.classifier.split_predictions(self.parent.good_kid_data)
            else:
                self.bag = self.parent.bad_kid_data
                self.good_kid_data, self.bad_kid_data = self.classifier.split_predictions(self.parent.bad_kid_data)

    def sample_arch(self):
        if len(self.bag) == 0:
            return None
        net_str = np.random.choice( list(self.bag.keys() ) )
        del self.bag[net_str]
        return json.loads(net_str )
    
    def clear_data(self):
        self.bag.clear()
        self.bad_kid_data.clear()
        self.good_kid_data.clear()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



LaNAS/one-shot_LaNAS/LaNAS/Node.py [132:196]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        return self.x_bar + 2*Cp*math.sqrt( 2* math.log(self.parent.n) / self.n )
    
    def get_xbar(self):
        return self.x_bar

    def get_n(self):
        return self.n
    
    def get_parent_str(self):
        return self.parent.get_name()

    def train(self):
        if self.parent == None and self.is_root == True:
        # training starts from the bag
            assert len(self.bag) > 0
            self.classifier.update_samples(self.bag )
            self.good_kid_data, self.bad_kid_data = self.classifier.split_data()
        elif self.is_leaf:
            if self.is_good_kid:
                self.bag = self.parent.good_kid_data
            else:
                self.bag = self.parent.bad_kid_data
        else:
            if self.is_good_kid:
                self.bag = self.parent.good_kid_data
                self.classifier.update_samples(self.parent.good_kid_data )
                self.good_kid_data, self.bad_kid_data = self.classifier.split_data()
            else:
                self.bag = self.parent.bad_kid_data
                self.classifier.update_samples(self.parent.bad_kid_data )
                self.good_kid_data, self.bad_kid_data = self.classifier.split_data()
        if len(self.bag) == 0:
           self.x_bar = float('inf')
           self.n     = 0
        else:
           self.x_bar = np.mean( np.array(list(self.bag.values())) )
           self.n     = len( self.bag.values() )

    def predict(self):
        if self.parent == None and self.is_root == True and self.is_leaf == False:
            self.good_kid_data, self.bad_kid_data = self.classifier.split_predictions(self.bag)
        elif self.is_leaf:
            if self.is_good_kid:
                self.bag = self.parent.good_kid_data
            else:
                self.bag = self.parent.bad_kid_data
        else:
            if self.is_good_kid:
                self.bag = self.parent.good_kid_data
                self.good_kid_data, self.bad_kid_data = self.classifier.split_predictions(self.parent.good_kid_data)
            else:
                self.bag = self.parent.bad_kid_data
                self.good_kid_data, self.bad_kid_data = self.classifier.split_predictions(self.parent.bad_kid_data)

    def sample_arch(self):
        if len(self.bag) == 0:
            return None
        net_str = np.random.choice( list(self.bag.keys() ) )
        del self.bag[net_str]
        return json.loads(net_str )
    
    def clear_data(self):
        self.bag.clear()
        self.bad_kid_data.clear()
        self.good_kid_data.clear()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



