{"id":25601178,"url":"https://github.com/fixstars/amplify-benchmark","last_synced_at":"2025-04-13T07:16:48.616Z","repository":{"id":186533417,"uuid":"622760764","full_name":"fixstars/amplify-benchmark","owner":"fixstars","description":"Benchmark framework for quantum annealing machines, Ising machines, and mathematical optimization solvers.","archived":false,"fork":false,"pushed_at":"2023-10-08T05:03:08.000Z","size":836,"stargazers_count":9,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-13T07:16:41.667Z","etag":null,"topics":["benchmark","fixstars-amplify","framework","ising","python","quantum","qubo"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fixstars.png","metadata":{"files":{"readme":"README-ja.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-04-03T02:20:57.000Z","updated_at":"2024-11-15T02:13:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"22571d12-12d2-4ce6-a846-9d4c3d40dcf6","html_url":"https://github.com/fixstars/amplify-benchmark","commit_stats":null,"previous_names":["fixstars/amplify-benchmark"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fixstars%2Famplify-benchmark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fixstars%2Famplify-benchmark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fixstars%2Famplify-benchmark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fixstars%2Famplify-benchmark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fixstars","download_url":"https://codeload.github.com/fixstars/amplify-benchmark/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248675393,"owners_count":21143768,"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":["benchmark","fixstars-amplify","framework","ising","python","quantum","qubo"],"created_at":"2025-02-21T15:52:54.459Z","updated_at":"2025-04-13T07:16:48.498Z","avatar_url":"https://github.com/fixstars.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fixstars Amplify Benchmark\n\n[![Fixstars](https://img.shields.io/badge/-Fixstars-333333.svg?logo=data:image/png;base64,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\u0026style=popout-square)](https://www.fixstars.com/)\n[![Fixstars Amplify](https://img.shields.io/badge/-Fixstars%20Amplify-333333.svg?logo=data:image/png;base64,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\u0026style=popout-square)](https://amplify.fixstars.com/)\n[![README.md](https://img.shields.io/badge/EN-README.md-blue)](README.md)\n\n## Amplify Benchmark とは？\n\nFixstars Amplify Benchmark は二次計画問題 (QUBO) の求解性能のベンチマークを行うフレームワークです。ベンチマークの実行を担うコマンドラインインターフェースとベンチマーク問題の定義を提供します。\n\nバックエンドに [Fixstars Amplify SDK](https://amplify.fixstars.com/sdk) が用いられているため、量子アニーリングマシン、イジングマシン、数理最適化ソルバー等、数多くのソルバーを用いてベンチマークを実行することが可能です。ベンチマークは、対象の問題とその実行回数、使用するソルバーを指定したジョブが定義されるジョブセットファイルに基づいて実行されるため、実行から結果の取得までを自動で容易に行うことが出来ます。\n\nこのライブラリの実行結果を [Amplify Benchmark Viewer](https://github.com/fixstars/amplify-benchmark-viewer) で読み込むことで、結果を WEB ブラウザ上で可視化することが出来ます。Amplify AE を対象としたベンチマーク結果のデモは[こちら](https://amplify.fixstars.com/benchmark/)です。\n\n### 特徴\n\n* 実行が容易\n* 並列実行\n* 自動評価と解析\n* ベンチマーク結果ビューアを提供\n* カスタマイズ可能なソルバーと問題パラメータ\n* 複数のベンチマークセットに対する定式化が定義済み\n* ユーザ定義問題を追加可能\n\n### 事前定義済みベンチマークセット\n\n* 巡回セールスマン問題: [TSPLIB](http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/)\n* 二次割当問題: [QAPLIB](https://coral.ise.lehigh.edu/data-sets/qaplib/)\n* 最大カット問題: [Gset](https://web.stanford.edu/~yyye/yyye/Gset/)\n* 容量制約付き配車ルート問題: [CVRPLIB](http://vrp.galgos.inf.puc-rio.br/index.php/en/)\n* 二次計画問題: [QPLIB](https://qplib.zib.de/)\n* 数独 (ペンシルパズル)\n\nAmplify SDK により対応するソルバー:\n\n* [Fixstars Amplify AE](https://amplify.fixstars.com/)\n* [D-Wave Advantage](https://www.dwavesys.com/solutions-and-products/systems/)\n* [Fujitsu Digital Annealer 3/4](https://www.fujitsu.com/global/services/business-services/digital-annealer/)\n* [Toshiba SQBM+](https://www.global.toshiba/ww/products-solutions/ai-iot/sbm.html)\n* [Gurobi Optimizer](https://www.gurobi.com/solutions/gurobi-optimizer/)\n* ([その他 Amplify SDK が対応するクライアント](https://amplify.fixstars.com/docs/client.html))\n\n## Gallery\n\n|              Objective value for execution time              |                     Time To Solution (TTS)                      |\n| :----------------------------------------------------------: | :-------------------------------------------------------------: |\n| \u003cimg src=\"docs/screenshots/target_energy.png\" width=\"600px\"\u003e | \u003cimg src=\"docs/screenshots/time_to_solution.png\" width=\"600px\"\u003e |\n\n|         Probability of obtaining a feasible solution         |        Probability of obtaining the best solution Rate         |\n| :----------------------------------------------------------: | :------------------------------------------------------------: |\n| \u003cimg src=\"docs/screenshots/feasible_rate.png\" width=\"600px\"\u003e | \u003cimg src=\"docs/screenshots/reach_best_rate.png\" width=\"600px\"\u003e |\n\n|                      Table DATA                       |\n| :---------------------------------------------------: |\n| \u003cimg src=\"docs/screenshots/table.png\" width=\"1225px\"\u003e |\n\n## 始め方\n\n### インストール\n\nAmplify benchmark は Python (\u003e=3.8) ライブラリとして提供されています。次のようにして pip でインストール出来ます。\n\n```bash\n$ pip install amplify-bench\n```\n\n### サンプルセットの実行\n\nインストール後、`amplify-bench` コマンドが有効になります。\n\n```bash\n$ amplify-bench --help\nUsage: amplify-bench [OPTIONS] COMMAND [ARGS]...\n\nOptions:\n  --help  Show this message and exit.\n\nCommands:\n  download  Download all supported instance files in the specified...\n  run       QUBO Benchmark\n  stats     Generate QUBO benchmark stats data.\n```\n\nベンチマークを実行するためには、ベンチマーク定義 (以下、ジョブセット) ファイルを作成する必要があります。[`example/benchmark.yml`](example/benchmark.yml) ファイルはジョブセットファイルの例が記述されています。\n\n[`example/benchmark.yml`](example/benchmark.yml)\n\n```yaml\njobs:\n  - problem:\n      class: Tsp\n      instance: eil51\n    client:\n      - FixstarsClient\n      - token: INPUT_API_TOKEN\n        parameters:\n          timeout: 3000\n    num_samples: 2\n```\n\nベンチマークジョブセットファイルには YAML あるいは JSON ファイル形式でベンチマークジョブのリストを記述します。ジョブは実行回数、ベンチマーク対象の問題リスト、実行する [Client クラス](https://amplify.fixstars.com/docs/client.html) に与える設定値で構成されています。このジョブセットの場合、次のベンチマークジョブで構成されます。\n\n* 対象の問題\n    * `TSPLIB`: `eil51` instance\n* 実行回数: 2\n* 実行するクライアント: [`FixstarsClient`](https://amplify.fixstars.com/docs/client.html#fixstars)\n    * `token`: INPUT_API_TOKEN\n    * `parameter.timeout`: 3000\n\nそれでは、このジョブセットファイルを用いてベンチマークを実行してみましょう。`amplify-bench` コマンドの `run` サブコマンドにジョブセットファイルのパス与えて実行します。\n\n\u003e **Note**\n\u003e `INPUT_API_TOKEN` を自身の API トークンで置き換えてください。トークンを未入手の場合は、[Amplify WEBサイト](https://amplify.fixstars.com/) にアクセスし、[アカウントを作成](https://amplify.fixstars.com/ja/register)してください。\n\n```bash\n$ amplify-bench run benchmark.yml\ninput_json: benchmark.yml\nlabel: 20230803_223440\noutput: None\nparallel: 1\naws_profile: None\ndry_run: False\ncli_benchmark_impl() 20230803_223440\n2023-08-03 22:34:41,308 [pid:94470] [INFO]:    542.49 ms in amplify_bench.cli.parser.parse_input_data\n2023-08-03 22:34:41,309 [pid:94470] [INFO]: make model of eil51\n2023-08-03 22:34:41,519 [pid:94470] [INFO]:    209.08 ms in amplify_bench.problem.tsp.make_tsp_model\ntotal jobs:  2\nsuccess jobs:  2\nerror jobs:  0\nJobs not yet started:  0\n```\n\n実行が完了すると、デフォルトでは入力ファイルと同じディレクトリに実行結果として JSON ファイルが出力されます。ファイル名には実行時刻が付与されます。出力ファイルパスは `--output \u003cpath\u003e` オプションで変更が可能です。\n\n### Amplify Benchmark Viewer を用いた結果の可視化\n\n実行結果は [Amplify Benchmark Viewer](https://github.com/fixstars/amplify-benchmark-viewer) で可視化することが出来ます。[Amplify Benchmark Viewer](https://github.com/fixstars/amplify-benchmark-viewer) で読み込むには `stas` サブコマンドに実行結果のファイル、あるいはディレクトリを与えて解析します。\n\n```bash\n$ amplify-bench stats preset_20230803_223440.json\n```\n\nデフォルトではカレントディレクトリに `report/data.json` ファイルが作成されます。出力ファイルのパス・ディレクトリは `--output` オプションで変更が可能です。\n\n作成した `report/data.json` ファイルを Amplify Benchmark Viewer の [GitHub pages](https://fixstars.github.io/amplify-benchmark-viewer/) にドラッグ\u0026ドロップすることで、結果を可視化出来ます。\n\n\u003e **Note**\n\u003e データはブラウザ上で展開され、サーバには保存されません。\n\n| Drag and Drop `data.json` file                        | Show the evaluated problem list                             | The detailed evaluation for each problem               |\n| ----------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------ |\n| \u003cimg src=\"docs/screenshots/upload.png\" width=\"600px\"\u003e | \u003cimg src=\"docs/screenshots/problem_list.png\" width=\"600px\"\u003e | \u003cimg src=\"docs/screenshots/problem.png\" width=\"600px\"\u003e |\n\n## 高度な使い方\n\n### ジョブセットファイルの書き方\n\n#### `JobsetObject`\n\nジョブセットファイルには下記のキーを持つ JSON オブジェクトを記述します。ジョブセットファイルのスキーマは [`amplify_bench/cli/schemas`](amplify_bench/cli/schemas) に記述されています。\n\n| key         | type               | description                                 |\n| ----------- | ------------------ | ------------------------------------------- |\n| `jobs`      | `array[JobObject]` | ベンチマークジョブのリスト                  |\n| `variables` | `object`           | ジョブで使用可能な変数の定義 (Optional)     |\n| `imports`   | `array[string]`    | ユーザー定義の問題のファイルパス (Optional) |\n\nファイルの中の `$` から始まる文字列は変数名として扱われます。最初に実行時の環境変数によって展開され、その後 `variables` キーに与えた変数定義が `jobs` 内で参照されます。例えば次のように全ての問題に共通する設定を与えるときに有用です。\n\n```yaml\nvariables:\n  CLIENT:\n    - FixstarsClient\n    - parameters:\n        timeout: 3000\njobs:\n  - problem:\n      class: Tsp\n      instance: eil51\n    client: $CLIENT\n    num_samples: 2\n  - problem:\n      class: Tsp\n      instance: burma14\n    client: $CLIENT\n    num_samples: 1\n```\n\n`imports`にはユーザー定義の問題ファイルのパスのリストを指定します。パスは本ジョブセットファイルからの相対パス、カレントディレクトリからの相対パス、または絶対パスで記載します。ユーザー定義の問題ファイルの詳細は[ユーザ定義問題の追加](#ユーザ定義問題の追加)を参照してください。\n\n#### `JobObject`\n\n| key           | type            | description                           |\n| ------------- | --------------- | ------------------------------------- |\n| `num_samples` | `int`           | 実行回数                              |\n| `client`      | `array`         | クライアントの設定                    |\n| `problem`     | `ProblemObject` | 問題設定                              |\n| `matrix`      | `object[array]` | 変数の組合わせパターン定義 (Optional) |\n\n`num_samples` に 1 より大きな整数値を入れると同じ設定で複数回実行します。`matrix` キーには後述する変数の組合わせパターンを設定します。\n\n`client` キーには長さ2の配列を与えます。第一要素にクライアントクラス名を指定し、第二要素にはクライアントクラスのプロパティ値をオブジェクトで与えます。例えば、次の Amplify SDK におけるクライアント設定に対して、\n\n```python\nfrom amplify.client import FixstarsClient\n\nclient = FixstarsClient()\nclient.token = \"INPUT_API_TOKEN\"\nclient.parameters.timeout = 1000\n```\n\n以下のようにジョブセットファイルに記述します。\n\n```yaml\njobs:\n  - client:\n      - FixstarsClient\n      - token: INPUT_API_TOKEN\n        parameters:\n          timeout: 1000\n```\n\n\u003e **Note**\n\u003e それぞれの `Client` クラスにおける設定可能なプロパティ値は [ドキュメント](https://amplify.fixstars.com/ja/docs/client.html) を参照してください。\n\n#### `ProblemObject`\n\n`problem` キーには以下のキーで構成されるオブジェクトを与えます。\n\n| key          | type     | description      |\n| ------------ | -------- | ---------------- |\n| `class`      | `string` | 問題クラス名     |\n| `instance`   | `string` | インスタンス名   |\n| `parameters` | `object` | 定式化パラメータ |\n\n`class` には [`amplify_bench/problem`](amplify_bench/problem) に含まれる問題クラス名を指定します。フレームワークにで事前に定義されている問題クラスは、`Tsp` (TSPLIB), `Qap` (QAPLIB), `Cvrp` (CVRPLIB), `MaxCut` (GSET), `Sudoku`, `Qplib` (QPLIB) です。`instance` にはそれぞれの問題クラスに対応する問題セットに含まれるインスタンス名を記述します。詳細は [`amplify_bench/problem/data`](amplify_bench/problem/data) を参照してください。問題クラスにはコンストラクタに与える定式化のパラメータを指定出来ることがあり、`parameter` で指定します。\n\n#### マトリックス変数を用いた自動ジョブ生成\n\n一つのジョブ定義に与えた複数の変数パターンの全ての組合わせに対して複数のジョブを自動的に生成することが出来ます。例えば、複数のインスタンスと複数の実行時間にする全ての組合わせに対して実行する場合、次のように記述します。\n\n```yaml\nvariables:\n  NUM_SAMPLES: 100\n  FIXSTARS:\n    - FixstarsClient\n    - token: INPUT_API_TOKEN\n      parameters:\n        timeout: $TIMEOUT\njobs:\n  - problem:\n      class: Qap\n      instance: $INSTANCE\n    client: $FIXSTARS\n    num_samples: $NUM_SAMPLES\n    matrix:\n      INSTANCE:\n        - esc32a\n        - sko56\n      TIMEOUT:\n        - 10000\n        - 30000\n```\n\n`matrix` には変数名をキーにして、値を配列で与えます。この場合、`esc32a` と `sko56` それぞれに対して、`timeout` が `10000` と `30000` のジョブが生成されます。`variables` に定義されている変数の中で `matrix` に与えている変数を参照できることに注意してください。\n\n\u003e **Note**\n\u003e 変数の参照は再帰的に行われますが、無限ループが発生するとエラーになります。\n\n### ユーザ定義問題の追加\n\nユーザが定義した定式化をベンチマーク問題として追加することが出来ます。\n\n次の例では `mytsp.py` ファイルで定義された `MyTsp` クラスに対するベンチマークが実行されます。`imports` キーには問題クラスが定義されたファイルパスを指定します。ファイルパスは絶対パスあるいはジョブセットファイルまたはカレントディレクトリからの相対パスで指定してください。\n\n```yaml\nimports:\n  - mytsp.py\njobs:\n  - problem:\n      class: MyTsp\n      instance: random8\n```\n\n\u003e **Note**\n\u003e ユーザ定義のクラス名はフレームワークに内蔵の問題クラスと重複しないようにしてください。\n\n問題クラスは `Problem` クラスを継承し、コンストラクタ (`__init__`) と `make_model` と `evaluate` メソッドを実装する必要があります。`make_model` メソッドはAmplify SDK を用いた定式化を、`evaluate` メソッドは解を入力として、定式化したモデルに対する評価を行います。\n\n次のコードは `MyTsp` 問題クラスの例です。\n\n`mytsp.py`\n\n```python\nclass MyTsp(Problem):\n    def __init__(\n        self,\n        instance: str,\n        constraint_weight: float = 1.0,\n        seed: int = 0,\n    ):\n        super().__init__()\n        self._instance: str = instance\n        self._problem_parameters[\"constraint_weight\"] = constraint_weight\n        if instance.startswith(\"random\"):\n            self._problem_parameters[\"seed\"] = seed\n        self._symbols = None\n\n        ncity, distances, locations, best_known = self.__load(self._instance, seed)\n        self._ncity = ncity\n        self._distances = distances\n        self._locations = locations  # not used\n        self._best_known = best_known\n\n    def make_model(self):\n        symbols, model = make_tsp_model(self._ncity, self._distances, self._problem_parameters[\"constraint_weight\"])\n        self._symbols = symbols\n        self._model = model\n\n    def evaluate(self, solution: SolverSolution) -\u003e Dict[str, Union[None, float, str]]:\n        value: Optional[float] = None\n        path: str = \"\"\n\n        if solution.is_feasible:\n            spins = solution.values\n            variables = np.array(self._symbols.decode(spins))  # type: ignore\n            index = np.where(variables == 1)[1]\n            index_str = [str(idx) for idx in index]\n            value = calc_tour_dist(list(index), self._distances)\n            path = \" \".join(index_str)\n        else:\n            pass\n\n        return {\"label\": \"total distances\", \"value\": value, \"path\": path}\n...\n```\n\n#### コンストラクタ\n\n```python\ndef __init__(self, instance: str, **kwargs) -\u003e None\n```\n\nコンストラクタの引数は少なくとも `instance: str` 引数を受け取る必要があります。それ以外で、例えばコンストラクタの引数に `constraint_weight: float` を追加した場合は、`ProblemObject` の `parameters` キーには `constraint_weight` が指定可能になります。\n\n#### `make_model` メソッド\n\n```python\ndef make_model(self) -\u003e None\n```\n\n`make_model` メソッドは定式化を行い `self._model` に`amplify.BinaryQuadraticModel` クラスのインスタンスを格納する責務があります。\n\n#### `evaluate` メソッド\n\n```python\ndef evaluate(self, solution: amplify.SolverSolution) -\u003e Dict[str, Union[None, float, str]]\n```\n\n`evaluate` メソッドは `amplify.SolverSolution` を受け取り解の評価を行います。返り値は `Dict[str, Union[None, float, str]]` として任意のキーと値を返すことが出来ます。返り値はベンチマーク結果の JSON ファイルにおいて `objective_value` キーに出力されます。\n\n## プロジェクトへのコントリビューション\n\nAmplify Benchmark はオープンソースプロジェクトです。バグの報告や機能の追加、ドキュメントの改善等、コントリビューションを歓迎します。\n\n## 開発元\n\n関連プロジェクト:\n\n* [Fixstars Amplify SDK](https://amplify.fixstars.com/sdk)\n* [Fixstars Amplify Annealing Engine](https://amplify.fixstars.com/engine)\n* [Fixstars Amplify Benchmark Viewer](https://github.com/fixstars/amplify-benchmark-viewer)\n\n\u003cdiv align=\"left\"\u003e\n  \u003ca href=\"https://www.fixstars.com/\" target=\"_blank\" rel=\"nofollow noreferrer\"\u003e\n    \u003cimg\n      height=\"85\"\n      src=\"docs/logos/fixstars-logo.svg\"\n      alt=\"Fixstars logo\"\n    \u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://amplify.fixstars.com/\" target=\"_blank\" rel=\"nofollow noreferrer\"\u003e\n    \u003cimg\n      height=\"86\"\n      src=\"docs/logos/amplify-logo.svg\"\n      alt=\"Fixstars Amplify logo\"\n    \u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffixstars%2Famplify-benchmark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffixstars%2Famplify-benchmark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffixstars%2Famplify-benchmark/lists"}