{"id":116,"date":"2018-08-20T19:56:53","date_gmt":"2018-08-20T18:56:53","guid":{"rendered":"http:\/\/rofchade.nl\/?page_id=116"},"modified":"2018-08-27T12:30:43","modified_gmt":"2018-08-27T11:30:43","slug":"technical","status":"publish","type":"page","link":"https:\/\/rofchade.nl\/?page_id=116","title":{"rendered":"Technical"},"content":{"rendered":"<h3>Evaluation<\/h3>\n<p>Rofchade 1 has a minimal evaluation function which only uses\u00a0 Material Values and asymmetrical Piece Square Tables(PST). It uses a tapered evaluation of Middlegame and Endgame Material and PST values. The parameters and tapering are tuned with Texel&#8217;s tuning method using quiet_labeled.epd created by Zurichess.<\/p>\n<p>The main goal for\u00a0 release 2.0 of Rofchade will be to add additional evaluation elements, mostly for pawn structure and King safety.<\/p>\n<h3>Move ordering<\/h3>\n<p>A staged movegenerator is used based on bitboards. The generation process is as follows:<\/p>\n<ol>\n<li>do hash move<\/li>\n<li>generate capture moves, categorised by SEE into good captures and bad captures.<\/li>\n<li>do good captures, sorted by MVV\/LVA value<\/li>\n<li>do killermoves (2 plus killer1 from ply &#8211; 2)<\/li>\n<li>do bad captures sorted by MVV\/LVA<\/li>\n<li>generate quiet moves including promotions<\/li>\n<li>do quiet moves sorted by history heuristics<\/li>\n<\/ol>\n<p>When in check a special check evasion generator is used, with dedicated move ordering (capture of checking piece, regular captures, quiets, divided by SEE).<\/p>\n<p>History heuristics is based on 2 history tables: good history for the quiet move that caused the cutoff and bad history for all quiet moves before that move (excluding killer moves).\u00a0 The tables are incremented with (depth * depth) and are periodically halved in value(aging).<\/p>\n<p>Countermove heuristics doesn&#8217;t seem to work for now.<\/p>\n<h3>Search techniques<\/h3>\n<ul>\n<li>PVS with aspiration<\/li>\n<li>Separate searchroot function<\/li>\n<li>Razoring<\/li>\n<li>Futility pruning<\/li>\n<li>Null move<\/li>\n<li>IID<\/li>\n<li>LMP<\/li>\n<li>LMR<\/li>\n<li>gives check with non negative see extension<\/li>\n<\/ul>\n<ul>\n<li>Probcut doesn&#8217;t seem to work for now<\/li>\n<li>Singular extension doesn&#8217;t seem to work for now<\/li>\n<\/ul>\n<h3>Multi threading<\/h3>\n<p>Multithreading is implemented via Lazy SMP. It&#8217;s based on a threadqueue of workers and a boss, which is also a worker.<\/p>\n<p>The boss is responsible for the communication with the GUI, the determination of the best move among workers, and when it&#8217;s time to stop the current search. The stop moment is not only decided by the boss, the worker thread which is the first to finish a new depth may also decide to stop the search if there is no time left. Some workers calculate the position one deeper than the current regular depth. If 1 worker has already finished the depth of the current iteration, this depth is skipped.<\/p>\n<p>Half of the workers use a different aspiration window from the regular aspiration window.<\/p>\n<p>If\u00a0 half plus 1 or more workers are already working on the current depth or higher, the next worker will start at depth plus 1.<\/p>\n<h3>Time management<\/h3>\n<p>Later<\/p>\n<h3>Implementation<\/h3>\n<p>Later<\/p>\n<h3>Tuning<\/h3>\n<p>By using Texel tuning with the positions quiet_labeled.epd from Zuriches Rofchade was able to tune the Material Values and PST, and gained about 75 to 80 Elo. A nice result with the little number of evaluation parameters Rofchade has.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Evaluation Rofchade 1 has a minimal evaluation function which only uses\u00a0 Material Values and asymmetrical Piece Square Tables(PST). It uses a tapered evaluation of Middlegame and Endgame Material and PST values. The parameters and tapering are tuned with Texel&#8217;s tuning method using quiet_labeled.epd created by Zurichess. The main goal for\u00a0 release 2.0 of Rofchade will [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-116","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/rofchade.nl\/index.php?rest_route=\/wp\/v2\/pages\/116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rofchade.nl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/rofchade.nl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/rofchade.nl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rofchade.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=116"}],"version-history":[{"count":19,"href":"https:\/\/rofchade.nl\/index.php?rest_route=\/wp\/v2\/pages\/116\/revisions"}],"predecessor-version":[{"id":151,"href":"https:\/\/rofchade.nl\/index.php?rest_route=\/wp\/v2\/pages\/116\/revisions\/151"}],"wp:attachment":[{"href":"https:\/\/rofchade.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}