Amplify

シンプルでシームレスな
量子プログラミング体験を。

量子プログラミングミドルウェア「Amplify」

製品紹介

Amplifyは、複雑で専門性の高い開発プロセスの負荷を低減し、アプリケーションの開発を効率化するミドルウェアです。Amplifyをベースに作られたアプリケーションは、再実装することなく、Optiganを含む他社の量子コンピュータやアニーリングマシン上でも動かすことができます。

ワークフロー

量子プログラミングをより直感的に

現在開発が進められている量子アニーリングマシンは機種によってハードウェアの仕様や制約条件が異なります。
現在はこれらを理解した上でマシンを使用する必要があり、そのためには定式化、論理モデルへの変換、物理モデルへの変換、マシン実行といったステップを踏まなければなりません。
Amplifyは論理モデル、物理モデルの変換とマシン実行を自動化することで、より直観的な量子プログラミングのワークフローを実現しています。

通常アニーリングマシンのプログラミング

課題を定式化
Step1.
課題を定式化

マシンのSDKやAPI仕様に合わせて物理モデルをデータ化

論理モデルへ変換
Step2.
論理モデルへ変換

目的関数をマシンの動作モデルで再定義

物理モデルへ変換
Step3.
物理モデルへ変換

マシン仕様や制約を考慮した物理モデルに再変換

マシンにデータを入力
Step4.
マシンにデータを入力

マシンのSDKやAPI仕様に合わせて物理モデルをデータ化

マシンを実行
Step5.
マシンを実行

1つのマシンを使う

Amplifyを用いたアニーリングマシンのプログラミング

課題を定式化
Step1.
課題を定式化

定式化された数式をプログラムコードで表現

Amplify
 
 

ミドルウェアの提供するAPIが自動で各マシンの入力可能な形式への多段変換と実行結果の逆変換を行い、ユーザにとって結果の解釈が容易な形で返却。

マシンを実行
Step2.
マシンを実行

複数のマシンを切り替えながら実行
 

機能紹介

アニーリングの実行

様々な入力形式や制約条件と実行マシンを組み合わせることで、簡単にアニーリングの実行が可能です。

各マシンへの入力に伴う複雑なモデル変換や出力結果の逆変換はミドルウェアが解決します。

# 入力モデルの構築
q = gen_symbols(BinaryPoly, 2)
f = 1 - q[0] * q[1]
 
# 実行マシンの設定
client = FixstarsClient()
client.url = "http://xxx.xxx.xxx.xxx"
 
# アニーリングの実行
s = Solver(client)
result = s.solve(f)
values = result.solutions[0].values
 
# 結果の解釈
solution = decode_solution(q, values)
 
>>> print(f"result: {q} = {solution}")
result: [q_0, q_1] = [1, 1]

マシンの対応に依らず多様な数式の取り扱いが可能になります。また通常のアニーリングマシンでは対応の難しい高次多項式の入力にも対応しています。

バイナリ多項式

q = gen_symbols(BinaryPoly, 3)
f = 1 - q[0] * q[1] + q[2]
>>> f
- q_0 q_1 + q_2 + 1.000000

イジング多項式

s = gen_symbols(IsingPoly, 3)
f = 1 - s[0] * s[1] + s[2]
>>> f
- s_0 s_1 + s_2 + 1.000000

バイナリ行列

q = BinaryMatrix(4)
>>> q
[[0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0, 0]]

イジング行列

q = IsingMatrix(4)
>>> q
[[0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0, 0]]

高次バイナリ多項式

q = gen_symbols(BinaryPoly, 3)
f = q[0] * q[1] * q[2] + q[0] * q[0]
>>> f
q_0 q_1 q_2 + q_0

高次イジング多項式

s = gen_symbols(IsingPoly, 3)
f = s[0] * s[1] * s[2] + s[0] * s[0]
>>> f
s_0 s_1 s_2 + 1.000000

論理式

x = gen_symbols(LogicPoly, 3)
f = (x[0] | x[1]) & (x[1] | x[2])
>>> f
- x_0 x_1 x_2 + x_0 x_2 + x_1

バイナリ・イジング変数多項式に対する四則演算やそれぞれの代数法則に特化した高速数式処理を行います。また、数式を自然な形で表現するために便利な関数が用意されています。

$$ f=\displaystyle\sum_{i=0}^{n-1}q_i $$

                  q = gen_symbols(BinaryPoly, 8)  # バイナリ変数を8個生成
f = sum_poly(q)                 # 全ての変数の総和を取る
>>> f
q_0 + q_1 + q_2 + q_3 + q_4 + q_5 + q_6 + q_7

$$ f=\displaystyle\sum_{i=0}^{n-1}\displaystyle\sum_{j=0}^{n-1}q_i q_j $$

                  q = gen_symbols(BinaryPoly, 3)  # バイナリ変数を3個生成
f = sum_poly(3, lambda i:       # 全ての変数の組合せの和を取る
        sum_poly(3, lambda j: q[i] * q[j]))
>>> f
2.0 q_0 q_1 + 2.0 q_0 q_2 + 2.0 q_1 q_2 + q_0 + q_1 + q_2

$$ f=\displaystyle\sum_{i=0}^{n-1}\bigg(\displaystyle\sum_{j=0}^{n-1}q_{ij} -1\bigg)^2 $$

                  q = gen_symbols(BinaryPoly, 2, 2)  # 2x2バイナリ変数を生成
f = sum_poly(2, lambda i: (        # 2乗や四則演算を含む数式の二重和
        sum_poly(2, lambda j: q[i][j]) - 1) ** 2)
>>> f
2.0 q_0 q_1 + 2.0 q_2 q_3 - q_0 - q_1 - q_2 - q_3 + 2.0

入力変数間に働く制約条件を抽象化し、アニーリングマシンで実行するためのペナルティ関数の生成や結果の制約充足チェックなどを自動処理します。ユーザは煩雑になりがちな制約条件式の管理の必要がなくなります。

最小値制約

$$ f = 0 \space {\rm for} \space \min f = 0 $$

                  q = gen_symbols(BinaryPoly, 2)  # バイナリ変数を2個生成
penalty(q[0] * q[1])        # 最小値制約 q_0 q_1 = 0

等式制約

$$ f = k $$

                  q = gen_symbols(BinaryPoly, 8)  # バイナリ変数を8個生成
equal_to(sum_poly(q), 1)        # 等式制約 \sum q = 1

不等式制約

$$ f \le k $$

                  q = gen_symbols(BinaryPoly, 3)  # バイナリ変数を3個生成
less_equal(3 * q[0] + 2 * q[1] + q[2], 3) # 最小値制約 3 * q[0] + 2 * q[1] + q[2] <= 3

公開されているほぼ全てのアニーリングマシンに対応しています。共通ドライバを提供することで、それぞれのマシンのハードウェア仕様やインターフェースの仕様の違いを吸収します。これにより簡便かつ最小限の変更でマシンの切り替えが可能です。

# Fistars Optigan を使用する例
client = FixstarsClient()
 
# D-Wave 2000Q を使用する例
client = DWaveClient()
 
# 富士通デジタルアニーラを使用する例
client = FujitsuDASolverClient()
 
# 東芝SBMを使用する例
client = ToshibaClient()
 
# ソルバーに使用マシンを設定
s = Solver(client)

対応マシン

D-Wave 2000Q
D-Wave
2000Q
デジタルアニーラ
富士通
デジタルアニーラ
東芝シミュレーテッド 分岐マシン
東芝
SBM
CMOS アニーリングマシン
CMOS
アニーリングマシン
Fixstars Optigan
Fixstars
Optigan

スペック

対応言語

Python 3.6 - 3.8

C++17

動作環境

Ubuntu 16.04 18.04 20.04 CentOS 7/8

Windows 10(WSL)

macOS Catalina

対応マシン

Fujitsu DA/DA2

D-wave / Leap Hybird

Toshiba SBM

Hitachi CMOS

Fixstars GPU

定式化

QUBO多項式

QUBO行列

Ising多項式

Ising行列

論理式

高次多項式(Binary / Ising)

制約式管理(Binary)

グラフ埋め込み

完全グラフ

スパースグラフ

使用方法

GPUベースのアニーリングマシン「Optigan」は、ミドルウェアの「Amplify」とともに使用することで開発効率を飛躍的に高め、その性能を余すところなく発揮することができます。 また「Amplify」をベースに作られたアプリケーションは、再実装することなく、他社の量子コンピュータやアニーリングマシン上でも動かすことができます。

まずは無料ウェブ体験版をお試しいただくか、弊社担当までお問い合わせください。