-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
92 lines (61 loc) · 2.84 KB
/
main.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/env python
# coding: utf-8
# In[9]:
##############################################################################################################################
### Hassan Shahzad
### CS-D
### Artificial Intelligence Lab (Lab # 9)
### FAST-NUCES
### chhxnshah@gmail.com
##############################################################################################################################
################################################## GLOBAL DECLARATIONS ####################################################
VARIABLES = ["A", "B", "C", "D", "E", "F", "G"]
CONSTRAINTS = [
("A", "B"),
("A", "C"),
("B", "C"),
("B", "D"),
("B", "E"),
("C", "E"),
("C", "F"),
("D", "E"),
("E", "F"),
("E", "G"),
("F", "G")
]
DOMAIN_VALUES = ["Monday", "Tuesday", "Wednesday"]
######################################### BACK TRACK FUNCTION IMPLEMENTATION ##############################################
def backtrack(assignment):
if len(assignment) == len (VARIABLES): # Check if assignment is complete
return assignment
temp_var = select_unassigned_variable(assignment) # selecting a new un-assigned variable's index
for value in DOMAIN_VALUES: # Checking the array containing days
ass = assignment.copy()
ass[temp_var] = value
if consistent(ass): # Checking is assignment is consistent
result = backtrack(ass) # Resursive function
if result is not None:
return result
return None
############################################### Selects Unassigned Variable ###############################################
def select_unassigned_variable(assignment):
for i in VARIABLES:
if i not in assignment: # Checks and returns the variable not currently assigned
return i # Returns the index
return None
################################################### Consistent Function ###################################################
def consistent(assignment):
for (i,j) in CONSTRAINTS:
if i not in assignment or j not in assignment: # If the selected value hasn't been assigned yet
continue
if assignment[i] == assignment[j]: # Both having same value (Constraint failed)
return False
return True
################################################# MAIN Implementation #####################################################
# The main entry point for this module
def main():
solution = backtrack(dict())
print(solution)
# Tell python to run main method
if __name__ == "__main__": main()
# In[ ]: