Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.58 KB | None | 0 0
  1. import math
  2. import numpy
  3. import copy
  4. import time
  5.  
  6. def schrage():
  7. mega_maszyna = []
  8.  
  9. file_handle = open('data2.txt', 'r')
  10.  
  11. lines_list = file_handle.readlines()
  12.  
  13. zadania, maszyna = (int(val) for val in lines_list[0].split())
  14.  
  15. mega_kursor = [0] * maszyna
  16.  
  17. dane = [[int(val) for val in line.split()] for line in lines_list[1:]]
  18.  
  19. for i in range(1, maszyna + 1):
  20. mini_maszyna = [0] * zadania
  21.  
  22. j = i
  23. for i in range(0, zadania):
  24. mini_maszyna[i] = dane[i][j - 1]
  25.  
  26. mega_maszyna.append(mini_maszyna)
  27.  
  28. t = 0
  29. k = 0
  30. c_max = 0
  31. G = [];
  32. N = list(range(0, zadania))
  33. lista_pomocnicza = []
  34. pi = [0] * zadania
  35. r = mega_maszyna[0]
  36. p = mega_maszyna[1]
  37. q = mega_maszyna[2]
  38.  
  39. rnowe = r[::]
  40. pnowe = p[::]
  41. qnowe = q[::]
  42. globals()['rnowe'] = rnowe
  43. globals()['pnowe'] = pnowe
  44. globals()['qnowe'] = qnowe
  45.  
  46. # --------------------------DEFINICJE--------------------------#
  47.  
  48. q_kopia = q[::]
  49. Q = []
  50. j = []
  51. while ((G != []) or (N != [])):
  52.  
  53. while ((N != []) and (min(value for value in r if value != None) <= t)):
  54. e = min(value for value in r if value != None)
  55. e_arg = r.index(e)
  56. r[e_arg] = None
  57.  
  58. G.append(e_arg)
  59. N.remove(e_arg)
  60.  
  61. j.append(e_arg)
  62.  
  63. for i in range(0, len(G)):
  64. x = q[G[i]]
  65. Q.append(x)
  66.  
  67.  
  68. if G == []:
  69. t = min(value for value in r if value != None)
  70.  
  71. else:
  72. e = max(value for value in Q if value != None)
  73.  
  74. eq = Q.index(e)
  75. e_arg = G[eq]
  76.  
  77. q_kopia[e_arg] = None
  78.  
  79. pi[k] = e_arg
  80. k = k + 1
  81. t = t + p[e_arg]
  82. c_max = max(c_max, t + q[e_arg])
  83.  
  84. G.remove(e_arg)
  85.  
  86.  
  87. Q = []
  88. globals()['c_max'] = c_max
  89. globals()['pi'] = pi
  90. globals()['zadania'] = zadania
  91. globals()['j_arg'] = e_arg
  92. globals()['t'] = t
  93. globals()['j'] = j
  94. globals()['r'] = r
  95. globals()['p'] = p
  96. globals()['q'] = q
  97.  
  98. def schrage_przerwania():
  99. mega_maszyna = []
  100.  
  101. file_handle = open('data2.txt', 'r')
  102.  
  103. lines_list = file_handle.readlines()
  104.  
  105. zadania, maszyna = (int(val) for val in lines_list[0].split())
  106.  
  107. mega_kursor = [0] * maszyna
  108.  
  109. dane = [[int(val) for val in line.split()] for line in lines_list[1:]]
  110.  
  111. for i in range(1, maszyna + 1):
  112. mini_maszyna = [0] * zadania
  113.  
  114. j = i
  115. for i in range(0, zadania):
  116. mini_maszyna[i] = dane[i][j - 1]
  117.  
  118. mega_maszyna.append(mini_maszyna)
  119.  
  120. t = 0
  121. k = 0
  122. c_max = 0
  123. G = [];
  124. N = list(range(0, zadania))
  125. lista_pomocnicza = []
  126. pi = [0] * zadania
  127. r = mega_maszyna[0]
  128. p = mega_maszyna[1]
  129. q = mega_maszyna[2]
  130.  
  131. r_core = r[::]
  132. p_core = p[::]
  133. q_core = q[::]
  134.  
  135. q[0] = math.inf
  136. l = 0
  137.  
  138. # --------------------------DEFINICJE--------------------------#
  139. q_kopia = q[::]
  140. Q = []
  141.  
  142. while ((G != []) or (N != [])):
  143.  
  144. while ((N != []) and (min(value for value in r if value != None) <= t)):
  145. e = min(value for value in r if value != None)
  146. e_arg = r.index(e)
  147.  
  148. G.append(e_arg)
  149. N.remove(e_arg)
  150.  
  151. if q[e_arg] > q[l]:
  152. p[l] = t - r[e_arg]
  153. t = r[e_arg]
  154. if p[l] > 0:
  155. G.append(l)
  156.  
  157. r[e_arg] = None
  158.  
  159. if q[0] == math.inf:
  160. q[0] = q_core[0]
  161.  
  162. for i in range(0, len(G)):
  163. x = q[G[i]]
  164. Q.append(x)
  165.  
  166. if G == []:
  167. t = min(value for value in r if value != None)
  168.  
  169. else:
  170. e = max(value for value in Q if value != None)
  171.  
  172. eq = Q.index(e)
  173. e_arg = G[eq]
  174.  
  175. l = e_arg
  176. t = t + p[e_arg]
  177. c_max = max(c_max, t + q[e_arg])
  178.  
  179. G.remove(e_arg)
  180.  
  181. Q = []
  182. P = mega_maszyna[1]
  183.  
  184. globals()['c_max'] = c_max
  185. globals()['pi'] = pi
  186.  
  187.  
  188. # --------------------- INICJALIZACJA ---------------------
  189.  
  190. def Carlier():
  191.  
  192. UB = 10000000
  193.  
  194. # --------------------------- 1 ---------------------------
  195.  
  196. schrage()
  197. U = c_max
  198.  
  199. # --------------------------- 2 ---------------------------
  200.  
  201. if U < UB:
  202. UB = U
  203. pi_nowe = pi[::]
  204.  
  205. # --------------------------- 3 ---------------------------
  206. j = list(range(0, zadania))
  207.  
  208. #print(j_arg)
  209. b = max(value for value in j if (c_max == t + q[j_arg]))
  210.  
  211. #b = j_arg
  212.  
  213. #print(b)
  214.  
  215. a = min(value for value in j)
  216.  
  217. #print(a)
  218.  
  219. j = list(range(a, b))
  220.  
  221. if (q[j_arg] < q[b]):
  222. c = max(value for value in j)
  223. #print(c)
  224.  
  225. else:
  226. c = None
  227. #print(c)
  228.  
  229. # --------------------------- 4 ---------------------------
  230. if c is None:
  231. return
  232.  
  233. # --------------------------- 5 ---------------------------
  234. c = 0
  235.  
  236. #print(c)
  237.  
  238. granice = list(range(c+1, b+1))
  239. #print(granice)
  240. r_pomoc = []
  241. q_pomoc = []
  242. p_pomoc = []
  243.  
  244. for i in range (c+1,b+1):
  245.  
  246. r_pomoc.append(rnowe[i])
  247. q_pomoc.append(qnowe[i])
  248. p_pomoc.append(pnowe[i])
  249.  
  250. #print(r_pomoc)
  251. #print(q_pomoc)
  252. #print(p_pomoc)
  253.  
  254. er = min(r_pomoc)
  255. qu = min(q_pomoc)
  256. pe = sum(p_pomoc)
  257.  
  258. print(er, qu, pe)
  259. # --------------------------- 6 ---------------------------
  260. r_new = rnowe[::]
  261. r_new[c] = max(rnowe[c],(er+pe))
  262.  
  263. # --------------------------- 7 ---------------------------
  264.  
  265. schrage_przerwania()
  266. LB = c_max
  267.  
  268. # --------------------------- 8 ---------------------------
  269.  
  270. if LB < UB:
  271.  
  272. # --------------------------- 9 ---------------------------
  273.  
  274. Carlier()
  275.  
  276. # --------------------------- 10 ---------------------------
  277.  
  278. r_new = rnowe[::]
  279.  
  280. # --------------------------- 11 ---------------------------
  281.  
  282. q_new = qnowe[::]
  283. q_new[c] = max(qnowe[c],(qu+pe))
  284.  
  285. # --------------------------- 12 ---------------------------
  286.  
  287. schrage_przerwania()
  288. LB = c_max
  289.  
  290. # --------------------------- 13 ---------------------------
  291.  
  292. if LB < UB:
  293.  
  294. # --------------------------- 14 ---------------------------
  295.  
  296. Carlier()
  297.  
  298. # --------------------------- 15 ---------------------------
  299.  
  300. q_new = qnowe[::]
  301.  
  302.  
  303. Carlier()
  304. #print("Cmax: ", UB)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement