Штучний Інтелект Нумбер 2

20 Лютого 2010

Вибачаюсь, вибачаюсь, вибачаюсь (.

В недавній статті щодо штучного інтелекту я зробив маленьку помилку в прогі, яка давала змогу мені вигравати. Бага була в тому що він не навчався на помилка, а лише навчався на перемегах, що було не досить ефективно. Тож тепер можу вам показати скриптик, який майже НЕПЕРЕМОЖНИЙ!

Оце кусок який відповідає за логіку: class Game(object): memory = one_game = {} def __init__(self, sticks_count): self.sticks_count = sticks_count for _ in xrange(self.sticks_count+1): self.memory[_] = {1:1, 2:1, 3:1} def finish_lose(self): self.memory[ min(self.one_game) ][self.one_game[ min(self.one_game) ]] -= 1 def one_move(self, stick): ch = [] for i in self.memory[stick]: for _ in xrange(self.memory[stick][i]): ch.append(i) if not ch: return 1 self.one_game[stick] = random.choice( ch ) return self.one_game[stick]

А це повний ісходник супер-розумного скриптика: import random class Game(object): memory = one_game = {} def __init__(self, sticks_count): self.sticks_count = sticks_count for _ in xrange(self.sticks_count+1): self.memory[_] = {1:1, 2:1, 3:1} def finish_lose(self): self.memory[ min(self.one_game) ][self.one_game[ min(self.one_game) ]] -= 1 def one_move(self, stick): ch = [] for i in self.memory[stick]: for _ in xrange(self.memory[stick][i]): ch.append(i) if not ch: return 1 self.one_game[stick] = random.choice( ch ) return self.one_game[stick] g = Game(random.randint(15,20)) for _ in xrange(1000): g.one_game = {} s = g.sticks_count while 1: if s<=3: break s -= g.one_move(s) if s<=3: g.finish_lose() break s -= random.randint(1,3) for _ in xrange(5): g.one_game = {} s = g.sticks_count while 1: print ''.join([ '!' for _ in xrange(s)]) if s<=3: print 'C WIN!!!' break s -= g.one_move(s) print ''.join([ '!' for _ in xrange(s)]) if s<=3: g.finish_lose() print 'C LOSE' break try: r_m = int(raw_input('>')) if (r_m > 3) or (r_m < 1): raise except: r_m = 1 s -= r_m

 
 
 
Роман Хоменко aka PresidentUA
mail/jabber: spirt40@gmail.com