Штучний Інтелект і Сірники

17 Лютого 2010

Цей простий алгоритм штучного інтелекту знав ще зі школи. Про нього було написано в якійсь радянській книжечці типу "Наука і Техніка". Тож після десятирічь забуття, про нього згадав після наступної статті на Хабрі - http://habrahabr.ru/blogs/artificial_intelligence/84125/ (раджу прочитати зараз).

Позавчора ввечері потратив аж півгодинки свого часу і в результаті вийшов скриптик на пітоні з 75 строчок(хоча сам алгоритм гри лише 30 строчок), що реалізує цей алгоритм. Що найдивовижніше - це те що воно ще й працювало )

Зняв відео про це, точніше кажучи зняв 2 відео, бо перше не сподобалося, але потім здуру на Вімео залив першу поганеньку версію, за що вибачаюсь, і прийдеться терпіти мій сонний голос :)

Self-Education Python Script from presidentua on Vimeo.

import random class Game(object): memory = {} one_game = {} def __init__(self, sticks_count): self.sticks_count = sticks_count for i in xrange(self.sticks_count+1): self.memory[i] = {1:2, 2:2, 3:2} def start(self): self.one_game = {} def finish_win(self): for i in self.one_game: self.memory[i][self.one_game[i]] += 1 def finish_loos(self): self.memory[ max(self.one_game) ][self.one_game[ max(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: ch.append(1) self.one_game[stick] = random.choice( ch ) return self.one_game[stick] g = Game(random.randint(15,20)) for _ in xrange(20000): g.start() s = g.sticks_count while 1: if s<=3: g.finish_win() break s -= g.one_move(s) if s<=3: g.finish_loos() break s -= random.randint(1,3) c = i = 0 for _ in xrange(5): g.start() s = g.sticks_count while 1: print ''.join([ '!' for _ in xrange(s)]) if s<=3: g.finish_win() c += 1 print 'C WIN!!!' break s -= g.one_move(s) print ''.join([ '!' for _ in xrange(s)]) if s<=3: g.finish_loos() i += 1 print 'C lose (' break try: r_m = int(raw_input('i:')) if (r_m > 3) or (r_m < 1): r_m = 1 except: r_m = 1 s -= r_m print 'C: %s'%c print 'I: %s'%i
 
 
 
Роман Хоменко aka PresidentUA
mail/jabber: spirt40@gmail.com