Skip to content

Commit be3dbd1

Browse files
committed
v0.0.11 Pushed current edition to the ability to launch (a lot of additions)
1 parent 8d0bcc7 commit be3dbd1

35 files changed

+1773
-214
lines changed

examples/object_oriented/nqueens/persistence/CotwinBuilder.py renamed to examples/object_oriented/nqueens/persistence/CotwinBuilderNQueens.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1+
2+
3+
4+
from greyjack.persistence.CotwinBuilderBase import CotwinBuilderBase
15
from examples.object_oriented.nqueens.cotwin.NQueensCotwin import NQueensCotwin
26
from examples.object_oriented.nqueens.score.NQueensScoreCalculator import NQueensScoreCalculator
37
from examples.object_oriented.nqueens.cotwin.CotQueen import CotQueen
48
from greyjack.variables.GJInteger import GJInteger
59

610

7-
class CotwinBuilder():
11+
class CotwinBuilderNQueens(CotwinBuilderBase):
812
def __init__(self):
913
pass
1014

11-
def build_cotwin(self, domain_model):
15+
def build_cotwin(self, domain_model, is_already_initialized):
1216

1317
n = domain_model.n
1418
queens = domain_model.queens
@@ -23,7 +27,7 @@ def build_cotwin(self, domain_model):
2327

2428
nqueens_cotwin = NQueensCotwin()
2529
nqueens_cotwin.add_planning_entities_list( cot_queens, "queens" )
26-
nqueens_cotwin.add_score_calculator( NQueensScoreCalculator(), "nqueens_score_calculator" )
30+
nqueens_cotwin.set_score_calculator( NQueensScoreCalculator() )
2731

2832
return nqueens_cotwin
2933

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
2+
import random
3+
4+
from greyjack.persistence.DomainBuilderBase import DomainBuilderBase
5+
from examples.object_oriented.nqueens.domain.ChessField import ChessField
6+
from examples.object_oriented.nqueens.domain.Position import Position
7+
from examples.object_oriented.nqueens.domain.Row import Row
8+
from examples.object_oriented.nqueens.domain.Column import Column
9+
from examples.object_oriented.nqueens.domain.Queen import Queen
10+
11+
12+
class DomainBuilderNQueens(DomainBuilderBase):
13+
14+
def __init__(self, n, random_seed=45):
15+
super().__init__()
16+
17+
self.n_queens = n
18+
self.random_seed = random_seed
19+
20+
def build_domain_from_scratch(self):
21+
22+
random.seed(self.random_seed)
23+
24+
queens = []
25+
random_row_ids = list(range(self.n_queens))
26+
random.shuffle( random_row_ids )
27+
column_ids = list(range(self.n_queens))
28+
for i in range(self.n_queens):
29+
current_row_id = random_row_ids[i]
30+
current_column_id = column_ids[i]
31+
current_queen = Queen( Row(current_row_id), Column(current_column_id) )
32+
queens.append( current_queen )
33+
34+
chess_field = ChessField( self.n_queens, queens )
35+
36+
return chess_field
37+
38+
def build_from_solution(self, solution):
39+
raise Exception("build_from_solution() not implemented for DomainBuilderNQueens")
40+
41+
def build_from_domain(self, domain):
42+
return super().build_from_domain(domain)
43+
44+

examples/object_oriented/nqueens/persistence/DomainGenerator.py

Lines changed: 0 additions & 32 deletions
This file was deleted.

examples/object_oriented/nqueens/persistence/DomainUpdater.py

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
3+
4+
from greyjack.persistence.DomainBuilderBase import DomainBuilderBase
5+
from greyjack.persistence.CotwinBuilderBase import CotwinBuilderBase

examples/object_oriented/nqueens/score/NQueensScoreCalculator.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ def __init__(self):
1414

1515
super().__init__()
1616

17+
self.score_type = "SimpleScore"
1718

18-
#self.constraints["different_rows"] = self.different_rows
19-
#self.constraints["different_descending_diagonals"] = self.different_descending_diagonals
20-
#self.constraints["different_ascending_diagonals"] = self.different_ascending_diagonals
19+
#self.add_constraint("different_rows", self.different_rows)
20+
#self.add_constraint("different_descending_diagonals", self.different_descending_diagonals)
21+
#self.add_constraint("different_ascending_diagonals", self.different_ascending_diagonals)
2122

22-
self.constraints["all_different"] = self.all_different
23+
self.add_constraint("all_different", self.all_different)
2324

2425
pass
2526

examples/object_oriented/nqueens/scripts/solve_nqueens.py

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,44 +11,33 @@
1111

1212
from copy import deepcopy
1313

14-
from examples.object_oriented.nqueens.persistence.DomainGenerator import DomainGenerator
15-
from examples.object_oriented.nqueens.persistence.CotwinBuilder import CotwinBuilder
16-
from examples.object_oriented.nqueens.persistence.DomainUpdater import DomainUpdater
17-
#from greyjack.score_calculation.scores.SimpleScore import SimpleScore
18-
#from greyjack.agents.termination_strategies import *
19-
#from greyjack.agents import *
20-
#from greyjack.Solver import Solver
21-
14+
from examples.object_oriented.nqueens.persistence.DomainBuilderNQueens import DomainBuilderNQueens
15+
from examples.object_oriented.nqueens.persistence.CotwinBuilderNQueens import CotwinBuilderNQueens
16+
from greyjack.score_calculation.scores.SimpleScore import SimpleScore
17+
from greyjack.agents.termination_strategies import *
18+
from greyjack.agents import *
19+
from greyjack.Solver import Solver
20+
from greyjack.agents.TabuSearch import TabuSearch
2221

2322
if __name__ == "__main__":
24-
# build domain model
25-
chess_field = DomainGenerator.generate_domain( 256, random_seed=45 )
26-
#print( "Chess field before solving: " )
27-
#print( chess_field )
2823

29-
# translate human-oriented domain model to solver-oriented model (cotwin)
30-
nqueens_cotwin = CotwinBuilder().build_cotwin( chess_field )
24+
# build domain model
25+
domain_builder = DomainBuilderNQueens(256, random_seed=45)
26+
cotwin_builder = CotwinBuilderNQueens()
3127

32-
#termination_strategy = StepsLimit(step_count_limit=5000)
33-
"""termination_strategy = TimeSpentLimit(time_seconds_limit=60)
28+
#termination_strategy = StepsLimit(step_count_limit=1000)
29+
#termination_strategy = TimeSpentLimit(time_seconds_limit=60)
3430
#termination_strategy = ScoreNoImprovement(time_seconds_limit=15)
35-
#termination_strategy = ScoreLimit(score_to_compare=SimpleScore(0))
36-
agent = TabuSearch(neighbours_count=20, tabu_entity_rate=0.0,
31+
termination_strategy = ScoreLimit(score_to_compare=[0])
32+
agent = TabuSearch(neighbours_count=128, tabu_entity_rate=0.0,
3733
mutation_rate_multiplier=None, move_probas=None,
3834
migration_frequency=1, termination_strategy=termination_strategy)
3935

40-
41-
agents_list = [deepcopy(agent) for i in range(10)]
42-
solver = Solver(agents=agents_list, score_precision=[0], logging_level="info",
43-
parallelization_backend="processing", #processing, threading
44-
random_seed=45)
45-
solution = solver.solve( model=nqueens_cotwin )
36+
solver = Solver(domain_builder, cotwin_builder, agent,
37+
n_jobs=10, parallelization_backend="processing", #processing, threading
38+
score_precision=[0], logging_level="info")
39+
solution = solver.solve()
4640
print( "Cotwin solution looks that: " )
4741
print( solution )
4842

49-
# updating human-oriented domain model by solved cotwin model
50-
chess_field = DomainUpdater.update_domain( chess_field, solution )
51-
print( "Chess field after solving: " )
52-
print( chess_field )"""
53-
5443
print( "done" )

0 commit comments

Comments
 (0)