So I published the new version of Andscacs with this self tuning done.
The first 4th-6th iterations with the tuning where the best in improvements; I was testing after each iteration. The next after the last good was really bad, so I decided to generate a new bunch of games.
This time I obtained improvements, little ones, until the 9th iteration.
Here I tuned the piece values alone, not present in previous tunings, until the tuning finished. Was a little win. I have yet to try with partial tuning.
Then I added parameters related to passed pawns and I tuned all things related to passed pawns alone, obtaining a little win but only in the 4th first iterations.
Then I tuned some new parameters related with knights that converged quickly and was a little win.
A new general tuning try was bad from the first attempt, so I decided to stop here.
For some of the parameters I use, instead of an static value, a proportional value that is increased/reduced in powers of two and derived values. To tune them I used this function:
Code: Select all
int incrementa_redueix_proporcionalment(int v, int increment) {
int r, j;
if (increment == 0)
return v;
//64
j = abs(increment);
if (j == 1)
r = FerPun(PunI(v) >> 5, PunF(v) >> 5); //2
else if (j == 2)
r = FerPun(PunI(v) >> 4, PunF(v) >> 4); //4
else if (j == 3)
r = FerPun(PunI(v) >> 3, PunF(v) >> 3); //8
else if (j == 4)
r = FerPun(PunI(v) >> 3, PunF(v) >> 3) + FerPun(PunI(v) >> 4, PunF(v) >> 4); //12
else if (j == 5)
r = FerPun(PunI(v) >> 2, PunF(v) >> 2); //16
else if (j == 6)
r = FerPun(PunI(v) >> 2, PunF(v) >> 2) + FerPun(PunI(v) >> 4, PunF(v) >> 4); //20
else if (j == 7)
r = FerPun(PunI(v) >> 2, PunF(v) >> 2) + FerPun(PunI(v) >> 3, PunF(v) >> 3); //24
else if (j == 8)
r = FerPun(PunI(v) >> 1, PunF(v) >> 1); //32
else if (j == 9)
r = FerPun(PunI(v) >> 1, PunF(v) >> 1) + FerPun(PunI(v) >> 3, PunF(v) >> 3); //40
else if (j == 10)
r = FerPun(PunI(v) >> 1, PunF(v) >> 1) + FerPun(PunI(v) >> 2, PunF(v) >> 2); //48
else if (j == 11)
r = FerPun(PunI(v) >> 1, PunF(v) >> 1) + FerPun(PunI(v) >> 2, PunF(v) >> 2) + FerPun(PunI(v) >> 3, PunF(v) >> 3); //56
else if (j == 12)
r = v; //64
return increment > 0 ? v + r : v - r;
}
PunI means mg value, and PunF eg value.
I don't know if someone is using something similar. I have not seen something like this in other engines.