Add TimerOutputs; reformat source code; minor performance improvement

feature/composition
Alinson S. Xavier 1 year ago
parent 72e49313c9
commit f6c81dd301

@ -1,8 +1,8 @@
# This file is machine-generated - editing it directly is not advised # This file is machine-generated - editing it directly is not advised
julia_version = "1.10.1" julia_version = "1.10.2"
manifest_format = "2.0" manifest_format = "2.0"
project_hash = "4170463ca454c6921d0f3b304e50e00eea5e30ba" project_hash = "c30276d4b440bf43a36bc652205ac642814efc55"
[[deps.ArgTools]] [[deps.ArgTools]]
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
@ -31,6 +31,12 @@ git-tree-sha1 = "b7ba7f0d727433c961909b329c4d2263268da4c9"
uuid = "44b605c4-b955-5f2b-9b6d-d2bd01d3d205" uuid = "44b605c4-b955-5f2b-9b6d-d2bd01d3d205"
version = "4.0.0" version = "4.0.0"
[[deps.CSTParser]]
deps = ["Tokenize"]
git-tree-sha1 = "b544d62417a99d091c569b95109bc9d8c223e9e3"
uuid = "00ebfdb7-1f24-5e51-bd34-a7502290713f"
version = "3.4.2"
[[deps.CSV]] [[deps.CSV]]
deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"]
git-tree-sha1 = "679e69c611fff422038e9e21e270c4197d49d918" git-tree-sha1 = "679e69c611fff422038e9e21e270c4197d49d918"
@ -55,6 +61,12 @@ git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73"
uuid = "944b1d66-785c-5afd-91f1-9de20f533193" uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
version = "0.7.4" version = "0.7.4"
[[deps.CommonMark]]
deps = ["Crayons", "JSON", "PrecompileTools", "URIs"]
git-tree-sha1 = "532c4185d3c9037c0237546d817858b23cf9e071"
uuid = "a80b9123-70ca-4bc0-993e-6e3bcb318db6"
version = "0.8.12"
[[deps.CommonSubexpressions]] [[deps.CommonSubexpressions]]
deps = ["MacroTools", "Test"] deps = ["MacroTools", "Test"]
git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7"
@ -154,6 +166,11 @@ deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
version = "1.6.0" version = "1.6.0"
[[deps.ExprTools]]
git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec"
uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
version = "0.1.10"
[[deps.FilePathsBase]] [[deps.FilePathsBase]]
deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"]
git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa"
@ -183,6 +200,11 @@ git-tree-sha1 = "ed98a4429bf0a033ccc5e036120181dd52f06d31"
uuid = "0ef565a4-170c-5f04-8de2-149903a85f3d" uuid = "0ef565a4-170c-5f04-8de2-149903a85f3d"
version = "1.1.0" version = "1.1.0"
[[deps.Glob]]
git-tree-sha1 = "97285bbd5230dd766e9ef6749b80fc617126d496"
uuid = "c27321d9-0574-5035-807b-f59d2c89b15c"
version = "1.3.1"
[[deps.Gurobi]] [[deps.Gurobi]]
deps = ["LazyArtifacts", "Libdl", "MathOptInterface"] deps = ["LazyArtifacts", "Libdl", "MathOptInterface"]
git-tree-sha1 = "5995b72d385235f3fe55f8f0c4ad61049f867814" git-tree-sha1 = "5995b72d385235f3fe55f8f0c4ad61049f867814"
@ -250,6 +272,12 @@ version = "1.20.0"
[deps.JuMP.weakdeps] [deps.JuMP.weakdeps]
DimensionalData = "0703355e-b756-11e9-17c0-8b28908087d0" DimensionalData = "0703355e-b756-11e9-17c0-8b28908087d0"
[[deps.JuliaFormatter]]
deps = ["CSTParser", "CommonMark", "DataStructures", "Glob", "Pkg", "PrecompileTools", "Tokenize"]
git-tree-sha1 = "1c4880cb70a5c6c87ea36deccc3d7f9e7969c18c"
uuid = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
version = "1.0.56"
[[deps.JuliaInterpreter]] [[deps.JuliaInterpreter]]
deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"]
git-tree-sha1 = "7b762d81887160169ddfc93a47e5fd7a6a3e78ef" git-tree-sha1 = "7b762d81887160169ddfc93a47e5fd7a6a3e78ef"
@ -572,6 +600,17 @@ version = "1.10.0"
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
[[deps.TimerOutputs]]
deps = ["ExprTools", "Printf"]
git-tree-sha1 = "f548a9e9c490030e545f72074a41edfd0e5bcdd7"
uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f"
version = "0.5.23"
[[deps.Tokenize]]
git-tree-sha1 = "5b5a892ba7704c0977013bd0f9c30f5d962181e0"
uuid = "0796e94c-ce3b-5d07-9a54-7f471281c624"
version = "0.5.28"
[[deps.TranscodingStreams]] [[deps.TranscodingStreams]]
git-tree-sha1 = "54194d92959d8ebaa8e26227dbe3cdefcdcd594f" git-tree-sha1 = "54194d92959d8ebaa8e26227dbe3cdefcdcd594f"
uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
@ -581,6 +620,11 @@ weakdeps = ["Random", "Test"]
[deps.TranscodingStreams.extensions] [deps.TranscodingStreams.extensions]
TestExt = ["Test", "Random"] TestExt = ["Test", "Random"]
[[deps.URIs]]
git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b"
uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
version = "1.5.1"
[[deps.UUIDs]] [[deps.UUIDs]]
deps = ["Random", "SHA"] deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"

@ -7,8 +7,10 @@ Gurobi = "2e9cd046-0924-5485-92f1-d5272153d98b"
HiGHS = "87dc4568-4c63-4d18-b0c0-bb2238e4078b" HiGHS = "87dc4568-4c63-4d18-b0c0-bb2238e4078b"
JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
JuMP = "4076af6c-e467-56ae-b986-b466b2749572" JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
JuliaFormatter = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
NearestNeighbors = "b8a86587-4115-5ab1-83bc-aa920d37bbce" NearestNeighbors = "b8a86587-4115-5ab1-83bc-aa920d37bbce"
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" Revise = "295af30f-e4ad-537b-8983-00126c2a3abe"
TimerOutputs = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f"
ZipFile = "a5390f91-8eb1-5f08-bee0-b1d1ffed6cea" ZipFile = "a5390f91-8eb1-5f08-bee0-b1d1ffed6cea"

@ -8,6 +8,7 @@ using DataFrames
using CRC using CRC
using ZipFile using ZipFile
using Statistics using Statistics
using TimerOutputs
crc32 = crc(CRC_32) crc32 = crc(CRC_32)
@ -77,6 +78,7 @@ function _calculate_distance(
csv_filename = joinpath(basedir, "dist_driving.csv") csv_filename = joinpath(basedir, "dist_driving.csv")
# Download pre-computed driving data # Download pre-computed driving data
@timeit "Download data" begin
if !isfile(csv_filename) if !isfile(csv_filename)
_download_zip( _download_zip(
"https://axavier.org/RELOG/0.6/data/dist_driving_0b9a6ad6.zip", "https://axavier.org/RELOG/0.6/data/dist_driving_0b9a6ad6.zip",
@ -85,23 +87,28 @@ function _calculate_distance(
0x0b9a6ad6, 0x0b9a6ad6,
) )
end end
end
# Fit kNN model @timeit "Fit KNN model" begin
df = DataFrame(CSV.File(csv_filename, missingstring="NaN")) df = DataFrame(CSV.File(csv_filename, missingstring="NaN"))
dropmissing!(df) dropmissing!(df)
coords = Matrix(df[!, [:source_lat, :source_lon, :dest_lat, :dest_lon]])' coords = Matrix(df[!, [:source_lat, :source_lon, :dest_lat, :dest_lon]])'
metric.ratios = Matrix(df[!, [:ratio]]) metric.ratios = Matrix(df[!, [:ratio]])
metric.tree = KDTree(coords) metric.tree = KDTree(coords)
end end
end
# Compute Euclidean distance @timeit "Compute Euclidean distance" begin
dist_euclidean = dist_euclidean =
_calculate_distance(source_lat, source_lon, dest_lat, dest_lon, EuclideanDistance()) _calculate_distance(source_lat, source_lon, dest_lat, dest_lon, EuclideanDistance())
end
# Predict ratio @timeit "Predict driving distance" begin
idxs, _ = knn(metric.tree, [source_lat, source_lon, dest_lat, dest_lon], 5) idxs, _ = knn(metric.tree, [source_lat, source_lon, dest_lat, dest_lon], 5)
ratio_pred = mean(metric.ratios[idxs]) ratio_pred = mean(metric.ratios[idxs])
dist_pred = round(dist_euclidean * ratio_pred, digits=3) dist_pred = round(dist_euclidean * ratio_pred, digits=3)
isfinite(dist_pred) || error("non-finite distance detected: $dist_pred") isfinite(dist_pred) || error("non-finite distance detected: $dist_pred")
end
return dist_pred return dist_pred
end end

@ -27,11 +27,9 @@ function _init(model::JuMP.Model, key::Symbol)::OrderedDict
end end
function _set_names!(model::JuMP.Model) function _set_names!(model::JuMP.Model)
@info "Setting variable and constraint names..."
time_varnames = @elapsed begin time_varnames = @elapsed begin
_set_names!(object_dictionary(model)) _set_names!(object_dictionary(model))
end end
@info @sprintf("Set names in %.2f seconds", time_varnames)
end end
function _set_names!(dict::Dict) function _set_names!(dict::Dict)

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save