Skip to content

Instantly share code, notes, and snippets.

@tanmayb123
Created May 10, 2019 05:45
Show Gist options
  • Save tanmayb123/67aea3e09d37110e91d6e3de1163cca3 to your computer and use it in GitHub Desktop.
Save tanmayb123/67aea3e09d37110e91d6e3de1163cca3 to your computer and use it in GitHub Desktop.
using Flux.Tracker
using Flux.Tracker: update!
using ProgressMeter
euclidean_distance(p1, p2) = sqrt((p1[1] - p2[1]) ^ 2 + (p1[2] - p2[2]) ^ 2)
squared_error(expected, output) = (expected - output) ^ 2
function trilateration_error(r1, r2, r3, expected_distances, prediction)
prediction_r1 = euclidean_distance(prediction, r1)
prediction_r2 = euclidean_distance(prediction, r2)
prediction_r3 = euclidean_distance(prediction, r3)
error_r1 = squared_error(expected_distances[1], prediction_r1)
error_r2 = squared_error(expected_distances[2], prediction_r2)
error_r3 = squared_error(expected_distances[3], prediction_r3)
return error_r1 + error_r2 + error_r3
end
d_trilateration_error(r1, r2, r3, expected_distances, prediction) = Tracker.gradient(trilateration_error, r1, r2, r3, expected_distances, prediction)[5]
ref1 = param([0, 20])
ref2 = param([-20, 0])
ref3 = param([20, 0])
g = param([5, 10])
pred = param([1, 1])
expected_distances = [euclidean_distance(ref1, g), euclidean_distance(ref2, g), euclidean_distance(ref3, g)]
for i in 1:5000
grad = d_trilateration_error(ref1, ref2, ref3, expected_distances, pred)
update!(pred, -0.1 * grad)
end
println(pred)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment