Конечно же, здесь мы будем говорить о mvv/lva. Эта аббревиатура
расшифровывается как «most valuable victim / least valuable aggressor». Если
перевести на русский, то это звучит как наиболее ценная жертва/наименее ценный
агрессор. Суть данной сортировки отраженна очень точно.
Несмотря на ее простоту, она принципиально важна, когда мы в быстром поиске
считаем только взятия. Именно эта сортировка позволяет просчитывать взятия до
конца, не зарываясь при этом.
Оцениваем взятия следующим образом:
взятая фигура – берущая фигура
Потом сортируем по величине оценки, начиная с максимальной и дальше по
убыванию.
Оценка для сортировки у меня следующая:
1 - пешка 2 - конь 3 - слон 4 - ладья 5 - ферзь 6 – король
Например, мы пешкой съели ферзя, тогда оценка будет
5 – 1 = 4
или мы ладьей съели ферзя, тогда оценка будет
5 – 4 = 1
или конем съели ладью
4 – 2 = 2
Ясно, что после сортировки на первом месте будет 4, на втором 2 на третьем 1.
В Ифрите (Ifrit_b2_6) реализация следующая:
оценку даем в генераторе ходов
// записываем оценку взятия(mvv/lva в моем понимании) для последующей
сортировки
list_surplus_moves->sorting_score[p] = capture - name;
а сортируем в отдельной функции после генерации всех ходов.
for (n = 0 ; n < captures ; n++){
for (int i = n + 1 ; i < captures ; i++){
if(list_surplus_moves->sorting_score[n] < list_surplus_moves->sorting_score[i]){
// сохраняем данные из n
move_s = list_surplus_moves->move[n];
score_s = list_surplus_moves->sorting_score[n];
// копируем из i в n
list_surplus_moves->move[n] = list_surplus_moves->move[i];
list_surplus_moves->sorting_score[n] = list_surplus_moves->sorting_score[i];
// восстанавливаем запись
list_surplus_moves->move[i] = move_s;
list_surplus_moves->sorting_score[i] = score_s;
}// if(list_surplus_moves->sorting_score[n] < list_surplus_moves->sorting_score[i]){
}//for (int i=0;i<m;i++){
}//for (int n=0;n<m;n++){
Пробовал также схему
100 * взятая фигура – берущая фигура
В результате получилось:
взятая фигура – берущая фигура
9/9 00:45 25.499.252 780.290 +0,29 e2e4 e7e5 Ng1f3 Bf8d6 d2d4 e5xd4 Qd1xd4
Ng8f6 Bf1c4
10/10 04:41 102.801.673 559.898 +0,09 e2e4 e7e5 Ng1f3 Ng8f6 d2d4 e5xd4 e4e5
Qd8e7 Qd1xd4 Nb8c6
100 * взятая фигура – берущая фигура
9/9 00:43 25.307.131 795.960 +0,29 e2e4 e7e5 Ng1f3 Bf8d6 Bf1c4 Ng8f6 d2d4 e5xd4
Qd1xd4
10/10 04:57 123.698.495 603.137 +0,09 e2e4 e7e5 Ng1f3 Ng8f6 d2d4 e5xd4 e4e5
Qd8e7 Qd1xd4 Nb8c6
|