void main() { char left,right; lcd("Press SW1"); sw1_press(); while(1) { left = in_d(0); right = in_d(1); if(left==1 && right==1) { forward(10); } else if(left==0 && right==1) { backward(1000); turn_right(800); } else if(left==1 && right==0) { backward(1000); turn_left(800); } else if(left==0 && right==0) { backward(1000); turn_left(1500); } } }
void LSH_DFE::generate_input_data(size_t features_num, size_t elements_num){ srand(unsigned(time(NULL))); in_d = InputData(elements_num, features_num); for(size_t i=0; i<elements_num; i++) for(size_t j=0; j<features_num; j++) in_d(i, j) = float(rand()) / float(RAND_MAX) * formalize_max; }
void LSH_DFE::init_data_structure(){ input_dfe = new float[in_d.size1() * in_d.size2()]; int index = 0; for(unsigned int i=0; i<in_d.size1(); i++) for(unsigned int j=0; j<in_d.size2(); j++) input_dfe[index++] = in_d(i, j); m_new_grid_cpu.resize(in_d.size1()); m_new_grid_dfe.resize(in_d.size1()); hash_set_dimensions(); }
void LSH_DFE::rehash_data_projection(){ // locality sensitive hashing using CPU // use int8_t to represent the result of every sub hash function // 128 / 8 = 16, which should be equal to DOUT int8_t temp[DOUT]; std::vector<float> mult(DOUT); for(unsigned int i=0; i<in_d.size1(); i++){ for(unsigned int j=0; j<DOUT; j++){ float data = 0.0f; for(unsigned int k=0; k<in_d.size2(); k++) data += in_d(i, k) * m_hash(j, k); mult[j] = data; } for(unsigned int j=0; j<DOUT; j++) temp[j] = (int8_t)(mult[j]/ m_cell_width); memcpy(&m_new_grid_cpu[i], temp, sizeof(DimType)); } }