-
Notifications
You must be signed in to change notification settings - Fork 0
/
controller.py
60 lines (50 loc) · 2.28 KB
/
controller.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from models.basic_hill_climbing import BasicHillClimbing
from models.steepest_ascent_hill_climbing import SteepestAscentHillClimbing
from models.stochastic_hill_climbing import StochasticHillClimbing
from models.simulated_annealing import SimulatedAnnealing
from models.first_choice_hill_climbing import FirstChoiceHillClimbing
from models.local_beam_search import LocalBeamSearch
class Controller:
def __init__(self, view):
self.__view = view
self.__view.init_listener = self.init_board
self.__view.next_listener = self.next_board
self.__view.selection_listener = self.change_selection
self.change_selection("Basic Hill-Climbing")
def start(self):
self.__view.show()
def change_selection(self, selection):
if selection == "Basic Hill-Climbing":
self.__model = BasicHillClimbing()
elif selection == "Steepest Ascent Hill-Climbing":
self.__model = SteepestAscentHillClimbing()
elif selection == "Stochastic Hill-Climbing":
self.__model = StochasticHillClimbing()
elif selection == "Simulated Annealing":
self.__model = SimulatedAnnealing()
elif selection == "First Choice (Stochastic) Hill-Climbing":
self.__model = FirstChoiceHillClimbing()
elif selection == "Local Beam Search (k=2)":
self.__model = LocalBeamSearch(2)
elif selection == "Local Beam Search (k=3)":
self.__model = LocalBeamSearch(3)
elif selection == "Local Beam Search (k=4)":
self.__model = LocalBeamSearch(4)
self.__model.generate_initial_state()
self.draw()
def next_board(self):
self.__model.move_next()
self.draw()
def init_board(self):
self.__model.generate_initial_state()
self.draw()
def draw(self):
self.__view.draw_board()
self.__view.cost = self.__model.cost
self.__view.step = self.__model.step
for column, row in enumerate(self.__model.state):
self.__view.draw_position(column, row)
for row_index, row in enumerate(self.__model.evaluate_next_states()):
for column_index, value in enumerate(row):
if value >= 0:
self.__view.draw_value(column_index, row_index, value)