Skip to content

Instantly share code, notes, and snippets.

@d4em0n
Last active June 19, 2020 07:58
Show Gist options
  • Save d4em0n/effecb184f973935fab962f71efe1e50 to your computer and use it in GitHub Desktop.
Save d4em0n/effecb184f973935fab962f71efe1e50 to your computer and use it in GitHub Desktop.
optimum point hill climbing
from math import *
#points = [(2,2),(3,4),(4,2),(5,4)]
points = []
def euclid_length(x1,y1,x2,y2):
return sqrt((x1-x2)**2 + (y1-y2)**2)
def derivx_euclid_length(x1,y1,x2,y2):
return (x1-x2)/sqrt((x1-x2)**2 + (y1-y2)**2)
def derivy_euclid_length(x1,y1,x2,y2):
return (y1-y2)/sqrt((x1-x2)**2 + (y1-y2)**2)
def euclid_deriv_length(x1,y1,x2,y2):
dx = derivx_euclid_length(x1,y1,x2,y2)
dy = derivy_euclid_length(x1,y1,x2,y2)
return (dx,dy)
def calc_deriv_score(point):
x,y = point
dx,dy = 0,0
for point in points:
xa,ya = point
dxi,dyi = euclid_deriv_length(x,y,xa,ya)
dx += dxi
dy += dyi
return (dx,dy)
def calc_score(point):
x,y = point
score = 0
for point in points:
xa,ya = point
score += euclid_length(x,y,xa,ya)
return score
def hill(start):
eps = 100
lr = 0.1
for i in range(eps):
dx,dy = calc_deriv_score(start)
dx *= lr
dy *= lr
x,y = start
x -= dx
y -= dy
start = (x,y)
hasil = start
print("Titik tengah optimum: " + str(start))
start = (0,0) # random point
n = input("Masukkan jumlah titik: ")
for i in range(int(n)):
print("")
print("Masukkan titik ke-{}".format(i+1))
x = int(input("Masukkan titik X: "))
y = int(input("Masukkan titik Y: "))
points.append((x,y))
hill(start)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment