Skip to content

Commit 5a07b55

Browse files
authored
Merge pull request #4 from bibenga/feature/no-improvement
add NoImprovement
2 parents 32f550c + cb7ebb3 commit 5a07b55

2 files changed

Lines changed: 44 additions & 0 deletions

File tree

lib/alns/stop/no_improvement.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# frozen_string_literal: true
2+
3+
require 'alns/stop/base'
4+
5+
module ALNS
6+
module Stop
7+
class NoImprovement < Base
8+
def initialize(max_iterations)
9+
super()
10+
@max_iterations = max_iterations
11+
@target = nil
12+
@counter = 0
13+
end
14+
15+
def done?(_rnd, best, _current)
16+
if @target.nil? || best.objective < @target
17+
@target = best.objective
18+
@counter = 0
19+
else
20+
@counter += 1
21+
end
22+
@counter >= @max_iterations
23+
end
24+
end
25+
end
26+
end

test/stop/no_improvement_test.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../models'
5+
require 'minitest/autorun'
6+
require 'alns/stop/no_improvement'
7+
8+
class NoImprovementTest < Minitest::Test
9+
def test_done?
10+
stop = ALNS::Stop::NoImprovement.new(2)
11+
12+
assert !stop.done?(nil, FakeState.new(2), nil)
13+
assert !stop.done?(nil, FakeState.new(2), nil)
14+
assert !stop.done?(nil, FakeState.new(1), nil)
15+
assert !stop.done?(nil, FakeState.new(1), nil)
16+
assert stop.done?(nil, FakeState.new(1), nil)
17+
end
18+
end

0 commit comments

Comments
 (0)