{"id":18925566,"url":"https://github.com/nightmachinery/ai_401_fall_rl_practical","last_synced_at":"2026-03-14T15:30:17.382Z","repository":{"id":115498220,"uuid":"585721631","full_name":"NightMachinery/ai_401_fall_rl_practical","owner":"NightMachinery","description":"ai_401_fall_rl_practical","archived":false,"fork":false,"pushed_at":"2023-12-15T05:12:28.000Z","size":8,"stargazers_count":0,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-31T17:48:07.351Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NightMachinery.png","metadata":{"files":{"readme":"readme.org","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-05T22:40:05.000Z","updated_at":"2023-01-05T22:40:20.000Z","dependencies_parsed_at":"2024-11-08T11:12:28.758Z","dependency_job_id":"2c9cecb6-06ab-4e31-aaf0-f6e81999abae","html_url":"https://github.com/NightMachinery/ai_401_fall_rl_practical","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightMachinery%2Fai_401_fall_rl_practical","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightMachinery%2Fai_401_fall_rl_practical/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightMachinery%2Fai_401_fall_rl_practical/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightMachinery%2Fai_401_fall_rl_practical/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NightMachinery","download_url":"https://codeload.github.com/NightMachinery/ai_401_fall_rl_practical/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239921844,"owners_count":19718844,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T11:12:21.723Z","updated_at":"2026-03-14T15:30:17.291Z","avatar_url":"https://github.com/NightMachinery.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+TITLE: Tic-Tac-Toe Q-Learning\n\nبازی ایکس او و الگوریتم Q-Learning برای حل آن در اختیار شما قرار گرفته است.\n\n* Install Dependencies\n#+begin_example zsh\npip install -U numpy open_spiel\n#+end_example\n\n* TD-Learning on State-Action Pairs (Q-Learning)\n\nقسمت هایی که با =fillMe= مشخص شده اند را تکمیل کنید. سپس با دستور زیر برنامه را اجرا کنید:\n\n#+begin_example zsh\npython tic_tac_toe_qlearner.py --interactive_play=true\n#+end_example\n\nنتایج برد و باخت شما در خطوطی مشابه زیر خروجی داده می‌شوند:\n\n#+begin_example\nI0106 01:25:38.127532 8466184832 tic_tac_toe_qlearner.py:164] Starting episode 39999, win_rates [0.988 0.791], lose_rates [0.    0.092] against random_agents\nI0106 01:25:38.583564 8466184832 tic_tac_toe_qlearner.py:164] Starting episode 39999, win_rates [0. 0.], lose_rates [0. 0.] against qlearning_agents\n#+end_example\n\nباید نرخ باخت شما کمتر از ۰.۲ باشد. در پایان، می‌توانید با هوش‌مصنوعی به بازی بپردازید. با زدن کنترل و c میتوانید برنامه را ببندید.\n\nدرنهایت وقتی به خروجی مطلوب رسیدید، نتیجه اجرای برنامه را در یک فایل متنی به نام result_1.txt کپی کنید. این کار در bash بصورت زیر نیز قابل انجام است:\n\n#+begin_example\npython tic_tac_toe_qlearner.py --interactive_play=false \u003e\u0026 result_1.txt\n#+end_example\n\n\n** با دادن تغییرات مناسب در فایل های داده شده، پاداش مدل را به نحوی تغییر دهید که الگوی زیر برایش پاداش بالایی (در اوردر هزار) داشته باشد:\n\n#+begin_example\nreward_mask = np.array([[0, 1, 0],\n                        [1, 0, 1],\n                        [0, 0, 0]])\n#+end_example\n\nتوجه کنید که رسیدن به این الگو برای بازیکن پاداش مثبت زیادی دارد، ولی رسیدن حریف به این الگو تاثیری در پاداش بازیکن ندارد.\n\nدوباره اجرا بگیرید و آن را در result_2.txt قرار دهید. چه اتفاقی افتاده است؟ تحلیل خود را در فایل result_2_analysis.txt بنویسید. اگر رسیدن حریف به این الگو پاداش منفی داشته باشد چه اتفاقی خواهد افتاد؟\n\n* TD-Learning on States\n\n*این سوال حذف شده است و نیازی به تحویل آن نیست.*\n\nالگوریتم TD-Learning بر روی state ها (و نه state-action ها مثل Q-Learning) را در فایل tabular_tdlearner.py پیاده سازی کنید. برای اجرای این الگوریتم نیاز به تغییراتی در فایل tic_tac_toe_qlearner.py هم می باشید؛ این فایل را به نام tic_tac_toe_tdlearner.py کپی کنید و تغییرات لازم را در آن بدهید. از پاداش تغییریافته مرحله قبل *استفاده نکنید*.\n\nدرنهایت وقتی به خروجی مناسب رسیدید، آن را در فایل result_3.txt قرار دهید:\n\n#+begin_example zsh\npython tic_tac_toe_tdlearner.py --interactive_play=false \u003e\u0026 result_3.txt\n#+end_example\n\nبرای پیاده سازی این الگوریتم، دیدن تکه کد های زیر شاید برایتان مفید باشد:\n\n#+begin_src jupyter-python :kernel py_310 :session emacs_py_1 :async yes :exports both\ngame = pyspiel.load_game(\"tic_tac_toe\")\nstate_start = game.new_initial_state()\nstate_start\n#+end_src\n\n#+RESULTS:\n: ...\n: ...\n: ...\n\n\n#+begin_src jupyter-python :kernel py_310 :session emacs_py_1 :async yes :exports both\nstate = state_start.clone()\nprint(state)\nprint(\"#############\")\n\nfor a in [4, 2, 8, 7, 0, 1]:\n    state.apply_action(a)\n    print(state)\n    print(f\"rewards: player_0={state.player_reward(0)} player_1={state.player_reward(1)}\")\n    print(\"#############\")\n    if state.is_terminal():\n        break\n#+end_src\n\n#+RESULTS:\n: ...\n: ...\n: ...\n: #############\n: ...\n: .x.\n: ...\n: rewards: player_0=0.0 player_1=0.0\n: #############\n: ..o\n: .x.\n: ...\n: rewards: player_0=0.0 player_1=0.0\n: #############\n: ..o\n: .x.\n: ..x\n: rewards: player_0=0.0 player_1=0.0\n: #############\n: ..o\n: .x.\n: .ox\n: rewards: player_0=0.0 player_1=0.0\n: #############\n: x.o\n: .x.\n: .ox\n: rewards: player_0=1.0 player_1=-1.0\n: #############\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnightmachinery%2Fai_401_fall_rl_practical","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnightmachinery%2Fai_401_fall_rl_practical","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnightmachinery%2Fai_401_fall_rl_practical/lists"}