def initialize_problem(self, row_domains, column_domains, constraints): rows = len(row_domains) columns = len(column_domains) self.guigrid = GUIGrid(self.width, self.height*2//3, rows, columns, self.screen) rowVIs = [] for i in range(rows): v = VI((True,i), row_domains[i]) rowVIs.append(v) colVIs = [] for i in range(columns): v = VI((False,i), column_domains[i]) v.neighbors = rowVIs colVIs.append(v) for vi in rowVIs: vi.neighbors = colVIs self.astarGAC = NonogramSolver(rowVIs + colVIs, row_domains + column_domains, constraints) self.currentState = self.astarGAC.search() self.screen.fill(self.WHITE) self.guigrid.reset() if self.currentState: for var in self.currentState.viList: var.drawColorsToGUI(self.guigrid) self.guigrid.draw() pygame.display.flip()
def generateSucc(self, state): """ make a guess. start gussing value for variables with min. domain length""" succStates = [] finishedVIs = [] varsCopy = state.undecidedVariables.copy() if not len(varsCopy): return [] otherVIs = sorted(varsCopy, key=lambda v: len(v.domain), reverse=True) betterVI = otherVIs.pop() if betterVI.domain: initID = betterVI.getID() for d in betterVI.domain: newVI = VI( initID, [d]) newVI.neighbors = betterVI.neighbors.copy() successor = self.makeAssumption(newVI, state) succStates.append( self.gac.rerun(successor) ) return succStates else: return []