Пример #1
0
def test_play():
	from matchs import state_match

	s = state_match("1")
	level = 4
	player, opponent = "1", state_match.opponent["1"]

	print('start!')

	step = 1
	while not (s.is_win(player) or s.is_win(opponent)):
		move, _, _ = bestmove(s, level, player, opponent)
		if move == None:
			print('finish... draw')
			break
		print(f'Step {step}: {move}')

		s.do_move(move)

		if s.is_win(opponent):
			print(f'Player {opponent} win!')
			break

		step += 1
		player, opponent = opponent, player

	print('the end')
Пример #2
0
def test_bestmove():
    from matchs import state_match

    # начальное состояние (пустое)
    s = state_match("1")
    # на два хода (на четыре полухода) вперед
    level = 4
    # первым ходит "X", вторым - "0"
    player, opponent = "1", state_match.opponent["1"]

    # получаем лучший ход
    move, _, nodes = bestmove(s, level, player, opponent)

    print(f"Best move is: {move}")
    print(f"Node count {nodes}")
Пример #3
0
def test_plot():
	from matchs import state_match
	import numpy as np
	import matplotlib.pyplot as plt
	s = state_match("1")
	player, opponent = "1", state_match.opponent["1"]

	# правая граница для графика
	depth = 6
	x = np.arange(1, depth, 1)
	y = np.array([calc_nodes(s, level, player, opponent) for level in x])
	_ = plt.figure()
	plt.plot(x, y)
	plt.title('Count of nodes')
	plt.ylabel('nodes')
	plt.xlabel('alpha_beta')
	plt.grid(True)
	plt.show()
Пример #4
0
def test_time(level):
	''' Тестирование времени расчета
		level - количество полуходов, максимальная
				глубина дерева
	'''

	from matchs import state_match
	from timeit import Timer

	s = state_match("1")
	player, opponent = "1", state_match.opponent["1"]

	# lambda-функция расчета количества узлов
	f = lambda: calc_nodes(s, level, player, opponent)

	# расчет времени выполнения
	t = Timer(f)
	print("Time = ", t.timeit(number=1))
Пример #5
0
from matchs import state_match
from minimax import bestmove

s = state_match("1")

level = 5
player, opponent = "1", state_match.opponent["1"]
move, _, nodes = bestmove(s, level, player, opponent)
print(f"Best move is: ", move)


def calc_nodes(state, level, player, opponent):
    ''' Расчет количества сгенерированных узлов
        - state - начальное состояние
        - level - максимальная глубина рекрсии (количество полуходов)
        - player - игрок
        - opponent - оппонент
    '''
    _, _, nodes = bestmove(state, level, player, opponent)
    return nodes


def test_time(level):
    ''' Тестирование времени расчета
		level - количество полуходов, максимальная
				глубина дерева
	'''

    from matchs import state_match
    from timeit import Timer