Sometimes it happens that an engine performs less well on a particular opening he learned with an experience file than without. Often, there are one or more positions containing errors resulting in corrupted quality scores of the learned moves.
Example :
Here several moves have the same very/too high number of visits !? Which is unlikely because it would have been necessary to train the engine with tens of thousands of games only on this position and still it is very unlikely that each move was played exactly the same number of times. The problem is that the engine calculates false qualities for each move and will not choose the best move when it encounters this position in a game.
how to fix errors/bugs on experience files ?
Re: how to fix errors/bugs on experience files ?
There are several solutions :
- use an hexadecimal editor to correct each "117" value. Use your engine to calculate the key corresponding to the position. Look for occurrences of this key in your experience file. Correct visit count bytes.
- use EXPERIENCE VIEWER to correct each value. Place yourself in position. Double-click on each "117" value to correct it.
- use EXP_ERROR_DETECT to scan/correct an experiment file. Drop-and-drag your experience file onto exp_error_detect.exe, enter the minimum value for the number of visits to fix.
- use an hexadecimal editor to correct each "117" value. Use your engine to calculate the key corresponding to the position. Look for occurrences of this key in your experience file. Correct visit count bytes.
- use EXPERIENCE VIEWER to correct each value. Place yourself in position. Double-click on each "117" value to correct it.
- use EXP_ERROR_DETECT to scan/correct an experiment file. Drop-and-drag your experience file onto exp_error_detect.exe, enter the minimum value for the number of visits to fix.
Re: how to fix errors/bugs on experience files ?
The idea is to get this :
ENJOY !
ps : here my source code for exp_error_detect :
ENJOY !
ps : here my source code for exp_error_detect :
Code: Select all
Sub Main()
Dim fichierEXP As String, tabEXP() As Byte, i As Long, iMem As Long, j As Integer
Dim myString As String, min_count_value As Integer
Dim tabKEY(7) As Byte, tabKEYMEM(7) As Byte, sameKEY As Boolean
Dim tabCOUNT(3) As Byte, tabCOUNTMEM(3) As Byte, sameCOUNT As Boolean
Dim fixedPositions As Integer, minFixedCount As Integer
Dim maxPositionErrors As Integer, positionErrors As Integer
Console.Title = My.Computer.Name
If My.Computer.FileSystem.GetFileInfo(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) & "Documents\Visual Studio 2013\Projects\experience_repair\experience_repair\bin\Debug\experience_repair.exe").LastWriteTime > My.Computer.FileSystem.GetFileInfo(My.Application.Info.AssemblyName & ".exe").LastWriteTime Then
MsgBox("Il existe une version plus récente de ce programme !", MsgBoxStyle.Information)
End
End If
fichierEXP = Replace(Command(), """", "")
If Not expV2(fichierEXP) Then
MsgBox(nomFichier(fichierEXP) & " <> experience format v2 !?", MsgBoxStyle.Exclamation)
End
End If
Console.WriteLine("Min count value ? (20 to 120)")
myString = Console.ReadLine
If IsNumeric(myString) Then
min_count_value = CInt(myString)
If 20 <= min_count_value And min_count_value <= 120 Then
Console.Write(vbCrLf & "Loading " & nomFichier(fichierEXP) & "... ")
tabEXP = My.Computer.FileSystem.ReadAllBytes(fichierEXP)
Console.WriteLine("OK" & vbCrLf)
fixedPositions = 0
minFixedCount = 1000000
maxPositionErrors = 0
iMem = -1
Array.Clear(tabKEYMEM, 0, tabKEYMEM.Length)
Array.Clear(tabCOUNTMEM, 0, tabCOUNTMEM.Length)
For i = 26 To UBound(tabEXP) Step 24
'position move eval depth count
'h 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7
'i +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23
'get key position and count value
Array.Copy(tabEXP, i, tabKEY, 0, 8)
Array.Copy(tabEXP, i + 20, tabCOUNT, 0, 4)
sameKEY = True
For j = 0 To 7
If tabKEY(j) <> tabKEY(j) Then
sameKEY = False
Exit For
End If
Next
'same position ?
If sameKEY Then
'yes
sameCOUNT = True
For j = 0 To 3
If tabCOUNT(j) <> tabCOUNTMEM(j) Then
sameCOUNT = False
Exit For
End If
Next
'same count value ?
If sameCOUNT And min_count_value <= tabCOUNT(0) And tabCOUNT(0) < 255 And tabCOUNT(1) = 0 And tabCOUNT(2) = 0 And tabCOUNT(3) = 0 Then
'yes
positionErrors = positionErrors + 1
'memorize the index of experience array (=first error of this position)
If iMem = -1 Then
iMem = i - 24
positionErrors = positionErrors + 1
End If
Else
'no
'fix errors of previous position
If positionErrors >= 3 Then
'stats
If maxPositionErrors < positionErrors Then
maxPositionErrors = positionErrors
End If
'bad count value => count = 1
For j = iMem To i - 24 Step 24
'stats
If tabEXP(j + 20) < minFixedCount Then
minFixedCount = tabEXP(j + 20)
End If
tabEXP(j + 20) = 1
Next
fixedPositions = fixedPositions + 1
End If
'memorize the count value of the new position
Array.Copy(tabCOUNT, tabCOUNTMEM, 4)
iMem = -1
positionErrors = 0
End If
Else
'no
'memorize the key of the new position
Array.Copy(tabKEY, tabKEYMEM, 8)
iMem = -1
positionErrors = 0
End If
Next
Console.WriteLine("Fixed positions : " & Trim(Format(fixedPositions, "# ### ##0")))
Console.WriteLine("Min count value : " & Trim(Format(minFixedCount, "# ### ##0")))
Console.WriteLine("Max. errors/pos : " & Trim(Format(maxPositionErrors, "# ### ##0")) & vbCrLf)
'save fixed experience file ?
If fixedPositions >= 1000 Then
Console.WriteLine("Fix them ? ('y' or 'n')")
If Replace(Console.ReadLine, ",", "") = "y" Then
Console.Write(vbCrLf & "Saving " & nomFichier(fichierEXP) & "... ")
My.Computer.FileSystem.WriteAllBytes(fichierEXP, tabEXP, False)
Console.WriteLine("OK" & vbCrLf)
End If
End If
End If
End If
Console.WriteLine("Press ENTER to close this window.")
Console.ReadLine()
End Sub
Code: Select all
Public Function expV2(cheminEXP As String) As Boolean
Dim lecture As IO.FileStream, tampon As Long, tabTampon() As Byte
lecture = New IO.FileStream(cheminEXP, IO.FileMode.Open)
'SugaR Experience version 2
'0123456789abcdef0123456789
tampon = 26
ReDim tabTampon(tampon - 1)
lecture.Read(tabTampon, 0, tampon)
lecture.Close()
If System.Text.Encoding.UTF8.GetString(tabTampon) <> "SugaR Experience version 2" Then
Return False
Else
Return True
End If
End Function