From 35cdd17e4e8fbdda88a8a9e4d08090633ad0c777 Mon Sep 17 00:00:00 2001 From: raphasampaio Date: Wed, 5 Feb 2025 17:27:11 -0300 Subject: [PATCH] Update project --- src/assignments.jl | 5 +++++ src/localsearch/kmedoids.jl | 17 ++++++----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/assignments.jl b/src/assignments.jl index 2ee00ba..c3741e3 100644 --- a/src/assignments.jl +++ b/src/assignments.jl @@ -121,8 +121,13 @@ function assignment_step!(::BalancedKmeans; result::KmeansResult, distances::Abs end function assignment_step!(::Kmedoids; result::KmedoidsResult, distances::AbstractMatrix{<:Real}, medoids::AbstractVector{<:Vector{Int}}) + k = length(result.clusters) n = size(distances, 1) + for i in 1:k + empty!(medoids[i]) + end + for i in 1:n cluster, distance = kmedoids_assign(i, result.clusters, distances) push!(medoids[cluster], i) diff --git a/src/localsearch/kmedoids.jl b/src/localsearch/kmedoids.jl index eb40458..d087135 100644 --- a/src/localsearch/kmedoids.jl +++ b/src/localsearch/kmedoids.jl @@ -158,27 +158,22 @@ function fit!(kmedoids::AbstractKmedoids, distances::AbstractMatrix{<:Real}, res for iteration in 1:kmedoids.max_iterations previous_objective = result.objective - # assignment step - result.objective = 0 - for i in 1:k - empty!(medoids[i]) - clusters_size[i] = 0 - result.objective_per_cluster[i] = 0 - end - assignment_step!(kmedoids; result, distances, medoids) for (i, medoid) in enumerate(medoids) cluster = result.clusters[i] + + result.objective_per_cluster[i] = 0 for point in medoid distance = distances[point, cluster] - - clusters_size[i] += 1 - result.objective += distance result.objective_per_cluster[i] += distance end + + clusters_size[i] = length(medoid) end + result.objective = sum(result.objective_per_cluster) + change = abs(result.objective - previous_objective) if kmedoids.verbose