fork download
  1.  
  2. # your code goes here
  3. from math import *
  4. from random import *
  5. from time import *
  6.  
  7. cst = float('inf')
  8. global x, y, X, r1, worst, lam
  9. global g, geq, gen
  10. global vals
  11. global f, f_new, T, O1, O2
  12.  
  13. def getH(g):
  14. if g <= 0:
  15. return 0
  16. else:
  17. return 1
  18.  
  19. def getHeq(geq):
  20. if geq == 0:
  21. return 0
  22. else:
  23. return 1
  24.  
  25. def ineq(x):
  26. g = [0]
  27.  
  28. #g1 = x[1]+5
  29. #g.append(g1)
  30.  
  31.  
  32.  
  33.  
  34.  
  35. return g
  36.  
  37. def eq(x):
  38. geq = [0]
  39.  
  40. #geq1 = x[1]+5
  41. #geq.append(geq1)
  42.  
  43. return geq
  44.  
  45. def fobj(x):
  46. for i in range (var+1):
  47. if x[i] > 0:
  48. y[i] = 1
  49. else:
  50. y[i] = 0
  51.  
  52. #print("x =",x)
  53. #print("y =",y)
  54.  
  55. Z = abs(x[1])+abs(x[2])+abs(x[3])+abs(x[4])+abs(x[5])+abs(x[6])+abs(x[7])+abs(x[8])+abs(x[9])+abs(x[10])+abs(x[1])*abs(x[2])*abs(x[3])*abs(x[4])*abs(x[5])*abs(x[6])*abs(x[7])*abs(x[8])*abs(x[9])*abs(x[10])
  56.  
  57. g = ineq(x)
  58. geq = eq(x)
  59.  
  60. for k in range (1, len(g)):
  61. Z = Z+lam*(g[k]**2)*getH(g[k])
  62.  
  63. for k in range (1, len(geq)):
  64. Z = Z+lam*(geq[k]**2)*getHeq(geq[k])
  65.  
  66. return Z
  67.  
  68. pop = 30
  69. var = 10
  70. maxGen = 4500
  71. mini =[0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5]
  72. #maxi = [0, 1, 1, 3, 1, 45, 1, 35, 1, 92, 1, 93, 40, 55, 1, 1, 1, 1, 61, 60, 1, 1, 25, 40, 93, 1, 1, 1, 1, 3, 3, 95, 93, 3, 95, 96, 90, 3, 3, 40, 95, 50, 3, 3, 37, 3, 3, 35, 70, 93, 45]
  73. maxi = [0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
  74. #maxi = [0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]
  75. #lam = 7
  76. O1 = 1.00000000027
  77. O2 = 1.0000957
  78.  
  79. g = []
  80. geq = []
  81.  
  82. x = [0 for i in range (var+1)]
  83. X = [[0 for i in range (var+1)] for j in range (pop+1)]
  84. M = [[0 for i in range (var+1)] for j in range (pop+1)]
  85.  
  86. y = [0 for i in range (var+1)]
  87.  
  88. f = [0 for i in range (pop+1)]
  89. f[0] = cst
  90.  
  91. for j in range (1, var+1):
  92. for i in range (1, pop+1):
  93. X[i][j] = mini[j]+(maxi[j]-mini[j])*random()
  94. M[i][j] = X[i][j]
  95.  
  96. def method_1():
  97. global r1, worst
  98.  
  99. if gen == 1:
  100. for i in range (1, pop+1):
  101. f[i] = fobj(X[i])
  102. if i == 1:
  103. best = i
  104. worst = i
  105. else:
  106. if f[best] > f[i]:
  107. best = i
  108. if f[worst] < f[i]:
  109. worst = i
  110.  
  111. r1 = best
  112. X_best = X[best]
  113. X_worst = X[worst]
  114.  
  115. else:
  116. for i in range (1, pop+1):
  117. if i == 1:
  118. best = i
  119. worst = i
  120. else:
  121. if f[best] > f[i]:
  122. best = i
  123. if f[worst] < f[i]:
  124. worst = i
  125.  
  126. X_best = X[best]
  127. X_worst = X[worst]
  128.  
  129.  
  130. X_t = [[0 for i in range (var+1)] for j in range (pop+1)]
  131.  
  132. for i in range(1, pop+1):
  133. for j in range (1, var+1):
  134. X_t[i][j] = X[i][j]
  135.  
  136. for i in range (1, pop+1):
  137. for j in range (1, var+1):
  138. vals = X[i][j]+random()*(X_best[j]-abs(X[i][j]))-random()*(X_worst[j]-abs(X[i][j]))
  139. if vals < mini[j]:
  140. X_t[i][j] = mini[j]
  141. elif vals > maxi[j]:
  142. X_t[i][j] = maxi[j]
  143. else:
  144. X_t[i][j] = vals
  145.  
  146. f_new = [0]
  147. for i in range (1, pop+1):
  148. f_new.append(fobj(X_t[i]))
  149.  
  150. for i in range (1, pop+1):
  151. if f[i] > f_new[i]:
  152. X[i] = X_t[i]
  153. f[i] = f_new[i]
  154.  
  155. if i == 1:
  156. worst = i
  157. elif f[worst] < f[i]:
  158. worst = i
  159.  
  160. def method_2():
  161. p = [i for i in range (1, pop+1)]
  162. p.remove(r1)
  163.  
  164. r2 = choice(p)
  165. p.remove(r2)
  166. r3 = choice(p)
  167. ex = 0
  168.  
  169. X_child = [0]
  170.  
  171. for i in range (1, var+1):
  172. R1 = X[r1][i]
  173. R2 = X[r2][i]
  174. R3 = X[r3][i]
  175.  
  176. fR1 = fobj(X[r1])
  177. fR2 = fobj(X[r2])
  178. fR3 = fobj(X[r3])
  179.  
  180. den = (R2-R3)*fR1+(R3-R1)*fR2+(R1-R2)*fR3
  181. tries = 0
  182. while den == 0:
  183. tries += 1
  184. if tries > 10:
  185. ex = 1
  186. break
  187. r3 = choice(p)
  188. R3 = X[r3][i]
  189. fR3 = fobj(X[r3])
  190. den = (R2-R3)*fR1+(R3-R1)*fR2+(R1-R2)*fR3
  191.  
  192. if ex == 1:
  193. break
  194. val = 0.5*(float((R2**2-R3**2)*fR1+(R3**2-R1**2)*fR2+(R1**2-R2**2)*fR3)/((R2-R3)*fR1+(R3-R1)*fR2+(R1-R2)*fR3))
  195. if val < mini[j]:
  196. X_child.append(mini[j])
  197. elif val > maxi[j]:
  198. X_child.append(maxi[j])
  199. else:
  200. X_child.append(val)
  201.  
  202. if ex == 0:
  203. f_child = fobj(X_child)
  204.  
  205. if f_child < f[worst]:
  206. f[worst] = f_child
  207. X[worst] = X_child
  208.  
  209. def sol():
  210. print("\nSolution table:\n")
  211. s = ""
  212. for i in range (1, var+1):
  213. s += "x"+str(i)+" "
  214. print(s+"f(x)\n")
  215.  
  216. for i in range (1, pop+1):
  217. s = ""
  218. for j in range (1, var+1):
  219. s += str(X[i][j])+" "
  220. print(s+" "+str(f[i])+"\n")
  221.  
  222. gen = 1
  223. T = float('inf')
  224. final = 1
  225.  
  226. start_time = time()
  227.  
  228. while gen <= maxGen:
  229. p = (O2 - O1)/(1 + e**((20*(-gen+(maxGen/4)))/maxGen)) + O1
  230. lam = 10**p
  231.  
  232. method_1()
  233.  
  234. if T >= min(f):
  235. T = min(T, min(f))
  236. for i in range (1, pop+1):
  237. if f[i] == T:
  238. vals = X[i]
  239. break
  240. final = f.index(min(f))
  241.  
  242. T = min(T, min(f))
  243.  
  244. #print("Gen "+str(gen)+":",T)
  245.  
  246. gen += 1
  247. #sol()
  248.  
  249. '''final = 1
  250. for i in range (1, pop+1):
  251. if f[final] > f[i]:
  252. final = i
  253. '''
  254.  
  255. #sol()
  256.  
  257. execution_time = time()-start_time
  258. print("Execution time in seconds: "+str(execution_time))
  259.  
  260. print("Final solution:\n")
  261. print("Values:")
  262. for i in range (1, var+1):
  263. print("x"+str(i)+" = "+str(X[final][i]))
  264.  
  265. x = X[final]
  266. for i in range (var+1):
  267. if x[i] > 0:
  268. y[i] = 1
  269. else:
  270. y[i] = 0
  271.  
  272. #Enter equation here
  273. Z = abs(x[1])+abs(x[2])+abs(x[3])+abs(x[4])+abs(x[5])+abs(x[6])+abs(x[7])+abs(x[8])+abs(x[9])+abs(x[10])+abs(x[1])*abs(x[2])*abs(x[3])*abs(x[4])*abs(x[5])*abs(x[6])*abs(x[7])*abs(x[8])*abs(x[9])*abs(x[10])
  274.  
  275. #print("\nf(x) = "+str(T))
  276. print("\nf(x) = "+str(Z))
  277.  
  278.  
  279.  
  280. x = vals
  281. print("\nFinal solution:\n")
  282. print("Values:")
  283. for i in range (1, var+1):
  284. print("x"+str(i)+" = "+str(vals[i]))
  285.  
  286. #x = X[final]
  287. for i in range (var+1):
  288. if x[i] > 0:
  289. y[i] = 1
  290. else:
  291. y[i] = 0
  292.  
  293. Z = abs(x[1])+abs(x[2])+abs(x[3])+abs(x[4])+abs(x[5])+abs(x[6])+abs(x[7])+abs(x[8])+abs(x[9])+abs(x[10])+abs(x[1])*abs(x[2])*abs(x[3])*abs(x[4])*abs(x[5])*abs(x[6])*abs(x[7])*abs(x[8])*abs(x[9])*abs(x[10])
  294.  
  295. #print("\nf(x) = "+str(T))
  296. print("\nf(x) = "+str(Z))
  297.  
  298.  
  299.  
  300. #print()
  301. #print()
  302.  
  303. #print(ineq(X[final]))
  304. #print(g)
  305.  
  306.  
  307. print()
  308. print()
  309.  
  310. for j in range (1, var+1):
  311. for i in range (1, pop+1):
  312. X[i][j] = M[i][j]
  313.  
  314. gen = 1
  315. T = float('inf')
  316. final = 1
  317.  
  318. start_time = time()
  319.  
  320. while gen <= maxGen:
  321. p = ((O2 - O1)/(1 + e**((20*(-gen+(maxGen/4)))/maxGen))) + O1
  322. lam = 10**p
  323.  
  324. if gen % 2 == 1:
  325. method_1()
  326. else:
  327. method_2()
  328.  
  329. if T >= min(f):
  330. T = min(T, min(f))
  331. for i in range (1, pop+1):
  332. if f[i] == T:
  333. vals = X[i]
  334. break
  335. final = f.index(min(f))
  336.  
  337. T = min(T, min(f))
  338.  
  339. #print("Gen "+str(gen)+":",T)
  340.  
  341. gen += 1
  342. #sol()
  343.  
  344. '''final = 1
  345. for i in range (1, pop+1):
  346. if f[final] > f[i]:
  347. final = i
  348. '''
  349.  
  350. #sol()
  351.  
  352. execution_time = time()-start_time
  353. print("Execution time in seconds: "+str(execution_time))
  354.  
  355. print("Final solution:\n")
  356. print("Values:")
  357. for i in range (1, var+1):
  358. print("x"+str(i)+" = "+str(X[final][i]))
  359.  
  360. x = X[final]
  361. for i in range (var+1):
  362. if x[i] > 0:
  363. y[i] = 1
  364. else:
  365. y[i] = 0
  366.  
  367. #Enter equation here
  368. Z = abs(x[1])+abs(x[2])+abs(x[3])+abs(x[4])+abs(x[5])+abs(x[6])+abs(x[7])+abs(x[8])+abs(x[9])+abs(x[10])+abs(x[1])*abs(x[2])*abs(x[3])*abs(x[4])*abs(x[5])*abs(x[6])*abs(x[7])*abs(x[8])*abs(x[9])*abs(x[10])
  369.  
  370. #print("\nf(x) = "+str(T))
  371. print("\nf(x) = "+str(Z))
  372.  
  373. #print(ineq(X[final]))
  374. #print(g)
  375.  
  376.  
  377.  
  378. x = vals
  379. print("\nFinal solution:\n")
  380. print("Values:")
  381. for i in range (1, var+1):
  382. print("x"+str(i)+" = "+str(vals[i]))
  383.  
  384. #x = X[final]
  385. for i in range (var+1):
  386. if x[i] > 0:
  387. y[i] = 1
  388. else:
  389. y[i] = 0
  390.  
  391. Z = abs(x[1])+abs(x[2])+abs(x[3])+abs(x[4])+abs(x[5])+abs(x[6])+abs(x[7])+abs(x[8])+abs(x[9])+abs(x[10])+abs(x[1])*abs(x[2])*abs(x[3])*abs(x[4])*abs(x[5])*abs(x[6])*abs(x[7])*abs(x[8])*abs(x[9])*abs(x[10])
  392. #print("\nf(x) = "+str(T))
  393. print("\nf(x) = "+str(Z))
  394.  
Success #stdin #stdout 2.4s 9936KB
stdin
Standard input is empty
stdout
Execution time in seconds: 1.41509604454
Final solution:

Values:
x1 = -0.156991540719
x2 = -5
x3 = 1.15412711784
x4 = 0.291720205622
x5 = 0.417112847104
x6 = 0.541198282881
x7 = 2.54583552128
x8 = 2.94279904272
x9 = 0.747197232211
x10 = 0.818367470404

f(x) = 14.888656383

Final solution:

Values:
x1 = 0.182826728739
x2 = 0.635707485695
x3 = -0.915035370508
x4 = 0.52810366891
x5 = -0.27694671408
x6 = -0.427860781502
x7 = -0.0749517875206
x8 = 0.165144009128
x9 = -0.199706363109
x10 = -0.14815019716

f(x) = 3.55443554355
()
()
Execution time in seconds: 0.988826990128
Final solution:

Values:
x1 = 0.25829580488
x2 = -1.46619031878
x3 = -1.03127584543
x4 = 0.653394667955
x5 = 2.71416978175
x6 = -0.300913327833
x7 = -0.397199329048
x8 = 1.20927296154
x9 = -0.58030686756
x10 = 0.193819646914

f(x) = 8.81609820255

Final solution:

Values:
x1 = -0.0337876324219
x2 = 0.272358554795
x3 = 0.320320931581
x4 = 0.0456179161084
x5 = -0.728489068864
x6 = 0.3537866441
x7 = -0.029523740756
x8 = -0.0455564942932
x9 = 0.700989567208
x10 = -0.0911848843542

f(x) = 2.62161543746