#include #include #include #include #include #include using namespace std; struct Individ { int task [100], gad [100], rannum [100], crit_T; }; struct Individ vec[100]; struct Individ vec_next_gen[100]; struct Individ X; struct Individ Elite; int bb, tb, noI, noTA, noG, noRE, si, count_1, count_rep; int To_Get_NoG (int rannum,int noG) { int x = 0, y = 0, z = 0; x = abs(256/noG); for (int i = 0; i <= noG; i++) { z = y; y = y + x; if ( (rannum >= z) && (rannum <= y)) return i+1; } } int To_Set_Crit_T(Individ Ind) { int vec[noG], T = 0; for (int i = 0; i < noG; i++) vec[i] = 0; for (int j = 0; j < noG; j++) { for (int k = 0; k < noTA; k++) if (Ind.gad[k] == j+1) vec[j] = vec[j] + Ind.task[k]; } T = vec[0]; for (int l = 1; l < noG; l++) if (vec[l] > T) T = vec[l]; return T; } int To_Get_T_Max(Individ *Ind) { int T_Max; T_Max = Ind[0].crit_T; for(int i = 0; i < noI; i++) if ( Ind[i].crit_T < T_Max) T_Max = Ind[i].crit_T; return T_Max; } void To_Display( Individ *Ind) { cout<<"________________________________________________________________________________"<= 0) && (mas[j] < x); j--) mas[j+1] = mas[j]; mas[j+1] = x; } } void To_Create_Elite() { int v_1[noTA], v_2[noTA], v_3[noTA], v_m[noG]; bool temp[noTA], key = 0; int q,p; for ( int i = 0; i < noTA; i++) { v_1[i] = 0; v_2[i] = 0; v_3[i] = 0; temp[i] = 0; } for (int j = 0; j < noG; j++) v_m[j]=0; for (int k = 0; k < noTA; k++) v_1[k] = Elite.task[k]; To_SortX(v_1); for (int i = 0; i < noTA; i++) { q = 0; for(int j = 1; j < noG; j++) if (v_m[j] < v_m[q]) q = j; v_m[q] = v_m[q] + v_1[i]; v_3[i] = q + 1; v_2[i] = (v_3[i] - 1) * abs(256/noG) + abs(256/noG)/2; } p = 0; for (int i = 1; i < noG; i++) if ( v_m[i] > v_m[p]) p = i; Elite.crit_T = v_m[p]; for (int j = 0; j < noTA; j++) { for (int k = 0; k < noTA; k++) if ((Elite.task[j] == v_1[k]) && (key == 0)) { Elite.gad[j] = v_3[k]; Elite.rannum[j] = v_2[k]; key = 1; v_1[k] = 0; } key = 0; } } void To_Find_Elite() { int p = 0; int T_Max; T_Max = vec_next_gen[0].crit_T; for(int i = 1; i < noI; i++) vec_next_gen[i].crit_T = To_Set_Crit_T(vec_next_gen[i]); for(int j = 1; j < noI; j++) if (vec_next_gen[j].crit_T < T_Max) { T_Max = vec_next_gen[j].crit_T; p = j; } if ( p != 0) { Elite = vec_next_gen[0]; vec_next_gen[0] = vec_next_gen[p]; vec_next_gen[p] = Elite; } cout< bb) { key = 1; Elite.task[i] = temp; for (int j = 0; j < noI; j++ ) { vec[j].task[i] = temp; vec_next_gen[j].task[i] = vec[j].task[i]; vec[j].rannum[i] = rand()%(255)+1; vec_next_gen[j].rannum[i] = vec[j].rannum[i]; vec[j].gad[i] = To_Get_NoG(vec[j].rannum[i], noG); vec_next_gen[j].gad[i] = vec[j].gad[i]; } } } key = 0; } To_Create_Elite(); vec[0] = Elite; vec_next_gen[0] = Elite; } void CrossOver(int i) { int procro,EP,x; do x = rand()%(noI); while (x == i); procro = rand()%(100); if(procro<90) { cout<= 90) { cout <>noG; cout<<"Please, enter the number of tasks! "<>noTA; cout<<"Please, enter the bottom border! "<>bb; cout<<"Please, enter the top border! "<>tb; cout<<"Please, enter number of Individ: "<>noI; cout <<"Please, enter number of Repetition: "<>noRE; cout<