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
 |