30 lines
		
	
	
		
			927 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			927 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# 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_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:)
 | 
						|
 | 
						|
      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
 |