I wonder what the currently accepted best values for chess pieces are.
I did some internet searches and got wildly varying answers including knights less than a pawn from a rook value here: https://royalchessmall.com/blogs/blog/u ... eces-value
So I am wondering, what is a good, logical set of values for chessmen?
I want to do SQL queries based on wood imbalance. I currently have a super primitive SQL call to estimate the values, but I am not at all satisfied that it is correct:
USE [Chess]
GO
/****** Object: UserDefinedFunction [dbo].[Imbalance] Script Date: 3/27/2024 10:16:07 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Imbalance](@Epd varchar(1024))
RETURNS float
AS
BEGIN
DECLARE @WhiteQueens float;
DECLARE @BlackQueens float;
DECLARE @WhiteRooks float;
DECLARE @BlackRooks float;
DECLARE @WhiteBishops float;
DECLARE @BlackBishops float;
DECLARE @WhiteKnights float;
DECLARE @BlackKnights float;
DECLARE @WhitePawns float;
DECLARE @BlackPawns float;
DECLARE @imb float;
SET @WhiteQueens = LEN(@Epd) - LEN(REPLACE(@Epd, 'Q', ''));
SET @BlackQueens = LEN(@Epd) - LEN(REPLACE(@Epd, 'q', ''));
SET @WhiteRooks = LEN(@Epd) - LEN(REPLACE(@Epd, 'R', ''));
SET @BlackRooks = LEN(@Epd) - LEN(REPLACE(@Epd, 'r', ''));
SET @WhiteBishops = LEN(@Epd) - LEN(REPLACE(@Epd, 'B', ''));
SET @BlackBishops = LEN(@Epd) - LEN(REPLACE(@Epd, 'b', ''));
SET @WhiteKnights = LEN(@Epd) - LEN(REPLACE(@Epd, 'N', ''));
SET @BlackKnights = LEN(@Epd) - LEN(REPLACE(@Epd, 'n', ''));
SET @WhitePawns = LEN(@Epd) - LEN(REPLACE(@Epd, 'P', ''));
SET @BlackPawns = LEN(@Epd) - LEN(REPLACE(@Epd, 'p', ''));
SET @imb = @WhiteQueens*10.0 - @WhiteQueens*10.0 + @WhiteRooks * 5.25 - @BlackRooks * 5.25 + @WhiteBishops * 3.5 - @BlackBishops * 3.5 + @WhiteKnights * 3.75 - @BlackKnights * 3.75 + @WhitePawns * 1.0 - @BlackPawns * 1.0 ;
RETURN(@imb);
END;
Obviously, something much more sophisticated could be done but I want to start simple.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
USE [Chess]
GO
/****** Object: UserDefinedFunction [dbo].[Imbalance] Script Date: 3/27/2024 10:20:25 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Imbalance](@Epd varchar(1024))
RETURNS float
AS
BEGIN
DECLARE @origialLength int;
DECLARE @WhiteQueens float;
DECLARE @BlackQueens float;
DECLARE @WhiteRooks float;
DECLARE @BlackRooks float;
DECLARE @WhiteBishops float;
DECLARE @BlackBishops float;
DECLARE @WhiteKnights float;
DECLARE @BlackKnights float;
DECLARE @WhitePawns float;
DECLARE @BlackPawns float;
DECLARE @imb float;
SET @origialLength = LEN(@Epd);
SET @WhiteQueens = @origialLength - LEN(REPLACE(@Epd, 'Q', ''));
SET @BlackQueens = @origialLength - LEN(REPLACE(@Epd, 'q', ''));
SET @WhiteRooks = @origialLength - LEN(REPLACE(@Epd, 'R', ''));
SET @BlackRooks = @origialLength - LEN(REPLACE(@Epd, 'r', ''));
SET @WhiteBishops = @origialLength - LEN(REPLACE(@Epd, 'B', ''));
SET @BlackBishops = @origialLength - LEN(REPLACE(@Epd, 'b', ''));
SET @WhiteKnights = @origialLength - LEN(REPLACE(@Epd, 'N', ''));
SET @BlackKnights = @origialLength - LEN(REPLACE(@Epd, 'n', ''));
SET @WhitePawns = @origialLength - LEN(REPLACE(@Epd, 'P', ''));
SET @BlackPawns = @origialLength - LEN(REPLACE(@Epd, 'p', ''));
SET @imb = @WhiteQueens*10.0 - @WhiteQueens*10.0 + @WhiteRooks * 5.25 - @BlackRooks * 5.25 + @WhiteBishops * 3.5 - @BlackBishops * 3.5 + @WhiteKnights * 3.75 - @BlackKnights * 3.75 + @WhitePawns * 1.0 - @BlackPawns * 1.0 ;
RETURN(@imb);
END;
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
I do not think that there is a one size fits all answer. For example a knight can be worth less than 3 pawns in some situations and worth more than a rook in other situations. If I'm going for a best generalization that is optimal say 80% of the time and that is just a guess I'd use the values.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
That's interesting. I guess to know which set is best one would need a thousand games at the desired time control for each proposed set to find out.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
That reminds me of an experiment I did once, possibly the source is on GitHub.
The idea was to use piece value regression analysis on the (move, score) put out by an engine, as you’ve done it. Except, for each engine under test, you give it 10,000 positions split up into 8 game phases and get the PNBRQ piece value for each phase.
Graph the five pieces against phase.
Just for one engine that gave really interesting data.
For multiple engines one could then compare the graph shape wrt phase, and, I think, though I never published it, determine how similar various engines (looking just at the nnue ones) were. One could even hazard quite good guesses at which engine datasets were used to generate the various nnues.
I have a theory that if you could search deep enough, all the piece values would become zero.
The values are a static tag we stick on them because of the strength of their movement and the board control that implies.
If we search deeply enough, we no longer need the static tag.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.