int main(int argc, char **argv) { int i; srand((unsigned)time(NULL)); initialize(); print_particles(0); for(i=0; i<ITERA_CNT; i++){ selection(); crossover(); mutation(); printf("\n(%3d itera) ", i); float mean = cal_mean(); printf(" || mean: %10.10lf;\t", mean); float var = cal_var(); printf(" || var: %10.10lf;", var); if ( var < 0.0000000001 ) { print_particles((POPULATION_CNT-1)); break; } } printf("\n"); return 0; }
void task_perform(int sock, std::vector<float> vec, int task,int id) { //perform task and send result back float min,max,result = 0; sleep(1); switch (task) { case MEAN: result = cal_mean(vec); break; case RANGE: cal_range(vec,&min,&max); break; default : std::cout<<"Unknown task\n"; } //Now we have result //send data back to server //format [ task_id opcode Number] [Number_mean Mean] int task_id = id; int send_ar[] = { task_id, task, 2 }; //float send_ar2[] = { (float) vec.size(), result }; float send_ar2[2]; if(task == MEAN) { send_ar2[0] = (float) vec.size(); send_ar2[1] = result; } else if (task == RANGE) { send_ar2[0] = min; send_ar2[1] = max; } std::cout<<"\nSending array " << send_ar[0] <<" "<<send_ar[1] <<" " <<send_ar[2] <<" size is "<<sizeof(send_ar)<<"\n"; std::cout<<"Sending result "<<send_ar2[0]<<" "<<send_ar2[1]<<"\n"; char buffer[1024]; memcpy(buffer,send_ar,sizeof(send_ar)); memcpy(buffer+sizeof(send_ar),send_ar2,sizeof(send_ar2)); int wr = send(sock, (void *) buffer, sizeof(send_ar)+sizeof(send_ar2) , 0); std::cout<<"Bytes sent is "<<wr<< "\n"; }