ahclib


Nameahclib JSON
Version 0.1.0 PyPI version JSON
download
home_pagehttps://github.com/titan-23/ahclib
SummaryParallel Execution and Optuna Optimization Tools for AHC
upload_time2024-12-19 00:41:54
maintainerNone
docs_urlNone
authortitan23
requires_python>=3.10
licenseMIT License
keywords atcoder ahc heuristic
VCS
bugtrack_url
requirements optuna optunahub setuptools
Travis-CI No Travis.
coveralls test coverage No coveralls.
            AHC Lib
===========

`titan23 <https://atcoder.jp/users/titan23?contestType=heuristic>`_  が使用している、AHC のツールです。
ありえないバグがあるかもしれません。ご注意ください。

`View on GitHub <https://github.com/titan-23/ahclib/tree/main>`_


使い方
-------

初期設定
~~~~~~~~~~~~~~~~~~

作業ディレクトリで以下のコマンドを実行し、設定ファイル ``ahc_settings`` ファイルを生成します

.. code-block:: shell

    python3 -m ahclib setup



並列実行
~~~~~~~~~~~~~~~~~~

``njobs`` 数のスレッドを立ち上げて実行します。結果を記録した csv ファイルと実行ソースファイルが ``./ahclib_results/`` ディレクトリに保存されます

コマンドは以下です

.. code-block:: shell

    python3 -m ahclib test [-c] [-v] [-r]

**オプション**

- ``-c`` : コンパイルします
- ``-v`` : ログを表示します(推奨)
- ``-r`` : 標準出力と標準エラー出力をすべて保存します


Optuna を用いたパラメータ探索
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

コマンドは以下です

.. code-block:: shell

    python3 -m ahclib opt


設定ファイル
-------------

設定ファイル ``ahc_settings`` 中の ``AHCSettings`` クラスに以下の情報を書いてください

* スレッド数 (``njobs``)

  - (パソコンの最大スレッド数-1)との ``min`` がとられる

* ファイル名 (``filename``)

* コンパイルコマンド (``compile_command``)

  - コンパイルする必要が無いときは、``None`` とする

* 実行コマンド (``execute_command``)

* 入力ファイル (``input_file_names``)

  - ``list[str]`` の形式で書く

* 制限時間 (``timeout``)

  - ``ms`` 単位で指定する
  - 指定しないときは ``None`` とする
  - 各テストでメモリを多く使う場合など、正確さに欠けることがある点に注意

* 集計関数 (``get_score``)

  - 例: 平均など


例:

.. code-block:: python

    njobs = 127
    filename = "./main.cpp"
    compile_command = "g++ ./main.cpp -O2 -std=c++20 -o a.out -I./../../../Library_cpp"
    execute_command = "./a.out"
    input_file_names = [f"./in/{str(i).zfill(4)}.txt" for i in range(100)]
    timeout = None

    def get_score(scores: list[float]) -> float:
        return sum(scores) / len(scores)


Optuna を用いたパラメータ探索用の設定
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* ``study_name``

  - ``study_name`` が既にある場合、そのデータベースが利用される

* ``direction``

  - ``minimize`` か ``maximize``

* optuna の試行回数 (``n_trials``)

* optuna のスレッド数 (``n_jobs_optuna``)

* 推定するもの

  .. code-block:: python

      def objective(trial: optuna.trial.Trial) -> tuple:

  - 返り値のタプルはコマンドライン引数として渡す順番にする


例: 初期温度を探索する

.. code-block:: python

  study_name = "test"
  direction = "minimize"
  n_trials = 50
  n_jobs_optuna = 1

  def objective(trial: optuna.trial.Trial) -> tuple:
      start_temp = trial.suggest_float("start_temp", 1, 1e9, log=True)
      return start_temp,  # タプルで返す

.. code-block:: cpp

  double start_temp;

  int main(int argc, char *argv[]) {
      start_temp = std::stod(argv[1]);  // argv[1], ... に objective で返した値が格納されている
      solve();
      return 0;
  }

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/titan-23/ahclib",
    "name": "ahclib",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "AtCoder, AHC, heuristic",
    "author": "titan23",
    "author_email": "titan23.kyopuro@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/3c/dc/ad050b14d5d191cbb22fd47f91d5fa128a4c6999b77b3209825dc32c86c0/ahclib-0.1.0.tar.gz",
    "platform": null,
    "description": "AHC Lib\n===========\n\n`titan23 <https://atcoder.jp/users/titan23?contestType=heuristic>`_  \u304c\u4f7f\u7528\u3057\u3066\u3044\u308b\u3001AHC \u306e\u30c4\u30fc\u30eb\u3067\u3059\u3002\n\u3042\u308a\u3048\u306a\u3044\u30d0\u30b0\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\u3002\n\n`View on GitHub <https://github.com/titan-23/ahclib/tree/main>`_\n\n\n\u4f7f\u3044\u65b9\n-------\n\n\u521d\u671f\u8a2d\u5b9a\n~~~~~~~~~~~~~~~~~~\n\n\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb ``ahc_settings`` \u30d5\u30a1\u30a4\u30eb\u3092\u751f\u6210\u3057\u307e\u3059\n\n.. code-block:: shell\n\n    python3 -m ahclib setup\n\n\n\n\u4e26\u5217\u5b9f\u884c\n~~~~~~~~~~~~~~~~~~\n\n``njobs`` \u6570\u306e\u30b9\u30ec\u30c3\u30c9\u3092\u7acb\u3061\u4e0a\u3052\u3066\u5b9f\u884c\u3057\u307e\u3059\u3002\u7d50\u679c\u3092\u8a18\u9332\u3057\u305f csv \u30d5\u30a1\u30a4\u30eb\u3068\u5b9f\u884c\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u304c ``./ahclib_results/`` \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\n\n\u30b3\u30de\u30f3\u30c9\u306f\u4ee5\u4e0b\u3067\u3059\n\n.. code-block:: shell\n\n    python3 -m ahclib test [-c] [-v] [-r]\n\n**\u30aa\u30d7\u30b7\u30e7\u30f3**\n\n- ``-c`` : \u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u307e\u3059\n- ``-v`` : \u30ed\u30b0\u3092\u8868\u793a\u3057\u307e\u3059(\u63a8\u5968)\n- ``-r`` : \u6a19\u6e96\u51fa\u529b\u3068\u6a19\u6e96\u30a8\u30e9\u30fc\u51fa\u529b\u3092\u3059\u3079\u3066\u4fdd\u5b58\u3057\u307e\u3059\n\n\nOptuna \u3092\u7528\u3044\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u63a2\u7d22\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\u30b3\u30de\u30f3\u30c9\u306f\u4ee5\u4e0b\u3067\u3059\n\n.. code-block:: shell\n\n    python3 -m ahclib opt\n\n\n\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n-------------\n\n\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb ``ahc_settings`` \u4e2d\u306e ``AHCSettings`` \u30af\u30e9\u30b9\u306b\u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u66f8\u3044\u3066\u304f\u3060\u3055\u3044\n\n* \u30b9\u30ec\u30c3\u30c9\u6570 (``njobs``)\n\n  - (\u30d1\u30bd\u30b3\u30f3\u306e\u6700\u5927\u30b9\u30ec\u30c3\u30c9\u6570-1)\u3068\u306e ``min`` \u304c\u3068\u3089\u308c\u308b\n\n* \u30d5\u30a1\u30a4\u30eb\u540d (``filename``)\n\n* \u30b3\u30f3\u30d1\u30a4\u30eb\u30b3\u30de\u30f3\u30c9 (``compile_command``)\n\n  - \u30b3\u30f3\u30d1\u30a4\u30eb\u3059\u308b\u5fc5\u8981\u304c\u7121\u3044\u3068\u304d\u306f\u3001``None`` \u3068\u3059\u308b\n\n* \u5b9f\u884c\u30b3\u30de\u30f3\u30c9 (``execute_command``)\n\n* \u5165\u529b\u30d5\u30a1\u30a4\u30eb (``input_file_names``)\n\n  - ``list[str]`` \u306e\u5f62\u5f0f\u3067\u66f8\u304f\n\n* \u5236\u9650\u6642\u9593 (``timeout``)\n\n  - ``ms`` \u5358\u4f4d\u3067\u6307\u5b9a\u3059\u308b\n  - \u6307\u5b9a\u3057\u306a\u3044\u3068\u304d\u306f ``None`` \u3068\u3059\u308b\n  - \u5404\u30c6\u30b9\u30c8\u3067\u30e1\u30e2\u30ea\u3092\u591a\u304f\u4f7f\u3046\u5834\u5408\u306a\u3069\u3001\u6b63\u78ba\u3055\u306b\u6b20\u3051\u308b\u3053\u3068\u304c\u3042\u308b\u70b9\u306b\u6ce8\u610f\n\n* \u96c6\u8a08\u95a2\u6570 (``get_score``)\n\n  - \u4f8b: \u5e73\u5747\u306a\u3069\n\n\n\u4f8b:\n\n.. code-block:: python\n\n    njobs = 127\n    filename = \"./main.cpp\"\n    compile_command = \"g++ ./main.cpp -O2 -std=c++20 -o a.out -I./../../../Library_cpp\"\n    execute_command = \"./a.out\"\n    input_file_names = [f\"./in/{str(i).zfill(4)}.txt\" for i in range(100)]\n    timeout = None\n\n    def get_score(scores: list[float]) -> float:\n        return sum(scores) / len(scores)\n\n\nOptuna \u3092\u7528\u3044\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u63a2\u7d22\u7528\u306e\u8a2d\u5b9a\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n* ``study_name``\n\n  - ``study_name`` \u304c\u65e2\u306b\u3042\u308b\u5834\u5408\u3001\u305d\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5229\u7528\u3055\u308c\u308b\n\n* ``direction``\n\n  - ``minimize`` \u304b ``maximize``\n\n* optuna \u306e\u8a66\u884c\u56de\u6570 (``n_trials``)\n\n* optuna \u306e\u30b9\u30ec\u30c3\u30c9\u6570 (``n_jobs_optuna``)\n\n* \u63a8\u5b9a\u3059\u308b\u3082\u306e\n\n  .. code-block:: python\n\n      def objective(trial: optuna.trial.Trial) -> tuple:\n\n  - \u8fd4\u308a\u5024\u306e\u30bf\u30d7\u30eb\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u5f15\u6570\u3068\u3057\u3066\u6e21\u3059\u9806\u756a\u306b\u3059\u308b\n\n\n\u4f8b: \u521d\u671f\u6e29\u5ea6\u3092\u63a2\u7d22\u3059\u308b\n\n.. code-block:: python\n\n  study_name = \"test\"\n  direction = \"minimize\"\n  n_trials = 50\n  n_jobs_optuna = 1\n\n  def objective(trial: optuna.trial.Trial) -> tuple:\n      start_temp = trial.suggest_float(\"start_temp\", 1, 1e9, log=True)\n      return start_temp,  # \u30bf\u30d7\u30eb\u3067\u8fd4\u3059\n\n.. code-block:: cpp\n\n  double start_temp;\n\n  int main(int argc, char *argv[]) {\n      start_temp = std::stod(argv[1]);  // argv[1], ... \u306b objective \u3067\u8fd4\u3057\u305f\u5024\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\n      solve();\n      return 0;\n  }\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Parallel Execution and Optuna Optimization Tools for AHC",
    "version": "0.1.0",
    "project_urls": {
        "Homepage": "https://github.com/titan-23/ahclib"
    },
    "split_keywords": [
        "atcoder",
        " ahc",
        " heuristic"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cc67db375bb1c579e4d06c61530051ad5016910b2a91a6aeb1098c55bebbd7ea",
                "md5": "a59427aabc172ca847494531f6bb81f7",
                "sha256": "40f54ae07d9cb6028801a5527ed61de7481523f8a4da5082ef2642c6737c9e04"
            },
            "downloads": -1,
            "filename": "ahclib-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a59427aabc172ca847494531f6bb81f7",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 12311,
            "upload_time": "2024-12-19T00:41:51",
            "upload_time_iso_8601": "2024-12-19T00:41:51.875383Z",
            "url": "https://files.pythonhosted.org/packages/cc/67/db375bb1c579e4d06c61530051ad5016910b2a91a6aeb1098c55bebbd7ea/ahclib-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3cdcad050b14d5d191cbb22fd47f91d5fa128a4c6999b77b3209825dc32c86c0",
                "md5": "1ae45b3894febe37ffb96af9625afc99",
                "sha256": "b537288b1ed12555059feb270ab12e6bd7a3d1ac8c725b873a704f520e5445aa"
            },
            "downloads": -1,
            "filename": "ahclib-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "1ae45b3894febe37ffb96af9625afc99",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 11636,
            "upload_time": "2024-12-19T00:41:54",
            "upload_time_iso_8601": "2024-12-19T00:41:54.870632Z",
            "url": "https://files.pythonhosted.org/packages/3c/dc/ad050b14d5d191cbb22fd47f91d5fa128a4c6999b77b3209825dc32c86c0/ahclib-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-19 00:41:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "titan-23",
    "github_project": "ahclib",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "optuna",
            "specs": [
                [
                    ">=",
                    "4.1.0"
                ]
            ]
        },
        {
            "name": "optunahub",
            "specs": [
                [
                    ">=",
                    "0.1.0"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    ">=",
                    "75.6.0"
                ]
            ]
        }
    ],
    "lcname": "ahclib"
}
        
Elapsed time: 0.39531s