stdout
и stderr
- это не строки, а потоки. Один из способов думать о них, как о резервуаре для воды: процесс сбрасывает воду в верхнюю часть, и у вас есть кран внизу, к которому вы можете получить доступ. stdout.read()
говорит: «откройте кран и дайте ему поработать, пока в баке больше не останется воды» - если вы не поставили ведро под кран (назначая переменную в этой аналогии), вода исчезнет, и открытие крана из пустого резервуара снова не вернет его.
Если вам нужно обращаться к одному и тому же выходу из потока несколько раз, вам нужно сохранить его в переменной, а затем ссылаться на эту переменную каждый раз. В вашем случае вы можете сделать что-то вроде:
output = proc.stdout.read()
if not output:
# your error handling here
for line in output.split("\n"):
# do stuff with line here
Chess and Go оба EXPTIME завершены . IIRC, Го имеет больше возможных ходов, поэтому я думаю, что он выше, чем в шахматах.
Даже если Го находится просто в P
, оно все равно может быть чем-то ужасным, например O(n^m)
, где n
- это число пробелов, а m
- некоторое (большое) фиксированное число. Даже в P
нет ничего разумного для вычисления.
Ни шахматы, ни ИИ не полностью оценивают все возможности, прежде чем принять решение о движении.
Шахматные ИИ используют различные эвристические методы, чтобы сузить область поиска и количественно оценить, насколько «хорошей» является данная позиция на доске. Это может быть сделано рекурсивно, оценивая возможные позиции доски 14-15, продвигаясь вперед и выбирая путь, который ведет к хорошей позиции.
Есть немного «волшебства» в том, как количественно определяется позиция на доске, так что на верхнем уровне ИИ может просто перейти на Движение A> Движение B, поэтому позволяет выполнить Движение A. Но так как количество фигур ограничено, все они имеют поддающееся количественному измерению значение, и может быть реализован «достаточно хороший» алгоритм.
Но оказывается, что для программы гораздо сложнее оценить две возможные позиции на доске в Go и выполнить расчет A> B. Без этой важной части немного сложнее заставить остальную часть ИИ работать.