Buckets:

download
raw
13 kB
import"../chunks/DsnmJJEf.js";import{i as f,h as A,C as B,H as a,a as l,E as k,s as Z}from"../chunks/C07d6Hje.js";import{p as N,o as E,s,f as Q,a as U,b as V,c as g,n as _}from"../chunks/BSuxAqoA.js";const G='{"title":"Chess Environment","local":"chess-environment","sections":[{"title":"Features","local":"features","sections":[],"depth":2},{"title":"Quick Start","local":"quick-start","sections":[{"title":"Using Docker","local":"using-docker","sections":[],"depth":3},{"title":"Using the Client","local":"using-the-client","sections":[],"depth":3}],"depth":2},{"title":"Observation Space","local":"observation-space","sections":[],"depth":2},{"title":"Action Space","local":"action-space","sections":[],"depth":2},{"title":"Rewards","local":"rewards","sections":[],"depth":2},{"title":"Configuration","local":"configuration","sections":[],"depth":2},{"title":"Temporal Discounting","local":"temporal-discounting","sections":[],"depth":2},{"title":"Links","local":"links","sections":[],"depth":2}],"depth":1}';var z=g('<meta name="hf:doc:metadata"/>'),D=g('<p></p> <!> <!> <p>A chess reinforcement learning environment for OpenEnv, powered by the <a href="https://github.com/luccabb/moonfish" rel="nofollow">moonfish</a> chess engine.</p> <!> <ul><li><strong>Full chess rules</strong> via python-chess library</li> <li><strong>Configurable opponent</strong>: moonfish engine, random moves, or self-play</li> <li><strong>Position evaluation</strong>: Uses moonfish’s PSQT-based evaluation</li> <li><strong>Standard OpenEnv interface</strong>: reset(), step(), state</li></ul> <!> <!> <!> <!> <p>The client is <strong>async by default</strong>:</p> <!> <p>For <strong>synchronous usage</strong>, use the <code>.sync()</code> wrapper:</p> <!> <!> <table><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>fen</code></td><td>str</td><td>Board position in FEN notation</td></tr><tr><td><code>legal_moves</code></td><td>List[str]</td><td>Legal moves in UCI format</td></tr><tr><td><code>is_check</code></td><td>bool</td><td>Whether current player is in check</td></tr><tr><td><code>done</code></td><td>bool</td><td>Whether game has ended</td></tr><tr><td><code>reward</code></td><td>float</td><td>Reward for last action</td></tr><tr><td><code>result</code></td><td>str</td><td>Game result (“1-0”, “0-1”, “1/2-1/2”)</td></tr></tbody></table> <!> <table><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>move</code></td><td>str</td><td>UCI format move (e.g., “e2e4”, “e7e8q”)</td></tr></tbody></table> <!> <table><thead><tr><th>Outcome</th><th>Reward</th></tr></thead><tbody><tr><td>Win</td><td>+1.0</td></tr><tr><td>Loss</td><td>-1.0</td></tr><tr><td>Draw</td><td>0.0</td></tr><tr><td>Illegal move</td><td>-0.1</td></tr></tbody></table> <!> <p>The environment supports these configuration options:</p> <table><thead><tr><th>Parameter</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>opponent</code></td><td>“moonfish”</td><td>Opponent type: “moonfish”, “random”, or None</td></tr><tr><td><code>opponent_depth</code></td><td>2</td><td>Search depth for moonfish opponent</td></tr><tr><td><code>max_moves</code></td><td>500</td><td>Maximum half-moves before draw</td></tr><tr><td><code>agent_color</code></td><td>None</td><td>Agent color: “white”, “black”, or None (alternate each episode)</td></tr><tr><td><code>gamma</code></td><td>0.99</td><td>Discount factor for temporal credit assignment</td></tr></tbody></table> <!> <p>For RL training, the environment computes temporally discounted rewards at episode end. This helps with credit assignment in long games where only the final outcome is known.</p> <p>When an episode ends, the terminal observation’s <code>metadata</code> includes:</p> <ul><li><code>discounted_rewards</code>: List of discounted rewards for each agent move</li> <li><code>gamma</code>: The discount factor used</li></ul> <p>The formula is <code>r_t = γ^(T-1-t) × R_final</code> where:</p> <ul><li><code>T</code> = total agent moves</li> <li><code>t</code> = move index (0-indexed)</li> <li><code>R_final</code> = terminal reward (+1, -1, or 0)</li></ul> <p>Example for a 5-move win with γ=0.99:</p> <!> <!> <ul><li><a href="https://github.com/luccabb/moonfish" rel="nofollow">moonfish GitHub</a></li> <li><a href="https://huggingface.co/spaces/luccabb/moonfish_chess" rel="nofollow">Play online</a></li></ul> <!> <p></p>',1);function X(v,I){N(I,!1),E(()=>{new URLSearchParams(window.location.search).get("fw")}),f();var n=D();A("13m76lm",T=>{var J=z();Z(J,"content",G),U(T,J)});var t=s(Q(n),2);B(t,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var e=s(t,2);a(e,{title:"Chess Environment",local:"chess-environment",headingTag:"h1"});var o=s(e,4);a(o,{title:"Features",local:"features",headingTag:"h2"});var r=s(o,4);a(r,{title:"Quick Start",local:"quick-start",headingTag:"h2"});var c=s(r,2);a(c,{title:"Using Docker",local:"using-docker",headingTag:"h3"});var d=s(c,2);l(d,{code:"JTIzJTIwQnVpbGQlMjB0aGUlMjBpbWFnZSUwQWRvY2tlciUyMGJ1aWxkJTIwLXQlMjBjaGVzcy1lbnYlM0FsYXRlc3QlMjAtZiUyMGVudnMlMkZjaGVzc19lbnYlMkZzZXJ2ZXIlMkZEb2NrZXJmaWxlJTIwLiUwQSUwQSUyMyUyMFJ1biUyMHRoZSUyMHNlcnZlciUwQWRvY2tlciUyMHJ1biUyMC1wJTIwODAwMCUzQTgwMDAlMjBjaGVzcy1lbnYlM0FsYXRlc3Q=",highlighted:`<span class="hljs-comment"># Build the image</span>
docker build -t chess-env:latest -f envs/chess_env/server/Dockerfile .
<span class="hljs-comment"># Run the server</span>
docker run -p 8000:8000 chess-env:latest`,lang:"bash",wrap:!1});var i=s(d,2);a(i,{title:"Using the Client",local:"using-the-client",headingTag:"h3"});var p=s(i,4);l(p,{code:"aW1wb3J0JTIwYXN5bmNpbyUwQWZyb20lMjBjaGVzc19lbnYlMjBpbXBvcnQlMjBDaGVzc0VudiUyQyUyMENoZXNzQWN0aW9uJTBBJTBBYXN5bmMlMjBkZWYlMjBtYWluKCklM0ElMEElMjAlMjAlMjAlMjBhc3luYyUyMHdpdGglMjBDaGVzc0VudihiYXNlX3VybCUzRCUyMmh0dHAlM0ElMkYlMkZsb2NhbGhvc3QlM0E4MDAwJTIyKSUyMGFzJTIwZW52JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwUmVzZXQlMjBmb3IlMjBhJTIwbmV3JTIwZ2FtZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGF3YWl0JTIwZW52LnJlc2V0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludChmJTIyU3RhcnRpbmclMjBwb3NpdGlvbiUzQSUyMCU3QnJlc3VsdC5vYnNlcnZhdGlvbi5mZW4lN0QlMjIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQoZiUyMkxlZ2FsJTIwbW92ZXMlM0ElMjAlN0JyZXN1bHQub2JzZXJ2YXRpb24ubGVnYWxfbW92ZXMlN0QlMjIpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwTWFrZSUyMGElMjBtb3ZlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwYXdhaXQlMjBlbnYuc3RlcChDaGVzc0FjdGlvbihtb3ZlJTNEJTIyZTJlNCUyMikpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQoZiUyMlJld2FyZCUzQSUyMCU3QnJlc3VsdC5yZXdhcmQlN0QlMkMlMjBEb25lJTNBJTIwJTdCcmVzdWx0LmRvbmUlN0QlMjIpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwUGxheSUyMHVudGlsJTIwZ2FtZSUyMGVuZHMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3aGlsZSUyMG5vdCUyMHJlc3VsdC5kb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbW92ZSUyMCUzRCUyMHJlc3VsdC5vYnNlcnZhdGlvbi5sZWdhbF9tb3ZlcyU1QjAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBhd2FpdCUyMGVudi5zdGVwKENoZXNzQWN0aW9uKG1vdmUlM0Rtb3ZlKSklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludChmJTIyR2FtZSUyMHJlc3VsdCUzQSUyMCU3QnJlc3VsdC5vYnNlcnZhdGlvbi5yZXN1bHQlN0QlMjIpJTBBJTBBYXN5bmNpby5ydW4obWFpbigpKQ==",highlighted:`<span class="hljs-keyword">import</span> asyncio
<span class="hljs-keyword">from</span> chess_env <span class="hljs-keyword">import</span> ChessEnv, ChessAction
<span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>():
<span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> ChessEnv(base_url=<span class="hljs-string">&quot;http://localhost:8000&quot;</span>) <span class="hljs-keyword">as</span> env:
<span class="hljs-comment"># Reset for a new game</span>
result = <span class="hljs-keyword">await</span> env.reset()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Starting position: <span class="hljs-subst">{result.observation.fen}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Legal moves: <span class="hljs-subst">{result.observation.legal_moves}</span>&quot;</span>)
<span class="hljs-comment"># Make a move</span>
result = <span class="hljs-keyword">await</span> env.step(ChessAction(move=<span class="hljs-string">&quot;e2e4&quot;</span>))
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Reward: <span class="hljs-subst">{result.reward}</span>, Done: <span class="hljs-subst">{result.done}</span>&quot;</span>)
<span class="hljs-comment"># Play until game ends</span>
<span class="hljs-keyword">while</span> <span class="hljs-keyword">not</span> result.done:
move = result.observation.legal_moves[<span class="hljs-number">0</span>]
result = <span class="hljs-keyword">await</span> env.step(ChessAction(move=move))
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Game result: <span class="hljs-subst">{result.observation.result}</span>&quot;</span>)
asyncio.run(main())`,lang:"python",wrap:!1});var h=s(p,4);l(h,{code:"ZnJvbSUyMGNoZXNzX2VudiUyMGltcG9ydCUyMENoZXNzRW52JTJDJTIwQ2hlc3NBY3Rpb24lMEElMEF3aXRoJTIwQ2hlc3NFbnYoYmFzZV91cmwlM0QlMjJodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUyMikuc3luYygpJTIwYXMlMjBlbnYlM0ElMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBlbnYucmVzZXQoKSUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGVudi5zdGVwKENoZXNzQWN0aW9uKG1vdmUlM0QlMjJlMmU0JTIyKSklMEElMjAlMjAlMjAlMjBwcmludChmJTIyUmV3YXJkJTNBJTIwJTdCcmVzdWx0LnJld2FyZCU3RCUyMik=",highlighted:`<span class="hljs-keyword">from</span> chess_env <span class="hljs-keyword">import</span> ChessEnv, ChessAction
<span class="hljs-keyword">with</span> ChessEnv(base_url=<span class="hljs-string">&quot;http://localhost:8000&quot;</span>).sync() <span class="hljs-keyword">as</span> env:
result = env.reset()
result = env.step(ChessAction(move=<span class="hljs-string">&quot;e2e4&quot;</span>))
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Reward: <span class="hljs-subst">{result.reward}</span>&quot;</span>)`,lang:"python",wrap:!1});var M=s(h,2);a(M,{title:"Observation Space",local:"observation-space",headingTag:"h2"});var u=s(M,4);a(u,{title:"Action Space",local:"action-space",headingTag:"h2"});var m=s(u,4);a(m,{title:"Rewards",local:"rewards",headingTag:"h2"});var j=s(m,4);a(j,{title:"Configuration",local:"configuration",headingTag:"h2"});var w=s(j,6);a(w,{title:"Temporal Discounting",local:"temporal-discounting",headingTag:"h2"});var b=s(w,14);l(b,{code:"TW92ZSUyMDAlM0ElMjAwLjk5JTVFNCUyMCVDMyU5NyUyMDEuMCUyMCUzRCUyMDAuOTYxJTBBTW92ZSUyMDElM0ElMjAwLjk5JTVFMyUyMCVDMyU5NyUyMDEuMCUyMCUzRCUyMDAuOTcwJTBBTW92ZSUyMDIlM0ElMjAwLjk5JTVFMiUyMCVDMyU5NyUyMDEuMCUyMCUzRCUyMDAuOTgwJTBBTW92ZSUyMDMlM0ElMjAwLjk5JTVFMSUyMCVDMyU5NyUyMDEuMCUyMCUzRCUyMDAuOTkwJTBBTW92ZSUyMDQlM0ElMjAwLjk5JTVFMCUyMCVDMyU5NyUyMDEuMCUyMCUzRCUyMDEuMDAw",highlighted:`<span class="hljs-attribute">Move</span> <span class="hljs-number">0</span>: <span class="hljs-number">0</span>.<span class="hljs-number">99</span>^<span class="hljs-number">4</span> × <span class="hljs-number">1</span>.<span class="hljs-number">0</span> = <span class="hljs-number">0</span>.<span class="hljs-number">961</span>
<span class="hljs-attribute">Move</span> <span class="hljs-number">1</span>: <span class="hljs-number">0</span>.<span class="hljs-number">99</span>^<span class="hljs-number">3</span> × <span class="hljs-number">1</span>.<span class="hljs-number">0</span> = <span class="hljs-number">0</span>.<span class="hljs-number">970</span>
<span class="hljs-attribute">Move</span> <span class="hljs-number">2</span>: <span class="hljs-number">0</span>.<span class="hljs-number">99</span>^<span class="hljs-number">2</span> × <span class="hljs-number">1</span>.<span class="hljs-number">0</span> = <span class="hljs-number">0</span>.<span class="hljs-number">980</span>
<span class="hljs-attribute">Move</span> <span class="hljs-number">3</span>: <span class="hljs-number">0</span>.<span class="hljs-number">99</span>^<span class="hljs-number">1</span> × <span class="hljs-number">1</span>.<span class="hljs-number">0</span> = <span class="hljs-number">0</span>.<span class="hljs-number">990</span>
<span class="hljs-attribute">Move</span> <span class="hljs-number">4</span>: <span class="hljs-number">0</span>.<span class="hljs-number">99</span>^<span class="hljs-number">0</span> × <span class="hljs-number">1</span>.<span class="hljs-number">0</span> = <span class="hljs-number">1</span>.<span class="hljs-number">000</span>`,lang:"",wrap:!1});var y=s(b,2);a(y,{title:"Links",local:"links",headingTag:"h2"});var C=s(y,4);k(C,{source:"https://github.com/huggingface/openenv/blob/main/docs/source/environments/chess.md"}),_(2),U(v,n),V()}export{X as component};

Xet Storage Details

Size:
13 kB
·
Xet hash:
1538040719279caadd5d25ac4dd13419bf6dd3d6d599a32de2659299c964cd30

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.