Thanks for explaining your issue to us. I’ll try to help out…
This already seems wrong to me. Each row of data you send should be a snapshot in time, so the fact that you send the player row after the board state row is going to confuse it. I would suggest you encode the board state and the player in the same row.
Also, what exactly are you trying to predict? Who won? I think a better goal for NuPIC might be to predict the next board state, given previous board states and players info.
What if we abandoned the idea of passing in rows of scalar input and thought about a better way to encode the problem space into an SDR?
You could write an encoder that converts each cell on the board (empty, X, or O) to a binary representation. Concatenate them together, and also include a bit for the player. If you train it on hundreds (better thousands) of games, the model should predict the state of the board better than random. I think you’ll have more success this way than trying to shoehorn the semantics of a tic-tac-toe problem space into a bunch of generic scalar encoders.
If you are generating the boards randomly, and generating the moves randomly… then it makes sense to me that you’re getting random predictions back. If there is no pattern in the data, there’s nothing to analyze. You want to look for a catalog or history of tic-tac-toe games played by humans.