Refactor class to reduce complexity of #run method
Some checks failed
Run unit tests / rubocop (pull_request) Failing after 2m17s
Run unit tests / check-licenses (pull_request) Successful in 3m51s
Run unit tests / copyright_notice (pull_request) Successful in 4m4s
Run unit tests / unit_tests (pull_request) Successful in 10m37s
Run unit tests / build-static-assets (pull_request) Failing after 56s

This commit is contained in:
Manuel Bustillo 2025-09-15 23:04:02 +02:00
parent 78ab27a697
commit 7d8ecfd0e3
No known key found for this signature in database
GPG Key ID: A74BD9E346A80DDC

View File

@ -13,6 +13,10 @@ module VNS
end
end
def initialize
@perturbations = Set.new
end
def target_function(&function)
@target_function = function
end
@ -23,7 +27,6 @@ module VNS
end
def add_perturbation(klass)
@perturbations ||= Set.new
@perturbations << klass
end
@ -38,11 +41,7 @@ module VNS
attr_writer :initial_solution
def run
raise 'No target function defined' unless @target_function
raise 'No optimizations defined' unless @optimizations
raise 'No initial solution defined' unless @initial_solution
@perturbations ||= Set.new
check_preconditions!
@current_solution = @initial_solution
@best_score = @target_function.call(@current_solution)
@ -77,6 +76,12 @@ module VNS
private
def check_preconditions!
raise 'No target function defined' unless @target_function
raise 'No optimizations defined' unless @optimizations
raise 'No initial solution defined' unless @initial_solution
end
def run_all_optimizations
self.class.sequence(@optimizations).each do |optimization|
optimize(optimization)