Advertisement
Guest User

Untitled

a guest
Jan 18th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.88 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <conio.h>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #include <string>
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. using namespace std;
  10.  
  11.  
  12. struct prz
  13. {
  14. int czas;
  15. int beg;
  16. int end;
  17. };
  18. struct inst
  19. {
  20. int czas_op1;
  21. int czas_op2;
  22. int maszyna_op1;
  23. int maszyna_op2;
  24. bool op1=false;
  25. bool op2 = false;
  26. };
  27. class gen
  28. {
  29. public:
  30. int **rozwiazanie;
  31. int **czas, czas_m1, czas_m2;
  32. int ile;
  33. int nr_ins;
  34.  
  35. gen()
  36. {
  37.  
  38. }
  39. gen(int nn,int nr)
  40. {
  41.  
  42. rozwiazanie = new int *[2];
  43. for (int i = 0; i <= 2; i++)
  44. rozwiazanie[i] = new int[nn];
  45. for (int i = 0; i <= nn; i++)
  46. {
  47. rozwiazanie[1][i] = 0;
  48. rozwiazanie[2][i] = 0;
  49. }
  50. czas = new int*[2];
  51. for (int i = 0; i <= 2; i++)
  52. czas[i] = new int[nn];
  53. for (int i = 0; i <= nn; i++)
  54. {
  55. czas[1][i] = 0;
  56. czas[2][i] = 0;
  57. }
  58. ile = nn;
  59. nr_ins = nr;
  60. }
  61.  
  62. void inicializuj(int **insta)
  63. {
  64. int mm = 0, zad1, zad2, dodano = 0, dd = 0;
  65.  
  66. for (int i = 1; i <= ile; i++)
  67. {
  68. zad1 = rand() % ile + 1;
  69. zad2 = rand() % ile + 1;
  70. while (zad1 == zad2)
  71. zad1 = rand() % 50 + 1;
  72. dd++;
  73. while (dodano < dd)
  74. {
  75. if (insta[2][zad1] == 1 && insta[3][zad1] == 0)//czy jest to operacja 1 zad1 i czy zostala wykonana //maszyna1
  76. {
  77. rozwiazanie[1][i] = zad1;
  78. insta[3][zad1] = 1;
  79. dd = ++dodano;
  80. mm = 1;
  81. czas[1][i] = insta[1][zad1];
  82. break;
  83. }
  84. else if (insta[5][zad1] == 1 && insta[6][zad1] == 0)//maszyna2
  85. {
  86. rozwiazanie[2][i] = zad1;
  87. insta[6][zad1] = 1;
  88. dd = ++dodano;
  89. mm = 2;
  90. czas[2][i] = insta[4][zad1];
  91. break;
  92. }
  93. else if (insta[2][zad1] == 2 && insta[3][zad1] == 0)//czy jest to operacja 2 zad1 i czy zostala wykonana // maszyna1
  94. {
  95. rozwiazanie[1][i] = zad1;
  96. insta[3][zad1] = 1;
  97. dd = ++dodano;
  98. mm = 1;
  99. czas[1][i] = insta[1][zad1];
  100. break;
  101. }
  102. else if (insta[5][zad1] == 2 && insta[6][zad1] == 0)//maszyna2
  103. {
  104. rozwiazanie[2][i] = zad1;
  105. insta[6][zad1] = 1;
  106. dd = ++dodano;
  107. mm = 2;
  108. czas[2][i] = insta[4][zad1];
  109. break;
  110. }
  111. zad1 = rand() % ile + 1;
  112. while (zad1 == zad2)
  113. zad1 = rand() % 50 + 1;
  114. }
  115. dd++;
  116. while (dodano < dd)
  117. {
  118. if (mm == 1)/////////////////////////////////////////////////////////////////////////////////w zad 1 byla maszyna 1
  119. {
  120. if (insta[5][zad2] == 1 && insta[6][zad2] == 0)//maszyna2
  121. {
  122. rozwiazanie[2][i] = zad2;
  123. insta[6][zad2] = 1;
  124. dd = ++dodano;
  125. czas[2][i] = insta[4][zad2];
  126. break;
  127. }
  128. else
  129. if (insta[5][zad2] == 2 && insta[6][zad2] == 0)//maszyna2
  130. {
  131. rozwiazanie[2][i] = zad2;
  132. insta[6][zad2] = 1;
  133. dd = ++dodano;
  134. czas[2][i] = insta[4][zad2];
  135. break;
  136. }
  137. }
  138. else/////////////////////////////////////////////////////////////////////////////////////////w zad 1 byla maszyna 2
  139. {
  140. if (insta[2][zad2] == 1 && insta[3][zad2] == 0)//czy jest to operacja 1 zad2 i czy zostala wykonana // maszyna1
  141. {
  142. rozwiazanie[1][i] = zad2;
  143. insta[3][zad2] = 1;
  144. dd = ++dodano;
  145. czas[1][i] = insta[1][zad2];
  146. break;
  147. }
  148. else
  149. if (insta[2][zad2] == 2 && insta[3][zad2] == 0)//czy jest to operacja 2 zad2 i czy zostala wykonana // maszyna1
  150. {
  151. rozwiazanie[1][i] = zad2;
  152. insta[3][zad2] = 1;
  153. dd = ++dodano;
  154. czas[1][i] = insta[1][zad2];
  155. break;
  156. }
  157. }
  158. zad2 = rand() % ile + 1;
  159. }
  160. }
  161.  
  162.  
  163. cout << endl << "inicializacja zakonczona nr"<< this->nr_ins << endl;
  164.  
  165. //**********************czyszczenie dodanych
  166. for (int i = 1; i <= ile; i++)
  167. {
  168. insta[3][i] = 0;
  169. insta[6][i] = 0;
  170. }
  171.  
  172. }
  173.  
  174. void crossover(gen b)
  175. {
  176.  
  177.  
  178. }
  179.  
  180. void mutacja()
  181. {
  182.  
  183.  
  184.  
  185. }
  186.  
  187. void kary()
  188. {
  189. for (int i = 1; i <= ile; i++)
  190. {
  191. czas_m1 += czas[1][i];
  192. czas_m2 += czas[2][i];
  193. }
  194.  
  195.  
  196. }
  197. void wypisz()
  198. {
  199. cout << "\ninit nr"<<nr_ins<<"\nM1: ";
  200. for (int i = 1; i <= ile; i++)
  201. {
  202. cout << rozwiazanie[1][i] << " ";
  203.  
  204. }
  205.  
  206. cout << "\tczas: "<<czas_m1;
  207. cout << "\nM2: ";
  208. for (int i = 1; i <= ile; i++)
  209. {
  210. cout << rozwiazanie[2][i] << " ";
  211.  
  212. }
  213. cout << "\tczas: "<<czas_m2;
  214. }
  215. };
  216. void generator();
  217. void program();
  218. void save();
  219.  
  220. int main()
  221. {
  222. int zad;
  223. srand(time(NULL));
  224. cout << "1. Generuj instancje\n";
  225. cout << "2. Rozwiaz instancje\n";
  226. cin >> zad;
  227.  
  228. switch (zad)
  229. {
  230. case 1:generator(); break;
  231. case 2:program(); break;
  232. }
  233. _getch();
  234. return 0;
  235. }
  236.  
  237. void generator()
  238. {
  239. int ile, ile_przerw, rad1 = 0, rad2 = 0, max1 = 0, max2 = 0,test;
  240. inst *instancja;
  241.  
  242. fstream plik;
  243. string nazwa;
  244.  
  245. cout << "podaj nazwe dla pliku:\n";
  246. cin >> nazwa;
  247. nazwa += ".txt";
  248. cout << "\npodaj ilosc zadan:\n";
  249. cin >> ile;
  250.  
  251.  
  252. //**********************************************instancja
  253. instancja = new inst[ile];
  254.  
  255. for (int i = 0; i <= ile; i++)//losowe wartosci dla zadan
  256. {
  257. instancja[i].czas_op1 = rand() % 20 + 1; //czas dla op1 zad i
  258. instancja[i].czas_op2 = rand() % 20 + 1; //czas dla op2 zad i+
  259. instancja[i].maszyna_op1 = rand() % 2 + 1;
  260. if (instancja[i].maszyna_op1 == 1)
  261. instancja[i].maszyna_op2 = 2;
  262. else
  263. instancja[i].maszyna_op2 = 1;
  264. }
  265.  
  266. //*********************************************przerwy
  267. test = ile / 2;
  268. ile_przerw = rand()%test + 2;
  269. cout << ile_przerw;
  270. prz *przerwy = new prz[ile_przerw];
  271.  
  272. for (int i = 0; i <= ile; i++)
  273. {
  274. if (instancja[i].maszyna_op1 == 2)
  275. max2 += instancja[i].czas_op1;
  276. else
  277. max2 += instancja[i].czas_op2;
  278. }
  279.  
  280. max1 = max2 / ile_przerw;
  281. for (int i = 0; i <= ile_przerw; i++)
  282. {
  283. rad2 = rand() % max1 + (rad2 + rad1);// kiedy zaczyna sie przerwa
  284. rad1 = rand() % (max1 / 2);//czas trwania przerwy
  285.  
  286.  
  287. przerwy[i].czas = rad1;
  288. przerwy[i].beg = rad2;
  289. przerwy[i].end = rad2 + rad1;
  290. }
  291.  
  292. //********************************************zapis do pliku
  293. plik.open(nazwa.c_str(), ios::out);
  294. if (!plik.is_open())
  295. cout << "error otwarcia pliku";
  296. else
  297. {
  298. plik << ile << "\n";
  299. for (int i = 0; i <= ile; i++)
  300. {
  301. plik << instancja[i].czas_op1 << ";" << instancja[i].czas_op2 << ";" << instancja[i].maszyna_op1 << ";" << instancja[i].maszyna_op2 << "\n";
  302. }
  303. plik << ile_przerw << "\n";
  304.  
  305. for (int i = 0; i <= ile_przerw; i++)
  306. {
  307. plik << i << ";" << przerwy[i].czas << ";" << przerwy[i].beg << ";" << przerwy[i].end << "\n";
  308. }
  309. plik.close();
  310. cout << "\nwygenerowano!\n";
  311. }
  312. //********************************************zwalnianie pamieci
  313. delete[] przerwy;
  314. delete[] instancja;
  315. }
  316.  
  317.  
  318. void save()
  319. {
  320.  
  321.  
  322. }
  323.  
  324.  
  325. void program()
  326. {
  327. fstream plik;
  328. string nazwa, buf;
  329. prz *przerwa;
  330. inst *instancja;
  331. bool insta = false, przer = false;
  332. int ile, ile_przerw;
  333. int **nowytyp;
  334. //*********************************************************************************************plik
  335. cout << "podaj nazwe pliku do otwarca(bez rozszerzenia):\n";
  336. cin >> nazwa;
  337. nazwa += ".txt";
  338. plik.open(nazwa.c_str(), ios::in);
  339.  
  340. getline(plik, buf);//////////////////////////////////wczytanie instancji
  341. ile = atoi(buf.c_str());
  342. instancja = new inst[ile];
  343. nowytyp = new int*[6];
  344. for (int i = 0; i <= 6; i++)
  345. nowytyp[i] = new int[ile];
  346.  
  347. for (int i = 0; i <= ile; i++)
  348. {
  349. getline(plik, buf, ';');
  350. instancja[i].czas_op1 = atoi(buf.c_str());
  351. getline(plik, buf, ';');
  352. instancja[i].czas_op2 = atoi(buf.c_str());
  353. getline(plik, buf, ';');
  354. instancja[i].maszyna_op1 = atoi(buf.c_str());
  355. getline(plik, buf);
  356. instancja[i].maszyna_op2 = atoi(buf.c_str());
  357.  
  358. if (instancja[i].maszyna_op1 == 1)
  359. {
  360. nowytyp[1][i] = instancja[i].czas_op1;//maszyna1
  361. nowytyp[2][i] = 1;//nr op1
  362. nowytyp[3][i] =0 ;//dodana
  363. nowytyp[4][i] = instancja[i].czas_op2;//maszyna2
  364. nowytyp[5][i] = 2;//nr op2
  365. nowytyp[6][i] = 0;//nie doadna
  366. }
  367. else
  368. {
  369. nowytyp[1][i] = instancja[i].czas_op2;//maszyna1
  370. nowytyp[2][i] = 2;
  371. nowytyp[3][i] = 0;
  372. nowytyp[4][i] = instancja[i].czas_op1;//maszyna2
  373. nowytyp[5][i] = 1;
  374. nowytyp[6][i] =0 ;
  375. }
  376. }
  377.  
  378. getline(plik, buf);////////////////////////////////wczytanie przerw
  379. ile_przerw = atoi(buf.c_str());
  380. przerwa = new prz[ile_przerw];
  381. for (int i = 0; i <= ile_przerw; i++)
  382. {
  383. getline(plik, buf, ';');
  384. getline(plik, buf, ';');
  385. przerwa[i].czas = atoi(buf.c_str());
  386. getline(plik, buf, ';');
  387. przerwa[i].beg = atoi(buf.c_str());
  388. getline(plik, buf);
  389. przerwa[i].end = atoi(buf.c_str());
  390. }
  391.  
  392.  
  393. plik.close();
  394. //********************************************************************************************inicjalizacja populacji
  395. gen **tab = new gen*[50];//inicjowanie tablicy populacji
  396. for (int i = 0; i <= 50; i++)
  397. {
  398. tab[i] = new gen(ile,i);
  399. }
  400.  
  401. bool jest = false;
  402.  
  403.  
  404. for (int i = 0; i < 50; i++)
  405. {
  406. tab[i]->inicializuj(nowytyp);
  407. }
  408.  
  409. for (int i = 0; i < 50; i++)
  410. {
  411. tab[i]->kary();
  412. tab[i]->wypisz();
  413. }
  414. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement