Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added features for experiment reproductibility and many other improvement : #203

Merged
merged 46 commits into from
May 5, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
aa2203d
added a guard for Evaluator evalFreq
Feb 18, 2022
c507cf6
added AccumulatedRewardBeforeReset to compute one path reward
Feb 18, 2022
fb2c249
added test sets for
Feb 18, 2022
63ae9e8
added TsptwRealData + dependencies
Feb 18, 2022
b7930cd
fixed typo
Feb 18, 2022
ee00993
redesign of smartreward functon
Feb 18, 2022
0429f65
fixing explorer decaying during evaluation
Feb 18, 2022
a133734
added testsets for explorer decaying
Feb 18, 2022
d2a6e66
added doc for fill_with_generator! function
Feb 22, 2022
755a1b1
fix typo
Feb 22, 2022
793139d
refacto SameInstancesEvaluator to avoid useless eval on non learned h…
Feb 22, 2022
b0b6c36
added repeatlast! function
Feb 22, 2022
3442dc2
added doc
Feb 22, 2022
de761e8
added rng on evaluator instance generation
Feb 23, 2022
ce14a31
added rng for tsptw fill_with_generator!
Feb 23, 2022
5cc383c
added testset for last_episode_total_reward for empty traj
Feb 23, 2022
1aadc20
reduced ρ vaue for SmartReward
Feb 23, 2022
1b32928
added testsets for fill_with_generator!
Feb 24, 2022
862dbdd
modified fill_with_generator! function tu fit new requirement
Feb 24, 2022
dd15ac7
changed SameInstancesEvaluator signature
Feb 24, 2022
6b88588
revmoves searhwith basicHerstics urng traning
Mar 16, 2022
5154287
fix launch experiment
Mar 22, 2022
028790d
added seed for NN layer initialisation
Mar 22, 2022
d238b82
fixed precompile time bias on 1st evaluation.
Mar 22, 2022
679c628
removed prints
Mar 23, 2022
5e77251
added seed for training instances generation
Mar 23, 2022
2af8044
added first "false" evaluation
Mar 23, 2022
5e011cb
added testsets for repeatlast!
Mar 23, 2022
8870ffd
WIP on basicmetrics
Mar 23, 2022
654b6f5
updated basicmetrics to be consistent.
Mar 24, 2022
bab6975
added basic metrics testets
Mar 24, 2022
4ce7662
removed dead dependencies
Mar 24, 2022
e4add08
Revert "added TsptwRealData + dependencies"
Apr 27, 2022
05b1dd9
removed TsptwRealData dependencies
Apr 27, 2022
50e7461
refacto doc
Apr 27, 2022
6085dce
removed obsolete comments
May 4, 2022
48f337a
Merge branch 'tom/feature/new_pipeline' of github.com:corail-research…
May 4, 2022
b82854a
fixed typo
May 4, 2022
1536cb5
removed max_dist
May 4, 2022
48cf440
replaced findall by findfirst
May 4, 2022
9644dc3
Merge branch 'master' into tom/feature/new_pipeline
3rdCore May 4, 2022
2b39d54
fixed merge conflict
May 4, 2022
c100838
Merge branch 'master' into tom/feature/new_pipeline
May 4, 2022
cf94c58
Change rng to only take type AbstractRNG
gostreap May 5, 2022
043347b
Add solutionFound to repeatLast + fix return type when scores is Nothing
gostreap May 5, 2022
fec5edb
Fix solutionFound count in repeatlast!
gostreap May 5, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
added testsets for fill_with_generator!
  • Loading branch information
Tom committed Feb 24, 2022
commit 1b32928844f838cb866f21d42365fe51529e1291
20 changes: 11 additions & 9 deletions test/RL/representation/tsptw/tsptwstaterepresentation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
max_tw = 8

generator = SeaPearl.TsptwGenerator(n_city, grid_size, max_tw_gap, max_tw)

SeaPearl.fill_with_generator!(model, generator; seed=42)

rng = MersenneTwister()
Random.seed!(rng, 42)
SeaPearl.fill_with_generator!(model, generator; rng = rng)

dist, timeWindows, pos = model.adhocInfo

Expand All @@ -36,16 +38,16 @@
@test trunc.(sr.nodeFeatures; digits=2) == transpose(Float32[0.53 0.17 0.0 0.62 0.0 0.0; 0.45 0.95 0.5 1.0 0.0 0.0; 0.01 0.97 0.75 0.93 0.0 0.0])
end
if VERSION >= v"1.7.0"
@test dist == [0 2 6; 2 0 5; 6 5 0]
@test timeWindows == [0 10; 4 8; 10 15]
@test pos == [6.293451231426089 7.031298490032015; 4.503389405961936 6.733461456394963; 4.774071434328178 1.6589443479313404]
@test dist == [0 8 10; 8 0 4; 10 4 0]
@test timeWindows == [0 10; 8 16; 12 15]
@test pos == [5.331830160438614 1.7293302893695128; 4.540291355871425 9.589258763297348; 0.17686826714964354 9.735659798036858]

sr = SeaPearl.TsptwStateRepresentation(model)

@test sr.dist == [0.0 0.3333333333333333 1.0; 0.3333333333333333 0.0 0.8333333333333334; 1.0 0.8333333333333334 0.0]
@test trunc.(sr.timeWindows; digits=2) == [0.0 0.66; 0.26 0.53; 0.66 1.0]
@test trunc.(sr.pos; digits=2) == [0.62 0.7; 0.45 0.67; 0.47 0.16]
@test trunc.(sr.nodeFeatures; digits=2) == transpose(Float32[0.62 0.7 0.0 0.66 0.0 0.0;0.45 0.67 0.26 0.53 0.0 0.0;0.47 0.16 0.66 1.0 0.0 0.0])
@test sr.dist ==[0.0 0.8 1.0; 0.8 0.0 0.4; 1.0 0.4 0.0]
@test trunc.(sr.timeWindows; digits=2) == [0.0 0.62; 0.5 1.0; 0.75 0.93]
@test trunc.(sr.pos; digits=2) == [0.53 0.17; 0.45 0.95; 0.01 0.97]
@test trunc.(sr.nodeFeatures; digits=2) == Float32[0.53 0.45 0.01; 0.17 0.95 0.97; 0.0 0.5 0.75; 0.62 1.0 0.93; 0.0 0.0 0.0; 0.0 0.0 0.0]
end
end
end
71 changes: 62 additions & 9 deletions test/datagen/coloring.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,34 @@

generator = SeaPearl.LegacyGraphColoringGenerator(nb_nodes, probability)


SeaPearl.fill_with_generator!(model, generator; seed=12)
rng = MersenneTwister()
Random.seed!(rng, 12)
SeaPearl.fill_with_generator!(model, generator; rng = rng)

@test length(keys(model.variables)) == nb_nodes + 1
@test length(model.constraints) == 24



model1 = SeaPearl.CPModel(trailer)
model2 = SeaPearl.CPModel(trailer)
model3 = SeaPearl.CPModel(trailer)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model1, generator; rng = rng)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model2, generator; rng = rng)

rng = MersenneTwister(14)
SeaPearl.fill_with_generator!(model3, generator; rng = rng)

for i in 1:24
@test model1.constraints[i].y.id == model2.constraints[i].y.id
@test model1.constraints[i].x.id == model2.constraints[i].x.id
end
@test model1.constraints[1].y.id != model3.constraints[1].y.id


end


Expand All @@ -27,18 +48,34 @@

generator = SeaPearl.HomogenousGraphColoringGenerator(nb_nodes, probability)


SeaPearl.fill_with_generator!(model, generator; seed=12)
rng = MersenneTwister()
Random.seed!(rng, 42)
SeaPearl.fill_with_generator!(model, generator; rng = rng)

@test length(keys(model.variables)) == nb_nodes + 1

if VERSION == v"1.6.0"
@test length(model.constraints) == 55
elseif VERSION >= v"1.7.0"
@test length(model.constraints) == 50
@test length(model.constraints) == 57
end


model1 = SeaPearl.CPModel(trailer)
model2 = SeaPearl.CPModel(trailer)
model3 = SeaPearl.CPModel(trailer)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model1, generator; rng = rng)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model2, generator; rng = rng)

rng = MersenneTwister(14)
SeaPearl.fill_with_generator!(model3, generator; rng = rng)

@test length(model1.constraints) == length(model2.constraints)
@test length(model1.constraints) != length(model3.constraints)

end

@testset "fill_with_generator!(::ClusterizedGraphColoringGenerator)" begin
Expand All @@ -51,8 +88,9 @@

generator = SeaPearl.ClusterizedGraphColoringGenerator(nb_nodes, k, probability)


SeaPearl.fill_with_generator!(model, generator; seed=12)
rng = MersenneTwister()
Random.seed!(rng, 12)
SeaPearl.fill_with_generator!(model, generator; rng = rng)

@test length(keys(model.variables)) == nb_nodes + 1

Expand All @@ -61,7 +99,22 @@
@test length(model.constraints) == 38
end

model1 = SeaPearl.CPModel(trailer)
model2 = SeaPearl.CPModel(trailer)
model3 = SeaPearl.CPModel(trailer)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model1, generator; rng = rng)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model2, generator; rng = rng)

rng = MersenneTwister(14)
SeaPearl.fill_with_generator!(model3, generator; rng = rng)

@test model1.constraints[2].y.id == model2.constraints[2].y.id
@test model1.constraints[2].y.id != model3.constraints[2].y.id

end

end
17 changes: 17 additions & 0 deletions test/datagen/eternity2.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,22 @@
@test length(model.constraints) == 61
empty!(model)
end

model1 = SeaPearl.CPModel(trailer)
model2 = SeaPearl.CPModel(trailer)
model3 = SeaPearl.CPModel(trailer)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model1, generator; rng = rng)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model2, generator; rng = rng)

rng = MersenneTwister(14)
SeaPearl.fill_with_generator!(model3, generator; rng = rng)

@test model1.constraints[1].table == model2.constraints[1].table
@test model1.constraints[1].table != model3.constraints[1].table

end
end
18 changes: 18 additions & 0 deletions test/datagen/knapsack.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,24 @@
@test length(model.constraints) == 3
empty!(model)
end


model1 = SeaPearl.CPModel(trailer)
model2 = SeaPearl.CPModel(trailer)
model3 = SeaPearl.CPModel(trailer)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model1, generator; rng = rng)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model2, generator; rng = rng)

rng = MersenneTwister(14)
SeaPearl.fill_with_generator!(model3, generator; rng = rng)

@test model1.constraints[2].v == model2.constraints[2].v
@test model1.constraints[2].v != model3.constraints[2].v

end

end
2 changes: 2 additions & 0 deletions test/datagen/nqueens.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,7 @@
@test length(model.constraints) == 3
empty!(model)
end


end
end
53 changes: 37 additions & 16 deletions test/datagen/tsptw.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ end

generator = SeaPearl.TsptwGenerator(n_city, grid_size, max_tw_gap, max_tw)

SeaPearl.fill_with_generator!(model, generator; seed=52)
rng = MersenneTwister()
Random.seed!(rng, 52)
SeaPearl.fill_with_generator!(model, generator; rng = rng)

foundDist, foundTW, foundPos, foundgrid_size = model.adhocInfo

Expand All @@ -42,24 +44,41 @@ end
@test foundTW == [0 10; 23 23; 25 26; 17 18; 12 13; 20 21; 15 15; 28 29; 10 11; 5 6]
end
if VERSION >= v"1.7.0"
@test foundDist == [0 2 5 3 3 3 3 4 1 5;
2 0 4 2 1 1 4 3 1 3;
5 4 0 2 4 4 4 2 4 4;
3 2 2 0 2 1 3 1 3 2;
3 1 4 2 0 1 5 2 2 2;
3 1 4 1 1 0 4 2 2 2;
3 4 4 3 5 4 0 4 3 6;
4 3 2 1 2 2 4 0 3 2;
1 1 4 3 2 2 3 3 0 4;
5 3 4 2 2 2 6 2 4 0]
@test foundTW == [0 10; 31 31; 10 10; 21 22; 6 6; 22 22; 26 27; 4 4; 15 15; 19 20]
@test foundDist == [0 4 2 3 3 3 3 3 2 4;
4 0 2 1 3 3 1 3 4 2;
2 2 0 0 3 3 1 3 3 3;
3 1 0 0 3 3 1 3 3 3;
3 3 3 3 0 1 3 0 1 3;
3 3 3 3 1 0 3 1 2 2;
3 1 1 1 3 3 0 3 3 2;
3 3 3 3 0 1 3 0 1 3;
2 4 3 3 1 2 3 1 0 4;
4 2 3 3 3 2 2 3 4 0]
@test foundTW == [0 10; 23 23; 25 26; 17 18; 12 13; 20 21; 15 15; 28 29; 10 11; 5 6]
end
@test foundgrid_size == grid_size

@test length(keys(model.variables)) == 2 * n_city^2 + 11 * n_city - 2
@test length(model.constraints) == 3*n_city^2 + 10 * n_city - 4
@test model.objective == model.variables["total_cost"]
empty!(model)

model1 = SeaPearl.CPModel(trailer)
model2 = SeaPearl.CPModel(trailer)
model3 = SeaPearl.CPModel(trailer)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model1, generator; rng = rng)

rng = MersenneTwister(11)
SeaPearl.fill_with_generator!(model2, generator; rng = rng)

rng = MersenneTwister(14)
SeaPearl.fill_with_generator!(model3, generator; rng = rng)

@test model1.adhocInfo[1] == model2.adhocInfo[1]
@test model1.adhocInfo[1] != model3.adhocInfo[1]

end
@testset "Search known instance" begin
trailer = SeaPearl.Trailer()
Expand Down Expand Up @@ -166,8 +185,9 @@ end
max_tw = 8

generator = SeaPearl.TsptwGenerator(n_city, grid_size, max_tw_gap, max_tw)

dist, timeWindows = SeaPearl.fill_with_generator!(model, generator; seed=42)
rng = MersenneTwister()
Random.seed!(rng, 42)
dist, timeWindows = SeaPearl.fill_with_generator!(model, generator; rng = rng)

variableheuristic = TsptwVariableSelection{false}()
my_heuristic(x::SeaPearl.IntVar; cpmodel=nothing) = minimum(x.domain)
Expand All @@ -188,8 +208,9 @@ end
max_tw = 8

generator = SeaPearl.TsptwGenerator(n_city, grid_size, max_tw_gap, max_tw)

dist, timeWindows = SeaPearl.fill_with_generator!(model, generator; seed=42)
rng = MersenneTwister()
Random.seed!(rng, 42)
dist, timeWindows = SeaPearl.fill_with_generator!(model, generator; rng= rng)

@test SeaPearl.find_tsptw_dist_matrix(model) == dist

Expand Down
9 changes: 6 additions & 3 deletions test/experiment/evaluation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
my_heuristic(x::SeaPearl.IntVar; cpmodel=nothing) = minimum(x.domain)
valueheuristic = SeaPearl.BasicHeuristic(my_heuristic)
valueSelectionArray = [valueheuristic]
evaluator = SeaPearl.SameInstancesEvaluator(valueSelectionArray,generator; seed=nothing, evalFreq = 50, nbInstances = 2)

evaluator = SeaPearl.SameInstancesEvaluator(valueSelectionArray,generator; rng = nothing, evalFreq = 50, nbInstances = 2)


@test evaluator.nbInstances == 2
Expand All @@ -15,7 +16,7 @@
@test length(values(evaluator.instances[1].variables)) == 11
@test length(values(evaluator.instances[2].variables)) == 11

evaluator = SeaPearl.SameInstancesEvaluator(valueSelectionArray,generator; seed=nothing, evalFreq = 0, nbInstances = 2)
evaluator = SeaPearl.SameInstancesEvaluator(valueSelectionArray,generator; rng = nothing, evalFreq = 0, nbInstances = 2)

@test evaluator.evalFreq == 1 #ensure that if evalFreq is less than 1, the model will be evaluated at each learning episode
end
Expand All @@ -27,7 +28,9 @@
my_heuristic(x::SeaPearl.IntVar; cpmodel=nothing) = minimum(x.domain)
valueheuristic = SeaPearl.BasicHeuristic(my_heuristic)
valueSelectionArray = [valueheuristic]
evaluator = SeaPearl.SameInstancesEvaluator(valueSelectionArray,generator; seed=1, evalFreq = 50, nbInstances = 2)
rng = MersenneTwister()
Random.seed!(rng, 1)
evaluator = SeaPearl.SameInstancesEvaluator(valueSelectionArray,generator; rng = rng, evalFreq = 50, nbInstances = 2)

variableheuristic = SeaPearl.MinDomainVariableSelection{false}()

Expand Down