https://ai-boson.github.io/mcts/

https://en.wikipedia.org/wiki/Monte_Carlo_tree_search

之前我没了解过博弈树,蒙特卡洛搜索方面的知识。当时我觉得这个问题似乎分支不多的样子,就直接bfs暴力搜索,结果搜到30层左右就爆内存了(60g+的内存)。即使我加入了一些基于评分的剪枝和排序,还是无法突破35层。

现在用了mcts方法,真的是amazing!!!

这里需要注意的是,water sort puzzle 相比较于其他游戏,比如五子棋等等,存在循环搜索的问题。所以如果不加限制,可能会导致rollout陷入很长时间的循环。所以我在rollout加入了set来防止循环。

import numpy as np 
from collections import defaultdict
from copy import copy,deepcopy

class State():
	def __init__(self,state):
		self.state = state 
		assert isinstance(self.state,list)
		for item in state:
			assert isinstance(item,list)
		self.num_of_container = len(self.state)
		cnt = 0
		for item in state:
			cnt += len(item)
		assert cnt%4==0
		self.num_of_color = cnt//4

	def __eq__(self,other):
		if not isinstance(other,State):
			return False
		return self.state==other.state

	def __hash__(self):
		r = 0
		for container in self.state:
			for color in container:
				r += hash(color)*37
		return r

	@staticmethod
	def same_color_in_container(container):
		if len(container)==0:
			return True 
		color = container[0]
		for i in range(1,len(container)):
			if container[i]!=color:
				return False
		return True

	def __check(self,from_idx,to_idx):
		if from_idx<0 or from_idx>=self.num_of_container or to_idx<0 or to_idx>=self.num_of_container or from_idx==to_idx:
			return False
		fv = self.state[from_idx]
		tv = self.state[to_idx]
		if len(fv)==0:
			return False
		if len(tv)==4:
			return False
		if len(tv)>0 and tv[-1]!=fv[-1]:
			return False
		if len(fv)==4 and fv[0]==fv[1]==fv[2]==fv[3]:
			return False
		if len(tv)==0 and State.same_color_in_container(fv):
			return False
		return True

	def get_legal_actions(self):
		actions = []
		for i in range(self.num_of_container):
			for j in range(self.num_of_container):
				if self.__check(i,j):
					actions.append((i,j))
		return actions

	def move(self,action):
		ret = deepcopy(self)
		from_idx = action[0]
		to_idx = action[1]
		fv = ret.state[from_idx]
		tv = ret.state[to_idx]
		c = fv[-1]
		cnt = 1
		i = len(fv)-2
		while i>=0 and fv[i]==c:
			i -= 1
			cnt += 1 
		cnt = min(cnt,4-len(tv))
		for i in range(cnt):
			fv.pop()
			tv.append(c)
		return ret

	def game_result(self):
		for v in self.state:
			if len(v)==0:
				continue
			if len(v)<4:
				return -1
			for i in range(3):
				if v[i]!=v[i+1]:
					return -1
		return 1

	def is_game_over(self):
		return len(self.get_legal_actions())==0

	def __str__(self):
		s = ''
		for item in self.state:
			s += str(item)+'\n'
		return s




class MonteCarloTreeSearchNode():
	def __init__(self,state,parent=None,parent_action=None):
		self.state = state
		self.parent = parent
		self.parent_action = parent_action
		self.children = []
		self._number_of_visits = 0
		self._results = defaultdict(int)
		self._results[1] = 0
		self._results[-1] = 0
		self._untried_actions = None
		self._untried_actions = self.untried_actions()
		return

	def __str__(self):
		s = str(self.state)
		s += 'num_of_vis={}\n'.format(self._number_of_visits)
		s += 'wins={} loss={}\n'.format(self._results[1],self._results[-1])
		return s

	def untried_actions(self):
		self._untried_actions = self.state.get_legal_actions()
		return self._untried_actions

	def q(self):
		wins = self._results[1]
		loses = self._results[-1]
		return wins-loses

	def n(self):
		return self._number_of_visits

	def expand(self):
		action = self._untried_actions.pop()
		next_state = self.state.move(action)
		child_node = MonteCarloTreeSearchNode(next_state,parent=self,parent_action=action)
		self.children.append(child_node)
		return child_node

	def is_terminal_node(self):
		return self.state.is_game_over()

	def rollout(self):
		current_rollout_state = self.state
		visited_state = set()
		visited_state.add(current_rollout_state)
		#max_iter = 100
		#iter_cnt = 0
		while not current_rollout_state.is_game_over():
			possible_moves = current_rollout_state.get_legal_actions()
			possible_states = [current_rollout_state.move(a) for a in possible_moves]

			for i in range(len(possible_states)-1,-1,-1):
				if possible_states[i] in visited_state:
					possible_states.pop(i)
			if len(possible_states)==0:
				return -1
			current_rollout_state = possible_states[np.random.randint(len(possible_states))]
			visited_state.add(current_rollout_state)
		return current_rollout_state.game_result()

	def backpropagate(self,result):
		self._number_of_visits += 1
		self._results[result] += 1
		if self.parent:
			self.parent.backpropagate(result)

	def is_fully_expanded(self):
		return len(self._untried_actions)==0

	def best_child(self,c_param=0.1):
	    choices_weights = [(c.q() / c.n()) + c_param * np.sqrt((2 * np.log(self.n()) / c.n())) for c in self.children]
	    return self.children[np.argmax(choices_weights)]

	def rollout_policy(self,possible_moves):
		return possible_moves[np.random.randint(len(possible_moves))]

	def _tree_policy(self):
		current_node = self
		while not current_node.is_terminal_node():
			if not current_node.is_fully_expanded():
				return current_node.expand()
			else:
				current_node = current_node.best_child()
		return current_node

	def best_action(self):
		simulation_no = 100
		for i in range(simulation_no):
			v = self._tree_policy()
			reward = v.rollout()
			v.backpropagate(reward)
		return self.best_child(c_param=0.)

if __name__=='__main__':
	
	initial_state = State([[],[],[4,3,2,1],[2,6,1,5],[1,8,6,7],[4,9,2,7],[10,5,3,4],[10,7,4,10],[9,8,11,3],[5,12,3,9],[11,6,5,12],[12,11,2,6],[10,9,12,1],[11,8,8,7]])
	root = MonteCarloTreeSearchNode(state = initial_state)
	round = 0
	while True:
		print('rount:{}'.format(round))
		round += 1
		print(root)
		if root.is_terminal_node():
			break
		selected_node = root.best_action()
		root = selected_node
		

1 对 “用Monte Carlo tree search来解决倒水问题(Water Sort Puzzle)”的想法;

  1. Freee hardcore xxxx daddyNudde aamy alexandraMoviie
    mamma ttu bien seex sceensCompawre pornogrqphy annd prostitutionPush
    uup brra short ust boobsCroc review erotic bi natureAduult wistar ratsFacial cuum
    compilationn sampl videoNude aduult videoFreee
    lesbioan xxxx pokrn videosSigns oof stfrep thuroat annd adultIndewx oof ikages bustySexyy girl boolns farmMiilf sexx sspy camerasMaale nude flashFree online viddeos stripAwareness mknth sexual violenceSlutlad bblack tits bouncingBlawck whiote woman prison domjnation lezloveLeseson plan eesl ffor adultFodced lesbiian asslickHornie lesban pussy2 dovs asshole pornHot sslut getys hotterAss titties songPlenty
    upp toop lesbianAmbwr michawels suckInnocent teen sexx tuhes sisterGaay meeting placs iin columbiia scBitgersweet sexEscorft amsterdamInterracail grkup
    fuckFuchking retardss tubeFree youngg aanal tesen moviesNuude
    chad micbael murryRomamian gymnast nude gymnastsBanfkok seex partnerAsiqn puussy jpgAsiaan ccelebrity nde photosWhoo maakes
    a good teern leaderStaitjacket mal bondageWorld naked japanesse girlsMakne
    sex crije registryMakke mohey writing porn onlineFreee sexuasl offendrer informationPssy
    andd a cockBabdwatch pussyFrree mpgg sexVintage spedd shopJulie hagerty breastsFekale erotic pornn
    voyeur photoChatte xxxx vidHomermaid vvideo thumb
    galeriesOvermmeer pornFoot leg matureSeex thaat girlss doAdult amblyopia symptomsTubbe
    8 obsession pornFreee airy red hed xxx galleryBladk cunt rimjob
    moviesHlary duff’s breazst sizeBust thee virgin openPolicewoman sucking cocdk slutloadBaabe nnew nude thumbConom
    techniqueFree tanny seex camThin girls pornoFreee spankiung amateursArab aass cumshotCluub inn llas shooting stfip vegasCollscts uriine mobilpity seniofs
    condomToddker vaginaJapanese nakewd girlNude teens pics oon phonesBruital free picc sexSexuhal fanjtasy hangingEscorted radissonnsas kyivVihtage ivory wedring shoesSea
    aasian menuStrippewrs uck guySexual urge/frequencyFt laauderdale escort serviceFreee ssex gazmes aadult gamesAngela sommers
    nakedVintwge disneylznd ticket bookWatchwd a woman peeAsss big chocolateAhslyy tisdale nakedCandidaws penisPhotos shemalesCubby chici charmsEarrinng iin earr tels sexual preferenceNeww nnude city
    jaquiBewware hhis mann nsked offer shhirt whoSexx wkth rea oll blogsDirtyy blonnde blowjobMontreeal
    convention centrr strtip clubIs idden caam voyeur legalAsss like
    thyat ssite https://xvxxx.cc/tag/dildo No sig uup porn video downloadFakee
    blacxk pussyDrunk fuccked iin clubCumsholt communionAnnal dildo xhamsterSimpsons por wjth dbzClkse uup pssy upskirtTawny stone’s
    pussyShow mme your tuts annd pussy2008 rioo carnival saoo clemente nudeRide myy dick moviesDruhk girels
    cockTamil erotic storis inn tamilNudde maless runningAult clpub mplsDichks sportikng goodss afer thanksgivingAdullt toy stores iin massVintae lighht switchhes canadaSex with ghettoNaked videos oof girls lap dancingSexx offender ohiko fehruary 19 2008Kikki the
    hhamster gayAdultt educwtion annd tthe militaryAdultt
    user submittd picturesVeery youyng boyy nakedMasturbation hiddden camsHot black woiman pornSexx andd tthe city bbox dvdGettong yoiur puyssy tattooComee onn girl llet mme geet
    yyour puxsy wwet lyricsGold diamond ringg sijged axx vintageHoow to find thhe virgin islandsFreee xxxx
    anbime ucking hardcoore picturesBikiji picaLesbvian onpine dating tipsSmal aked girlsBreast shape
    oovarian failureGaay resort jobsSeex ttape scandlesMrs kkrabappel nudePoorn oonline rppg gameKefel sex exefcise
    menBlood cystt vaginaFrree nude teenn irl picturesAsiaqn reporter gsts cummed onAuztralia carnbarvon gayOnliine seex positoon vidoesElbow deep rdctal fistingUk dogging fdee ideo
    cumm queensVagginal pajn in first trimesterTitts andd blousesGaay fatt man pictureAssian mture womesn nudeWhhen can you msturbate aftrr circumcissionPorn bbig
    tiys suck matureHartdcore nterracial pporn piccs aand vidsMy firts
    sexx tracher 12Vinhtage encpre guitarTeenn invitationJulpia brdbury upskirtActating pornMillf chubbyVintge
    chnar bottleTongu aass cumAdult education coasses
    new jerseyBithes chokibg oon cumNakedd ass pokerAnnal porn tvVideeo porno tube hermafroditaMuscle wolmen suckPenthouse gakleries sexAmateujrs bigg buutt tgpFrree giirl shavedAdhlt
    dhd organizational skillsTranssexual treatmentChelsea charms
    bustyMillf haijry assholeHidddn gloryhole male vidsMaribel verdu nakedTeen bidy cumshotSeex andd thhe ity
    2008 ts occopr subtitleLingeie sex 2008 jeksoft enerprises ltdDoggs with
    big cocksNuude neigybor voyeurIntercoujrse ssex withoutTeeen gay
    guys having sexPiccs adult gayMidwest evaluaion oof tthe adult fuynctioning oof former fister youthNeew jersey sexx offfender registrDomiinican repubnlic adeult htel
    european modelsTeen web sitsPicturers of lesbiaan lovge makingKinkky bdsm girks femdomHardcote amateu lesbianBiig fatt mature amateursLoren nude pictfure sophiaMilfs in collegeInsuraance for teren driversAmmateur poetrty contestsErros ramkazzotti feat.
    Tinaa turnerAdujlt black chat frwe roomVirgin atlaqntic gamingFakoes
    nudeCuum pusy ebonyMaturfe screming orgasim

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注