function train(weights,iterations){
const MAX_MOVES = 1000
let history = []
for(let i = 0; i<iterations; i++){
let board = randomBoard()
let ended = false
let misses = 0
let matches = 0
let moves = 0
let memory = {}
let flipped_indexes = []
let remembered_count = 0
while(!ended && moves < MAX_MOVES){
let remembered = -1
let guessIndex = getRandomInt(0,board.dealt.length-1)
if(board.flipped.length===1){
for(let j in memory){
if(remembered===-1 && j !== flipped_indexes[0]){
if(memory?.[j] === board.flipped[0]){
remembered = j
remembered_count++
}
}
}
}
if(remembered > -1 && Math.random() >= MEMORY_FUZZINESS){
guessIndex = remembered
}
moves++
let revealed = board.dealt[guessIndex]
memory[guessIndex]=revealed
board.flipped.push(revealed)
flipped_indexes.push(guessIndex)
if(board.flipped.length===2){
if(
board.flipped[0]
=== board.flipped[1]
){
board.dealt.splice(board.dealt.indexOf(board.flipped[0]),1)
board.dealt.splice(board.dealt.indexOf(board.flipped[1]),1)
board.flipped = []
flipped_indexes = []
matches++
}else{
board.flipped = []
flipped_indexes = []
misses++
}
}
if(!board.dealt.length || moves >= MAX_MOVES-1){
history.push({
misses,
matches,
moves,
remembered_count,
board
})
ended = true
}
}
}
return{
weights,
history,
}
}