Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.48 KB | None | 0 0
  1. import math
  2. import random
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from mpl_toolkits import mplot3d
  6. from random import uniform
  7.  
  8. #a=[-5,5]
  9. #a=[-5.12,5.12]
  10. a=[-10,10]
  11. def f1(x):
  12. return (x[0] - 3) ** 2 + (x[1] + 1) ** 2
  13. def f2(x):
  14. return (1 - x[0]) ** 2 + 100 * (x[1] - x[0] ** 2) ** 2
  15. def f3(x):
  16. return (20 + (x[0] ** 2 - 10 * np.cos(2 * 3.14 * x[0])) + (x[1] ** 2 - 10 * np.cos(2 * 3.14 * x[1])))
  17. def f4(x):
  18. return (-abs(np.sin(x[0]) * np.cos(x[1]) * np.e**(abs(1 - (np.sqrt((x[0] ** 2) + (x[1] ** 2)) / 3.14)))))
  19.  
  20. def TS(f,x0,delta_x,N,eps,L):
  21. i=0
  22. t=[]
  23. x=x0
  24. v=f(x0)
  25. r=x
  26. while True:
  27. i=i+1
  28. x1 = x[0]
  29. x2 = x[1]
  30. dx1 = delta_x[0]
  31. dx2 = delta_x[1]
  32. omega=[]
  33. okolina=[[x1+dx1, x2+dx2],[x1+dx1, x2],[x1+dx1, x2-dx2],[x1, x2-dx2],[x1-dx1, x2-dx2],[x1-dx1, x2],[x1-dx1, x2+dx2],[x1, x2+dx2]]
  34. for j in okolina:
  35. if j[0]<a[0]:
  36. j[0]=a[0]
  37. elif j[0]>a[1]:
  38. j[0]=a[1]
  39. if j[1]<a[0]:
  40. j[1]=a[0]
  41. elif j[1]>a[1]:
  42. j[1]=a[1]
  43. for k in okolina:
  44. if k in t:
  45. continue
  46. else:
  47. if not omega:
  48. omega.append(k)
  49. elif f(k)<f(omega[0]):
  50. omega[0]=k
  51. if not omega:
  52. omega.append(okolina[0])
  53. else:
  54. x=omega[0]
  55. if(len(t)>L):
  56. t=t[1:]
  57. t.append(x)
  58. if i>N or np.abs(f(x)-f(r))<eps:
  59. break
  60. if f(x)<f(r):
  61. r=x
  62. return r,f(r)
  63.  
  64. def LS(f, x0, delta_x, N, eps):
  65. x=x0
  66. i=0
  67.  
  68. for i in range(N):
  69. v=f(x)
  70. x1 = x[0]
  71. x2 = x[1]
  72. dx1 = delta_x[0]
  73. dx2 = delta_x[1]
  74. omega=[]
  75. okolina=[[x1+dx1, x2+dx2],[x1+dx1, x2],[x1+dx1, x2-dx2],[x1, x2-dx2],[x1-dx1, x2-dx2],[x1-dx1, x2],[x1-dx1, x2+dx2],[x1, x2+dx2]]
  76. for j in range(0,len(okolina)):
  77.  
  78. xpom = okolina[j]
  79. if (xpom[0]<a[0]):
  80. xpom[0]=a[0]
  81. if (xpom[0]>a[1]):
  82. xpom[0]=a[1]
  83. if (xpom[1]<a[0]):
  84. xpom[1]=a[0]
  85. if (xpom[1]>a[1]):
  86. xpom[1]=a[1]
  87. vpom = f(xpom)
  88. if (vpom < v):
  89. omega.append(xpom)
  90. if (omega==[]):
  91. return (x, f(x))
  92. else:
  93. mini=f(omega[0])
  94. for k in range(0,len(omega)):
  95. if (f(omega[k])<=mini):
  96. x=omega[k]
  97. mini=f(x)
  98. if abs(f(x) - f(xpom)) < eps:
  99. break;
  100. return (x, f(x))
  101. def ILS(f,x0,delta_x,N,eps):
  102. br=0
  103. memorija=[]
  104. x = LS(f, x0, delta_x,N, eps)
  105. memorija.append(x0)
  106. while br<N:
  107. x1=LS(f, Perturbacija(x,memorija),delta_x,N, eps)
  108. d = abs(x1[1] - x[1])
  109. if ((x1[1] < x[1]) and (x1[0] not in memorija)):
  110. x = x1
  111. memorija = AzuriranjeMemorije(x, x1, memorija)
  112. if (d >= eps):
  113. br=br+1
  114. else:
  115. return (x[0], x[1])
  116.  
  117. return (x[0], x[1])
  118.  
  119. def Perturbacija(x,memorija):
  120. tacka = [uniform(a[0],a[1]),uniform(a[0],a[1])]
  121. if ((tacka in memorija) or (tacka == x[0])):
  122. tacka = Perturbacija(x, memorija)
  123. memorija.append(tacka)
  124. return tacka
  125.  
  126. def AzuriranjeMemorije(xpom,xrand,memorija):
  127. if (xpom[0] not in memorija):
  128. memorija.append(xpom[0])
  129. if (xrand[0] not in memorija):
  130. memorija.append(xrand[0])
  131. return memorija
  132.  
  133.  
  134. primjer=TS(f4, [3, 3],[0.1, 0.1], 10000, 0, 1000)
  135. print(primjer)
  136. novi=[]
  137. novi.append(primjer[0])
  138. drugi = ILS(f4, [3, 3],[0.1, 0.1],10000, 0)
  139. print("ILS: ",drugi)
  140. novi.append(drugi[0])
  141. a=novi[0] #tacka dobijena funkcijom TS
  142. b=novi[1] #tacka dobijena funkcijom ILS
  143. x1=np.linspace(-10,10,100)
  144. x2=np.linspace(-10,10,100)
  145. X1,X2=np.meshgrid(x1,x2)
  146. X=[X1,X2]
  147. Y=f4(X)
  148. fig=plt.figure()
  149. ax=plt.axes(projection='3d')
  150. ax.contour(X1,X2,Y,50,cmap='binary')
  151. ax.scatter(a[0],a[1],f4(a), color='blue',marker='x')
  152. ax.scatter(b[0],b[1],f4(b), color='green',marker='x')
  153. MIN=[3,-1]
  154. MIN2=[1,1]
  155. #ax.scatter(1,1,f2(MIN2),color='red',marker='o') #ekstremi za drugu funkciju
  156. #ax.scatter(3,-1,f1(MIN),color='red',marker='o') #ekstremi za prvu funkciju
  157. ax.set_xlabel('$x_1$')
  158. ax.set_ylabel('$x_2$')
  159. ax.set_zlabel('$f(x_1,x_2)$')
  160. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement