# frozen_string_literal: true namespace :vns do desc 'Benchmarks the efficiency of the VNS implementation' task benchmark: :environment do ActsAsTenant.with_tenant(Wedding.first) do Rails.logger.info "There are #{Guest.potential.count} potential guests" engine = VNS::Engine.new engine.add_perturbation(Tables::Swap) engine.add_perturbation(Tables::Shift) hierarchy = AffinityGroupsHierarchy.new initial_solution = Tables::Distribution.new(min_per_table: 8, max_per_table: 10, hierarchy:) random = Random.new(561_163) initial_solution.random_distribution(Guest.potential.shuffle(random:), random:) engine.initial_solution = initial_solution engine.target_function(&:discomfort) solution = Rails.benchmark('VNS Benchmarking') { engine.run } Rails.logger.info "Best solution found with discomfort: #{solution.discomfort}" end end end