diff --git a/app/jobs/table_simulator_job.rb b/app/jobs/table_simulator_job.rb index 51b7256..0471795 100644 --- a/app/jobs/table_simulator_job.rb +++ b/app/jobs/table_simulator_job.rb @@ -12,8 +12,8 @@ class TableSimulatorJob < ApplicationJob ActsAsTenant.with_tenant(Wedding.find(wedding_id)) do engine = VNS::Engine.new - engine.add_perturbation(Tables::Swap) - engine.add_perturbation(Tables::Shift) + engine.add_optimization(Tables::Swap) + engine.add_optimization(Tables::Shift) initial_solution = Tables::Distribution.new(min_per_table: MIN_PER_TABLE, max_per_table: MAX_PER_TABLE) initial_solution.random_distribution(Guest.potential.shuffle) diff --git a/app/services/vns/engine.rb b/app/services/vns/engine.rb index d66c80b..075ad1a 100644 --- a/app/services/vns/engine.rb +++ b/app/services/vns/engine.rb @@ -15,23 +15,23 @@ module VNS @target_function = function end - def add_perturbation(klass) - @perturbations ||= Set.new - @perturbations << klass + def add_optimization(klass) + @optimizations ||= Set.new + @optimizations << klass end attr_writer :initial_solution def run raise 'No target function defined' unless @target_function - raise 'No perturbations defined' unless @perturbations + raise 'No optimizations defined' unless @optimizations raise 'No initial solution defined' unless @initial_solution @best_solution = @initial_solution @best_score = @target_function.call(@best_solution) - self.class.sequence(@perturbations).each do |perturbation| - optimize(perturbation) + self.class.sequence(@optimizations).each do |optimization| + optimize(optimization) end @best_solution @@ -39,11 +39,11 @@ module VNS private - def optimize(perturbation_klass) + def optimize(optimization_klass) loop do optimized = false - perturbation_klass.new(@best_solution).each do |alternative_solution| + optimization_klass.new(@best_solution).each do |alternative_solution| score = @target_function.call(alternative_solution) next if score >= @best_score diff --git a/lib/tasks/vns.rake b/lib/tasks/vns.rake index b8c7b3a..9554a76 100644 --- a/lib/tasks/vns.rake +++ b/lib/tasks/vns.rake @@ -8,8 +8,8 @@ namespace :vns do engine = VNS::Engine.new - engine.add_perturbation(Tables::Swap) - engine.add_perturbation(Tables::Shift) + engine.add_optimization(Tables::Swap) + engine.add_optimization(Tables::Shift) hierarchy = AffinityGroupsHierarchy.new initial_solution = Tables::Distribution.new(min_per_table: 8, max_per_table: 10, hierarchy:)