All pastes #36208 Raw Edit

Python

public python v1 · immutable
#36208 ·published 2006-01-08 23:18 UTC
rendered paste body
from search import *import copyimport randomclass HappyProblem(Problem):	def __init__(self, unhappy_mat):		self.unhappy_mat = unhappy_mat		self.n = len(unhappy_mat)		self.initial = range(self.n)		random.shuffle(self.initial)		self.initial_cost = self.unhappy(self.initial)		self.i = 0			def successor(self, state):		succ = []		for i in range(self.n):			for j in range(i):				if j == i:					continue								s = copy.deepcopy(state)				t = s[i]				s[i] = s[j]				s[j] = t				yield ("seat", s)#				succ.append(("seat", s))#		self.i += 1#		random.shuffle(succ)#		return succ		def path_cost(self, c, state1, action, state2):		#print 'Path cost:', c, state1, '(', self.unhappy(state1),')', state2, '(',self.unhappy(state2),')'		return self.unhappy(state2)		def unhappy(self, state):		s = 0		for i in range(self.n):			q = self.unhappy_mat[state[i]][state[(i+1) % self.n]]						if q == 0:				q = self.unhappy_mat[state[(i+1) % self.n]][state[i]]			s += q				return smat=[[0  , 25 , 40 ,  4 , 80 , 31 , 65 , 62 ],[ 0 ,  0 , 95 , 55 , 95 , 11 ,  1 , 18 ],[ 0 ,  0 ,  0 , 80 , 60 , 77 , 86 , 64 ],[ 0 ,  0 ,  0 ,  0 , 94 , 0  , 59 , 41 ],[ 0 ,  0 ,  0 ,  0 ,  0 , 85 , 74 , 71 ],[ 0 ,  0 ,  0 ,  0 ,  0 ,  0 , 40 , 57 ],[ 0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 44 ],[ 0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 0  ]]def rand_mat(n):	m = []	for i in range(n):		z = []		for j in range(n):			z.append(random.random())		m.append(z)		for i in range(n):		for j in range(i):			m[i][j] = 0	for i in range(n):		m[i][i] = 0			return mmat = rand_mat(100)#for l in mat:#	print lmat = [[0,25,40,4,80,31,65,62,104,199,],[0,0,95,55,95,11,1,18,106,116,],[0,0,0,80,60,77,86,64,82,256,],[0,0,0,0,94,0,59,41,75,237,],[0,0,0,0,0,85,74,71,42,206,],[0,0,0,0,0,0,40,57,187,172,],[0,0,0,0,0,0,0,44,243,252,],[0,0,0,0,0,0,0,0,228,71,],[0,0,0,0,0,0,0,0,0,125,],[0,0,0,0,0,0,0,0,0,0,],]p = HappyProblem(mat)state = hill_climbing(p)print "Guests ordering:", state, "Expansions:", p.i, 'Final score:', p.unhappy(state)l = ""for i in range(len(state)):	l +=  ("%i<-" % state[i])	if i+1 < len(state):		if mat[state[i]][state[i+1]] != 0:			l += ("(%i)-" % mat[state[i]][state[i+1]])		else:			l += ("(%i)-" % mat[state[i+1]][state[i]])print l