def main_loop(self): eps_vec = .5 * np.ones(self.N) i = 1 while np.any(np.isnan(self.final_messages)): Kprime = len(self.map) if self.verbose: print 'Remaining ', Kprime, ' nodes are: ' print self.map ## special case for one remaining node if Kprime == 1: self.TOTAL_TRANSMISSIONS += 1 while not transmit_messages(1, eps_vec[self.map]): self.TOTAL_TRANSMISSIONS += 1 self.final_messages[self.map] = self.W[self.map] else: ## Generate next m transmissions (V, U) = alignment('mixed', self.J, 1e-4, 100, False) m = np.shape(V)[0] if self.verbose: print 'Minimum rank is ', m # generate next symbol based on current V L = len(self.tx_symbols) if i == 1: L = 0 unsolved = np.ones(Kprime) > 0 m_i = 0 while np.all(unsolved) and m_i < m: self.tx_symbols = np.append( self.tx_symbols, Symbol(V[m_i, :], self.W, self.map)) R = transmit_messages(1, eps_vec[self.map]) if i == 1: self.rx_symbols = R else: self.rx_symbols = np.bmat([self.rx_symbols, R]) if self.verbose: print 'Transmission ', m_i + 1, '/', m print self.rx_symbols.astype(int) self.TOTAL_TRANSMISSIONS += 1 # solve for messages if possible #SEND TO TARGET HERE (unsolved, final_messages) = bs_decode_messages( self.dest, Kprime, self.map, self.rx_symbols, self.tx_symbols, self.A, self.I, self.J, self.W, self.final_messages, self.verbose) #RECEIVE FROM TARGET HERE #INTERPRET ACKS HERE m_i += 1 i += 1 self.final_messages = final_messages # update data structures self.map = np.nonzero(np.isnan( self.final_messages.reshape(-1)))[0] self.rx_symbols = self.rx_symbols[unsolved, :] self.J = self.J[unsolved, :] self.I = self.I[unsolved, :] self.A = self.A[unsolved, :] if self.verbose: print 'Total number of transmissions: ', self.TOTAL_TRANSMISSIONS return self.TOTAL_TRANSMISSIONS
def main_loop(self): eps_vec = 0.5 * np.ones(self.N) i = 1 while np.any(np.isnan(self.final_messages)): Kprime = len(self.map) if self.verbose: print "Remaining ", Kprime, " nodes are: " print self.map ## special case for one remaining node if Kprime == 1: self.TOTAL_TRANSMISSIONS += 1 while not transmit_messages(1, eps_vec[self.map]): self.TOTAL_TRANSMISSIONS += 1 self.final_messages[self.map] = self.W[self.map] else: ## Generate next m transmissions (V, U) = alignment("mixed", self.J, 1e-4, 100, False) m = np.shape(V)[0] if self.verbose: print "Minimum rank is ", m # generate next symbol based on current V L = len(self.tx_symbols) if i == 1: L = 0 unsolved = np.ones(Kprime) > 0 m_i = 0 while np.all(unsolved) and m_i < m: self.tx_symbols = np.append(self.tx_symbols, Symbol(V[m_i, :], self.W, self.map)) R = transmit_messages(1, eps_vec[self.map]) if i == 1: self.rx_symbols = R else: self.rx_symbols = np.bmat([self.rx_symbols, R]) if self.verbose: print "Transmission ", m_i + 1, "/", m print self.rx_symbols.astype(int) self.TOTAL_TRANSMISSIONS += 1 # solve for messages if possible # SEND TO TARGET HERE (unsolved, final_messages) = bs_decode_messages( self.dest, Kprime, self.map, self.rx_symbols, self.tx_symbols, self.A, self.I, self.J, self.W, self.final_messages, self.verbose, ) # RECEIVE FROM TARGET HERE # INTERPRET ACKS HERE m_i += 1 i += 1 self.final_messages = final_messages # update data structures self.map = np.nonzero(np.isnan(self.final_messages.reshape(-1)))[0] self.rx_symbols = self.rx_symbols[unsolved, :] self.J = self.J[unsolved, :] self.I = self.I[unsolved, :] self.A = self.A[unsolved, :] if self.verbose: print "Total number of transmissions: ", self.TOTAL_TRANSMISSIONS return self.TOTAL_TRANSMISSIONS
def main_loop(self): #change to compute_matrixes smsgx = TxSerialMsg() self.TDMA_MODE = 0; eps_vec = .5*np.ones(self.N) i = 1 while np.any(np.isnan(self.final_messages)): Kprime = len(self.map); if self.verbose: print 'Remaining ', Kprime, ' nodes are: ' print self.map ## special case for one remaining node if Kprime == 1: self.TOTAL_TRANSMISSIONS += 1 while not transmit_messages(1, eps_vec[self.map]): self.TOTAL_TRANSMISSIONS += 1 self.final_messages[self.map] = self.W[self.map] else: ## Generate next m transmissions (V, U) = alignment('mixed', self.J, 1e-4, 100, False) m = np.shape(V)[0] if self.verbose: print 'Minimum rank is ', m # generate next symbol based on current V L = len(self.tx_symbols); if i == 1: L = 0 self.unsolved = np.ones(Kprime) > 0 m_i = 0 while np.all(self.unsolved) and m_i < m: self.tx_symbols = np.append(self.tx_symbols, Symbol(V[m_i,:], self.W, self.map)) R = transmit_messages(1, eps_vec[self.map]) if i == 1: self.rx_symbols = R else: self.rx_symbols = np.bmat([self.rx_symbols, R]) if self.verbose: print 'Transmission ', m_i+1, '/', m print self.rx_symbols.astype(int) self.TOTAL_TRANSMISSIONS += 1 # solve for messages if possible (self.unsolved, final_messages) = bs_decode_messages(self.dest, Kprime, self.map, self.rx_symbols, self.tx_symbols, self.A, self.I, self.J, self.W, self.final_messages, self.verbose) time.sleep(.2) print 'UNSOLVED: ', self.unsolved print 'MAP: ' , self.map #SEND TO TARGET HERE, rewrite these lines #smsg.set_crow print 'tx map ', self.map smsgx.set_messageid(255) #now something to represent index coding, 255? smsgx.set_data(np.dot(V[m_i],self.W,)) ##also send own message w[i] for comparison???? smsgx.set_V_row(V[m_i]) smsgx.set_current_transmission(self.TOTAL_TRANSMISSIONS) self.mif.sendMsg(self.source, 0xFFFF, smsgx.get_amType(), 0, smsgx) #time.sleep(1) #.125 too fast? #INTERPRET ACKS IN RECEIVE FUNCTION m_i += 1 i += 1 self.final_messages = final_messages #still need final messages?? # update data structures self.map = np.nonzero(np.isnan(self.final_messages.reshape(-1)))[0] self.rx_symbols = self.rx_symbols[self.unsolved, :] self.J = self.J[self.unsolved, :] self.I = self.I[self.unsolved, :] self.A = self.A[self.unsolved, :] if self.verbose: print 'Total number of transmissions: ', self.TOTAL_TRANSMISSIONS return self.TOTAL_TRANSMISSIONS
def main_loop(self): #change to compute_matrixes smsgx = TxSerialMsg() self.TDMA_MODE = 0 eps_vec = .5 * np.ones(self.N) i = 1 while np.any(np.isnan(self.final_messages)): Kprime = len(self.map) if self.verbose: print 'Remaining ', Kprime, ' nodes are: ' print self.map ## special case for one remaining node if Kprime == 1: self.TOTAL_TRANSMISSIONS += 1 while not transmit_messages(1, eps_vec[self.map]): self.TOTAL_TRANSMISSIONS += 1 self.final_messages[self.map] = self.W[self.map] else: ## Generate next m transmissions (V, U) = alignment('mixed', self.J, 1e-4, 100, False) m = np.shape(V)[0] if self.verbose: print 'Minimum rank is ', m # generate next symbol based on current V L = len(self.tx_symbols) if i == 1: L = 0 self.unsolved = np.ones(Kprime) > 0 m_i = 0 while np.all(self.unsolved) and m_i < m: self.tx_symbols = np.append( self.tx_symbols, Symbol(V[m_i, :], self.W, self.map)) R = transmit_messages(1, eps_vec[self.map]) if i == 1: self.rx_symbols = R else: self.rx_symbols = np.bmat([self.rx_symbols, R]) if self.verbose: print 'Transmission ', m_i + 1, '/', m print self.rx_symbols.astype(int) self.TOTAL_TRANSMISSIONS += 1 # solve for messages if possible (self.unsolved, final_messages) = bs_decode_messages( self.dest, Kprime, self.map, self.rx_symbols, self.tx_symbols, self.A, self.I, self.J, self.W, self.final_messages, self.verbose) time.sleep(.2) print 'UNSOLVED: ', self.unsolved print 'MAP: ', self.map #SEND TO TARGET HERE, rewrite these lines #smsg.set_crow print 'tx map ', self.map smsgx.set_messageid( 255) #now something to represent index coding, 255? smsgx.set_data(np.dot( V[m_i], self.W, )) ##also send own message w[i] for comparison???? smsgx.set_V_row(V[m_i]) smsgx.set_current_transmission(self.TOTAL_TRANSMISSIONS) self.mif.sendMsg(self.source, 0xFFFF, smsgx.get_amType(), 0, smsgx) #time.sleep(1) #.125 too fast? #INTERPRET ACKS IN RECEIVE FUNCTION m_i += 1 i += 1 self.final_messages = final_messages #still need final messages?? # update data structures self.map = np.nonzero(np.isnan( self.final_messages.reshape(-1)))[0] self.rx_symbols = self.rx_symbols[self.unsolved, :] self.J = self.J[self.unsolved, :] self.I = self.I[self.unsolved, :] self.A = self.A[self.unsolved, :] if self.verbose: print 'Total number of transmissions: ', self.TOTAL_TRANSMISSIONS return self.TOTAL_TRANSMISSIONS