mirror of
https://github.com/official-stockfish/Stockfish.git
synced 2026-07-22 20:57:10 +00:00
The primary rationale behind this lies in the fact that enums were not originally designed to be employed in the manner we currently utilize them. The Value enum was used like a type alias throughout the code and was often misused. Furthermore, changing the underlying size of the enum to int16_t broke everything, mostly because of the operator overloads for the Value enum, were causing data to be truncated. Since Value is now a type alias, the operator overloads are no longer required. Passed Non-Regression STC: https://tests.stockfishchess.org/tests/view/6593b8bb79aa8af82b95b401 LLR: 2.95 (-2.94,2.94) <-1.75,0.25> Total: 235296 W: 59919 L: 59917 D: 115460 Ptnml(0-2): 743, 27085, 62054, 26959, 807 closes https://github.com/official-stockfish/Stockfish/pull/4960 No functional change
80 lines
2.2 KiB
C++
80 lines
2.2 KiB
C++
/*
|
|
Stockfish, a UCI chess playing engine derived from Glaurung 2.1
|
|
Copyright (C) 2004-2024 The Stockfish developers (see AUTHORS file)
|
|
|
|
Stockfish is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Stockfish is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
// header used in NNUE evaluation function
|
|
|
|
#ifndef NNUE_EVALUATE_NNUE_H_INCLUDED
|
|
#define NNUE_EVALUATE_NNUE_H_INCLUDED
|
|
|
|
#include <cstdint>
|
|
#include <iosfwd>
|
|
#include <memory>
|
|
#include <optional>
|
|
#include <string>
|
|
|
|
#include "../misc.h"
|
|
#include "nnue_architecture.h"
|
|
#include "nnue_feature_transformer.h"
|
|
#include "../types.h"
|
|
|
|
namespace Stockfish {
|
|
class Position;
|
|
}
|
|
|
|
namespace Stockfish::Eval::NNUE {
|
|
|
|
// Hash value of evaluation function structure
|
|
constexpr std::uint32_t HashValue =
|
|
FeatureTransformer::get_hash_value() ^ Network::get_hash_value();
|
|
|
|
|
|
// Deleter for automating release of memory area
|
|
template<typename T>
|
|
struct AlignedDeleter {
|
|
void operator()(T* ptr) const {
|
|
ptr->~T();
|
|
std_aligned_free(ptr);
|
|
}
|
|
};
|
|
|
|
template<typename T>
|
|
struct LargePageDeleter {
|
|
void operator()(T* ptr) const {
|
|
ptr->~T();
|
|
aligned_large_pages_free(ptr);
|
|
}
|
|
};
|
|
|
|
template<typename T>
|
|
using AlignedPtr = std::unique_ptr<T, AlignedDeleter<T>>;
|
|
|
|
template<typename T>
|
|
using LargePagePtr = std::unique_ptr<T, LargePageDeleter<T>>;
|
|
|
|
std::string trace(Position& pos);
|
|
Value evaluate(const Position& pos, bool adjusted = false, int* complexity = nullptr);
|
|
void hint_common_parent_position(const Position& pos);
|
|
|
|
bool load_eval(std::string name, std::istream& stream);
|
|
bool save_eval(std::ostream& stream);
|
|
bool save_eval(const std::optional<std::string>& filename);
|
|
|
|
} // namespace Stockfish::Eval::NNUE
|
|
|
|
#endif // #ifndef NNUE_EVALUATE_NNUE_H_INCLUDED
|