std::vector<tLineSegment<typename TrajectoryCollection::value_type::value_type>> traclus(TrajectoryCollection &A, double eps, size_t minLines, partitioning_functional &part, distance_functional &_d, progress_visitor &pvis) { typedef typename TrajectoryCollection::value_type TrajectoryType; std::vector<size_t> index_map; std::vector<tLineSegment<typename TrajectoryType::value_type>> segments; TrajectoryType L; size_t i=0; pvis.init(A.size()); auto it = A.begin(); while (it != A.end()) { if((*it).size() == 0) // ignore empty continue; TrajectoryType CPi; CPi = part(*it); for (size_t k=0; k < CPi.size() -1; k++) { segments.push_back(tLineSegment<typename TrajectoryType::value_type>(CPi[k],CPi[k+1],i)); } it++;i++; pvis(i,A.size(),"Phase 1: Segment Creation"); } grouping(segments,eps,minLines,_d, pvis); pvis.finish(); return segments; };
int main() { double *x_r,*x_i,*y_r,*y_i,w_r,w_i; int k,n,p,q,r,N = 1; printf("p,q,r = "); scanf("%d %d %d",&p,&q,&r); N = pow(2,p)*pow(3,q)*pow(5,r); printf("N = %d\n",N); grouping(N); system("pause"); return 0; }
bool QtCurveHandler::supports(Ability ability) const { switch (ability) { // announce case AbilityAnnounceButtons: case AbilityAnnounceColors: // buttons case AbilityButtonMenu: case AbilityButtonOnAllDesktops: case AbilityButtonSpacer: case AbilityButtonHelp: case AbilityButtonMinimize: case AbilityButtonMaximize: case AbilityButtonClose: case AbilityButtonAboveOthers: case AbilityButtonBelowOthers: case AbilityButtonShade: // TODO // case AbilityButtonResize: #if KDE_IS_VERSION(4, 9, 85) case AbilityButtonApplicationMenu: #endif // colors case AbilityColorTitleBack: case AbilityColorTitleFore: case AbilityColorFrame: return true; #if KDE_IS_VERSION(4, 3, 0) case AbilityUsesAlphaChannel: return true; // !Handler()->outerBorder(); ??? case AbilityProvidesShadow: return customShadows(); #endif #if KDE_IS_VERSION(4, 3, 85) && !KDE_IS_VERSION(4, 8, 80) case AbilityClientGrouping: return grouping(); #endif #if KDE_IS_VERSION(4, 5, 85) case AbilityUsesBlurBehind: return opacity(true)<100 || opacity(false)<100 || wStyle()->pixelMetric((QStyle::PixelMetric)QtC_CustomBgnd, 0L, 0L); #endif // TODO's default: return false; } }
BtSearchModuleChooserDialog::BtSearchModuleChooserDialog(QWidget *parent, Qt::WindowFlags flags) : BtModuleChooserDialog(parent, flags) { // Initialize the tree model: BtBookshelfTreeModel::Grouping grouping(groupingOrderKey); BtBookshelfTreeModel *treeModel = new BtBookshelfTreeModel(grouping, this); treeModel->setCheckable(true); BT_CONNECT(treeModel, SIGNAL(groupingOrderChanged(BtBookshelfTreeModel::Grouping)), this, SLOT(slotGroupingOrderChanged( BtBookshelfTreeModel::Grouping const &))); // Initialize the bookshelf widget: bookshelfWidget()->showHideAction()->setVisible(false); bookshelfWidget()->showHideButton()->hide(); bookshelfWidget()->setTreeModel(treeModel); bookshelfWidget()->setSourceModel(CSwordBackend::instance()->model()); retranslateUi(); }
void mutation(struct para_mutation* para_1) { //DEFINITION int cnt_1 = 0; int fail_count = 0; //this is the number of the mutation because of the airship being out of the boundary int* index_airship_match_1 = NULL; //this array is used for recording the index of the paring airships. This is the index of the airships of the passitive individual int* index_airship_match_2 = NULL; //this array is used for recording the index of the paring airships. This is the index of the airships of the initiative individual double tmp_1 = 0; double tmp_2 = 0; double tmp_3 = 0; double intensity_random = 0; double direction_master_x = 0; double direction_master_y = 0; double direction_slave_x = 0; double direction_slave_y = 0; double tmp_sml = 0; //this is the similarity value of the two individuals being crossovered struct para_similarity_single para_2; struct para_grouping para_3; switch (para_1->mode_mutation) //Choose a mode of mutation { case 0: //RAM ALLOCATION index_airship_match_1 = (int*)calloc(para_1->amount_airship, sizeof(int)); index_airship_match_2 = (int*)calloc(para_1->amount_airship, sizeof(int)); //CALCULATE THE PARING INFORMATION para_2.amount_airship = para_1->amount_airship; para_2.mode_record_similarity = para_1->mode_record_similarity; para_2.match_airship = index_airship_match_1; para_2.indiv_initiative = para_1->indiv_origin_1; para_2.indiv_passive = para_1->indiv_origin_2; tmp_sml = similarity_single(¶_2); //GENERETE THE MATCH ARRAY FOR INDIVIDUAL #2 for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { index_airship_match_2[index_airship_match_1[cnt_1]] = cnt_1; } //MUTATION FOR INDIVIDUAL #1 for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) //for all the airships, perform the mutation { //generate the criterion tmp_1 = (double)rand() / RAND_MAX; //judgement: perform mutation? if ((tmp_1 < para_1->para_mt_pbl) || (fail_count != 0)) { //calculate the direction vector /* The vector points to the passitive individual */ direction_master_x = para_1->indiv_origin_2->pst_x[index_airship_match_1[cnt_1]] - para_1->indiv_origin_1->pst_x[cnt_1]; direction_master_y = para_1->indiv_origin_2->pst_y[index_airship_match_1[cnt_1]] - para_1->indiv_origin_1->pst_y[cnt_1]; direction_master_x = direction_master_x / 2; direction_master_y = direction_master_y / 2; direction_slave_x = direction_master_y; direction_slave_y = -direction_master_x; //set positions //main direction tmp_2 = (double)rand() / RAND_MAX; intensity_random = (double)rand() / RAND_MAX; if (tmp_2 > 0.5) { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1] + direction_master_x*intensity_random*para_1->para_intensity*pow(0.5, fail_count); para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1] + direction_master_y*intensity_random*para_1->para_intensity*pow(0.5, fail_count); } else { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1] - direction_master_x*intensity_random*para_1->para_intensity*pow(0.5, fail_count); para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1] - direction_master_y*intensity_random*para_1->para_intensity*pow(0.5, fail_count); } //slave direction tmp_2 = (double)rand() / RAND_MAX; intensity_random = (double)rand() / RAND_MAX; if (tmp_2 > 0.5) { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_new_1->pst_x[cnt_1] + direction_slave_x*intensity_random*para_1->para_intensity*pow(0.5, fail_count); para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_new_1->pst_y[cnt_1] + direction_slave_y*intensity_random*para_1->para_intensity*pow(0.5, fail_count); } else { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_new_1->pst_x[cnt_1] - direction_slave_x*intensity_random*para_1->para_intensity*pow(0.5, fail_count); para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_new_1->pst_y[cnt_1] - direction_slave_y*intensity_random*para_1->para_intensity*pow(0.5, fail_count); } } else //not perform mutation { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1]; para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1]; } //boundary check if ((para_1->indiv_new_1->pst_x[cnt_1] >= para_1->area_x) || (para_1->indiv_new_1->pst_x[cnt_1] <= 0) || (para_1->indiv_new_1->pst_y[cnt_1] >= para_1->area_y) || (para_1->indiv_new_1->pst_y[cnt_1] <= 0)) //if the new position is out of boundary { fail_count++; cnt_1--; error_processor(31); } else { fail_count = 0; } } fail_count = 0; //reset the counter //MUTATION FOR INDIVIDUAL #2 for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) //for all the airships, perform the mutation { //generate the criterion tmp_1 = (double)rand() / RAND_MAX; //judgement: perform mutation? if ((tmp_1 < para_1->para_mt_pbl) || (fail_count != 0)) { //calculate the direction vector /* The vector points to the passitive individual */ /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ the two directions do not need to be calculated again @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */ direction_master_x = para_1->indiv_origin_1->pst_x[index_airship_match_2[cnt_1]] - para_1->indiv_origin_2->pst_x[cnt_1]; direction_master_y = para_1->indiv_origin_1->pst_y[index_airship_match_2[cnt_1]] - para_1->indiv_origin_2->pst_y[cnt_1]; direction_master_x = direction_master_x / 2; direction_master_y = direction_master_y / 2; direction_slave_x = direction_master_y; direction_slave_y = -direction_master_x; //set positions //main direction tmp_2 = (double)rand() / RAND_MAX; intensity_random = (double)rand() / RAND_MAX; if (tmp_2 > 0.5) { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1] + direction_master_x*intensity_random*para_1->para_intensity*pow(0.5, fail_count); para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1] + direction_master_y*intensity_random*para_1->para_intensity*pow(0.5, fail_count); } else { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1] - direction_master_x*intensity_random*para_1->para_intensity*pow(0.5, fail_count); para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1] - direction_master_y*intensity_random*para_1->para_intensity*pow(0.5, fail_count); } //slave direction tmp_2 = (double)rand() / RAND_MAX; intensity_random = (double)rand() / RAND_MAX; if (tmp_2 > 0.5) { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_new_2->pst_x[cnt_1] + direction_slave_x*intensity_random*para_1->para_intensity*pow(0.5, fail_count); para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_new_2->pst_y[cnt_1] + direction_slave_y*intensity_random*para_1->para_intensity*pow(0.5, fail_count); } else { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_new_2->pst_x[cnt_1] - direction_slave_x*intensity_random*para_1->para_intensity*pow(0.5, fail_count); para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_new_2->pst_y[cnt_1] - direction_slave_y*intensity_random*para_1->para_intensity*pow(0.5, fail_count); } } else //not perform mutation { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1]; para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1]; } //boundary check if ((para_1->indiv_new_2->pst_x[cnt_1] >= para_1->area_x) || (para_1->indiv_new_2->pst_x[cnt_1] <= 0) || (para_1->indiv_new_2->pst_y[cnt_1] >= para_1->area_y) || (para_1->indiv_new_2->pst_y[cnt_1] <= 0)) //if the new position is out of boundary { fail_count++; cnt_1--; error_processor(31); } else { fail_count = 0; } } //GROUPING AND REPAIRING para_3.amount_airship = para_1->amount_airship; para_3.area_x = para_1->area_x; para_3.area_y = para_1->area_y; para_3.dist_a2a = Cfg_opti.dist_a2a; para_3.dist_safe = para_1->dist_safe; para_3.indiv_1 = para_1->indiv_new_1; cnt_1 = grouping(¶_3); while (cnt_1 == 11) { cnt_1 = grouping(¶_3); } para_3.indiv_1 = para_1->indiv_new_2; cnt_1 = grouping(¶_3); while (cnt_1 == 11) { cnt_1 = grouping(¶_3); } //RAM RECYCLING free(index_airship_match_1); free(index_airship_match_2); break; case 1: /* ALGORITHM: The uniform mutation */ //for individual #1 //for x coordinate for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //direction judgement tmp_2 = (double)rand() / RAND_MAX; tmp_3 = ((double)rand() + 0.00001) / (RAND_MAX + 0.0001); if (tmp_2 > 0.5) { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1] + tmp_3*(para_1->area_x - para_1->indiv_origin_1->pst_x[cnt_1]); } else { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1] - tmp_3* para_1->indiv_origin_1->pst_x[cnt_1]; } } else //no mutation { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1]; } //boundary check if ((para_1->indiv_new_1->pst_x[cnt_1] >= para_1->area_x) || (para_1->indiv_new_1->pst_x[cnt_1] <= 0)) { cnt_1--; error_processor(32); } } //for y coordinate for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //direction judgement tmp_2 = (double)rand() / RAND_MAX; tmp_3 = ((double)rand() + 0.00001) / (RAND_MAX + 0.0001); if (tmp_2 > 0.5) { para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1] + tmp_3*(para_1->area_y - para_1->indiv_origin_1->pst_y[cnt_1]); } else { para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1] - tmp_3* para_1->indiv_origin_1->pst_y[cnt_1]; } } else //no mutation { para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1]; } //boundary check if ((para_1->indiv_new_1->pst_y[cnt_1] >= para_1->area_y) || (para_1->indiv_new_1->pst_y[cnt_1] <= 0)) { cnt_1--; error_processor(32); } } //for individual #2 //for x coordinate for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //direction judgement tmp_2 = (double)rand() / RAND_MAX; tmp_3 = ((double)rand() + 0.00001) / (RAND_MAX + 0.0001); if (tmp_2 > 0.5) { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1] + tmp_3*(para_1->area_x - para_1->indiv_origin_2->pst_x[cnt_1]); } else { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1] - tmp_3* para_1->indiv_origin_2->pst_x[cnt_1]; } } else //no mutation { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1]; } //boundary check if ((para_1->indiv_new_2->pst_x[cnt_1] >= para_1->area_x) || (para_1->indiv_new_2->pst_x[cnt_1] <= 0)) { cnt_1--; error_processor(32); } } //for y coordinate for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //direction judgement tmp_2 = (double)rand() / RAND_MAX; tmp_3 = ((double)rand() + 0.00001) / (RAND_MAX + 0.0001); if (tmp_2 > 0.5) { para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1] + tmp_3*(para_1->area_y - para_1->indiv_origin_2->pst_y[cnt_1]); } else { para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1] - tmp_3* para_1->indiv_origin_2->pst_y[cnt_1]; } } else //no mutation { para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1]; } //boundary check if ((para_1->indiv_new_2->pst_y[cnt_1] >= para_1->area_y) || (para_1->indiv_new_2->pst_y[cnt_1] <= 0)) { cnt_1--; error_processor(32); } } //GROUPING AND REPAIRING para_3.amount_airship = para_1->amount_airship; para_3.area_x = para_1->area_x; para_3.area_y = para_1->area_y; para_3.dist_a2a = Cfg_opti.dist_a2a; para_3.dist_safe = para_1->dist_safe; para_3.indiv_1 = para_1->indiv_new_1; cnt_1 = grouping(¶_3); while (cnt_1 == 11) { cnt_1 = grouping(¶_3); } para_3.indiv_1 = para_1->indiv_new_2; cnt_1 = grouping(¶_3); while (cnt_1 == 11) { cnt_1 = grouping(¶_3); } break; case 2: /* ALGORITHM: this is the non-uniform mutation */ //for individual #1 //for x coordinate for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //direction judgement tmp_2 = (double)rand() / RAND_MAX; tmp_3 = ((double)rand() + 0.00001) / (RAND_MAX + 0.0001); if (tmp_2 > 0.5) { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1] + tmp_3*(para_1->area_x - para_1->indiv_origin_1->pst_x[cnt_1])*pow((1 - Time_gen / (Cfg_opti.iteration_max + 1)), Cfg_opti.para_nonuniform_beta); } else { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1] - tmp_3* para_1->indiv_origin_1->pst_x[cnt_1] * pow((1 - Time_gen / (Cfg_opti.iteration_max + 1)), Cfg_opti.para_nonuniform_beta); } } else //no mutation { para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1]; } //boundary check if ((para_1->indiv_new_1->pst_x[cnt_1] >= para_1->area_x) || (para_1->indiv_new_1->pst_x[cnt_1] <= 0)) { cnt_1--; error_processor(33); } } //for y coordinate for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //direction judgement tmp_2 = (double)rand() / RAND_MAX; tmp_3 = ((double)rand() + 0.00001) / (RAND_MAX + 0.0001); if (tmp_2 > 0.5) { para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1] + tmp_3*(para_1->area_y - para_1->indiv_origin_1->pst_y[cnt_1])*pow((1 - Time_gen / (Cfg_opti.iteration_max + 1)), Cfg_opti.para_nonuniform_beta); } else { para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1] - tmp_3* para_1->indiv_origin_1->pst_y[cnt_1] * pow((1 - Time_gen / (Cfg_opti.iteration_max + 1)), Cfg_opti.para_nonuniform_beta); } } else //no mutation { para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1]; } //boundary check if ((para_1->indiv_new_1->pst_y[cnt_1] >= para_1->area_y) || (para_1->indiv_new_1->pst_y[cnt_1] <= 0)) { cnt_1--; error_processor(33); } } //for individual #2 //for x coordinate for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //direction judgement tmp_2 = (double)rand() / RAND_MAX; tmp_3 = ((double)rand() + 0.00001) / (RAND_MAX + 0.0001); if (tmp_2 > 0.5) { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1] + tmp_3*(para_1->area_x - para_1->indiv_origin_2->pst_x[cnt_1])*pow((1 - Time_gen / (Cfg_opti.iteration_max + 1)), Cfg_opti.para_nonuniform_beta); } else { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1] - tmp_3* para_1->indiv_origin_2->pst_x[cnt_1] * pow((1 - Time_gen / (Cfg_opti.iteration_max + 1)), Cfg_opti.para_nonuniform_beta); } } else //no mutation { para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1]; } //boundary check if ((para_1->indiv_new_2->pst_x[cnt_1] >= para_1->area_x) || (para_1->indiv_new_2->pst_x[cnt_1] <= 0)) { cnt_1--; error_processor(33); } } //for y coordinate for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //direction judgement tmp_2 = (double)rand() / RAND_MAX; tmp_3 = ((double)rand() + 0.00001) / (RAND_MAX + 0.0001); if (tmp_2 > 0.5) { para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1] + tmp_3*(para_1->area_y - para_1->indiv_origin_2->pst_y[cnt_1])*pow((1 - Time_gen / (Cfg_opti.iteration_max + 1)), Cfg_opti.para_nonuniform_beta); } else { para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1] - tmp_3* para_1->indiv_origin_2->pst_y[cnt_1] * pow((1 - Time_gen / (Cfg_opti.iteration_max + 1)), Cfg_opti.para_nonuniform_beta); } } else //no mutation { para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1]; } //boundary check if ((para_1->indiv_new_2->pst_y[cnt_1] >= para_1->area_y) || (para_1->indiv_new_2->pst_y[cnt_1] <= 0)) { cnt_1--; error_processor(33); } } //GROUPING AND REPAIRING para_3.amount_airship = para_1->amount_airship; para_3.area_x = para_1->area_x; para_3.area_y = para_1->area_y; para_3.dist_a2a = Cfg_opti.dist_a2a; para_3.dist_safe = para_1->dist_safe; para_3.indiv_1 = para_1->indiv_new_1; cnt_1 = grouping(¶_3); while (cnt_1 == 11) { cnt_1 = grouping(¶_3); } para_3.indiv_1 = para_1->indiv_new_2; cnt_1 = grouping(¶_3); while (cnt_1 == 11) { cnt_1 = grouping(¶_3); } break; case 3: /* ALGORITHM: this is the polynominal mutation */ //#1 individual x dimension for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //perform mutation tmp_2 = (double)rand() / RAND_MAX; //direction judgement if (tmp_2 < 0.5) { tmp_3 = pow(2 * tmp_2, 1 / (Cfg_opti.para_polynominal_yita + 1)) - 1; } else { tmp_3 = 1 - pow(2 - 2 * tmp_2, 1 / (Cfg_opti.para_polynominal_yita + 1)); } para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1] + tmp_3*para_1->area_x; } else { //no mutation para_1->indiv_new_1->pst_x[cnt_1] = para_1->indiv_origin_1->pst_x[cnt_1]; } //boundary check if ((para_1->indiv_new_1->pst_x[cnt_1] >= para_1->area_x) || (para_1->indiv_new_1->pst_x[cnt_1] <= 0)) { cnt_1--; error_processor(33); } } //#1 individual y dimension for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //perform mutation tmp_2 = (double)rand() / RAND_MAX; //direction judgement if (tmp_2 < 0.5) { tmp_3 = pow(2 * tmp_2, 1 / (Cfg_opti.para_polynominal_yita + 1)) - 1; } else { tmp_3 = 1 - pow(2 - 2 * tmp_2, 1 / (Cfg_opti.para_polynominal_yita + 1)); } para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1] + tmp_3*para_1->area_y; } else { //no mutation para_1->indiv_new_1->pst_y[cnt_1] = para_1->indiv_origin_1->pst_y[cnt_1]; } //boundary check if ((para_1->indiv_new_1->pst_y[cnt_1] >= para_1->area_y) || (para_1->indiv_new_1->pst_y[cnt_1] <= 0)) { cnt_1--; error_processor(33); } } //#2 individual x dimension for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //perform mutation tmp_2 = (double)rand() / RAND_MAX; //direction judgement if (tmp_2 < 0.5) { tmp_3 = pow(2 * tmp_2, 1 / (Cfg_opti.para_polynominal_yita + 1)) - 1; } else { tmp_3 = 1 - pow(2 - 2 * tmp_2, 1 / (Cfg_opti.para_polynominal_yita + 1)); } para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1] + tmp_3*para_1->area_x; } else { //no mutation para_1->indiv_new_2->pst_x[cnt_1] = para_1->indiv_origin_2->pst_x[cnt_1]; } //boundary check if ((para_1->indiv_new_2->pst_x[cnt_1] >= para_1->area_x) || (para_1->indiv_new_2->pst_x[cnt_1] <= 0)) { cnt_1--; error_processor(33); } } //#2 individual y dimension for (cnt_1 = 0; cnt_1 < para_1->amount_airship; cnt_1++) { //mutation judgement tmp_1 = (double)rand() / RAND_MAX; if (tmp_1 < para_1->para_mt_pbl) { //perform mutation tmp_2 = (double)rand() / RAND_MAX; //direction judgement if (tmp_2 < 0.5) { tmp_3 = pow(2 * tmp_2, 1 / (Cfg_opti.para_polynominal_yita + 1)) - 1; } else { tmp_3 = 1 - pow(2 - 2 * tmp_2, 1 / (Cfg_opti.para_polynominal_yita + 1)); } para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1] + tmp_3*para_1->area_y; } else { //no mutation para_1->indiv_new_2->pst_y[cnt_1] = para_1->indiv_origin_2->pst_y[cnt_1]; } //boundary check if ((para_1->indiv_new_2->pst_y[cnt_1] >= para_1->area_y) || (para_1->indiv_new_2->pst_y[cnt_1] <= 0)) { cnt_1--; error_processor(33); } } //GROUPING AND REPAIRING para_3.amount_airship = para_1->amount_airship; para_3.area_x = para_1->area_x; para_3.area_y = para_1->area_y; para_3.dist_a2a = Cfg_opti.dist_a2a; para_3.dist_safe = para_1->dist_safe; para_3.indiv_1 = para_1->indiv_new_1; cnt_1 = grouping(¶_3); while (cnt_1 == 11) { cnt_1 = grouping(¶_3); } para_3.indiv_1 = para_1->indiv_new_2; cnt_1 = grouping(¶_3); while (cnt_1 == 11) { cnt_1 = grouping(¶_3); } break; default: break; } }