From d41dc232b7c8bbba725ec99a422876dd514f75c4 Mon Sep 17 00:00:00 2001 From: Julien Gacon Date: Sat, 30 Jan 2021 17:12:24 +0100 Subject: [PATCH] Update plot to seaborn, add QAOA example --- benchmarks/benchmark.py | 23 ++++---- benchmarks/featuremap.py | 2 +- benchmarks/maxcut.py | 66 ++++++++++++++++++++++ data/good/efficient_su2_q3_r4_128_a50.npy | Bin 1637 -> 0 bytes data/good/efficient_su2_q5_r8_128_a24.npy | Bin 920 -> 0 bytes gradients/circuit_gradients.py | 3 +- gradients/split_circuit.py | 16 ++++-- img/efficient_su2.pdf | Bin 0 -> 19769 bytes img/good/efficient_su2_q3_r4_128_a50.pdf | Bin 17987 -> 0 bytes img/good/efficient_su2_q5_r8_128_a24.pdf | Bin 17127 -> 0 bytes img/qaoa.pdf | Bin 0 -> 19909 bytes img/vqc.pdf | Bin 0 -> 19252 bytes main.py | 33 +++++++++-- 13 files changed, 121 insertions(+), 22 deletions(-) create mode 100644 benchmarks/maxcut.py delete mode 100644 data/good/efficient_su2_q3_r4_128_a50.npy delete mode 100644 data/good/efficient_su2_q5_r8_128_a24.npy create mode 100644 img/efficient_su2.pdf delete mode 100644 img/good/efficient_su2_q3_r4_128_a50.pdf delete mode 100644 img/good/efficient_su2_q5_r8_128_a24.pdf create mode 100644 img/qaoa.pdf create mode 100644 img/vqc.pdf diff --git a/benchmarks/benchmark.py b/benchmarks/benchmark.py index aadf4bb..21b8be0 100644 --- a/benchmarks/benchmark.py +++ b/benchmarks/benchmark.py @@ -73,11 +73,13 @@ def run_benchmark(self, library_circuit, target_parameters='all', filename=None) args = self.nreps * [(ansatz, operator, state_in, free_parameters, parameter_binds)] - # all_results = [] - # for i, arg in enumerate(args): - # all_results.append(single_run(arg)) - with Pool(processes=NUM_PROCESSES) as pool: - all_results = pool.map(single_run, args) + if NUM_PROCESSES == 1: + all_results = [] + for i, arg in enumerate(args): + all_results.append(single_run(arg)) + else: + with Pool(processes=NUM_PROCESSES) as pool: + all_results = pool.map(single_run, args) # extract the results grad_runtimes, itgrad_runtimes = [], [] @@ -129,11 +131,12 @@ def plot(self, filename=None, saveas=None, show=False, cutoffs=None): else: data = self.load_benchmark(filename) - colors = ['tab:blue', 'tab:orange'] + plt.style.use('seaborn') + colors = ['tab:blue', 'tab:green'] markers = ['o', '^'] linestyles = ['--', ':'] methods = ['grad', 'itgrad'] - labels = ['reference', 'reverse mode'] + labels = ['standard', 'reverse mode'] if cutoffs is None: cutoffs = [0, 0] @@ -166,16 +169,16 @@ def plot(self, filename=None, saveas=None, show=False, cutoffs=None): handles, labels = plt.gca().get_legend_handles_labels() order = [2, 3, 0, 1] - plt.legend([handles[idx] for idx in order], [labels[idx] for idx in order], loc='best', - ncol=2) + plt.legend([handles[idx] for idx in order], [labels[idx] for idx in order], + loc='upper left', ncol=2) # plt.legend(loc='best', ncol=2) plt.xticks([50, 100, 500], [r'$0.5 \cdot 10^2$', r'$10^2$', r'$0.5 \cdot 10^3$']) if saveas is None: saveas = f'ep_r{self.num_reps[0]}_{self.num_reps[-1]}.pdf' - plt.grid() plt.savefig('img/' + saveas, bbox_inches='tight') + plt.ylim(top=1e4) if show: plt.show() diff --git a/benchmarks/featuremap.py b/benchmarks/featuremap.py index 52cf681..e3a8434 100644 --- a/benchmarks/featuremap.py +++ b/benchmarks/featuremap.py @@ -61,6 +61,6 @@ def _build(self): def run_featuremap(): circuit = Classification(4) - benchmark = Benchmark(2 ** np.arange(2, 5), H, 10) + benchmark = Benchmark(2 ** np.arange(2, 8), H, 24) benchmark.run_benchmark(circuit, 'free') benchmark.plot(show=True) diff --git a/benchmarks/maxcut.py b/benchmarks/maxcut.py new file mode 100644 index 0000000..c634ac7 --- /dev/null +++ b/benchmarks/maxcut.py @@ -0,0 +1,66 @@ +"""Maxcut example.""" + +import numpy as np +from qiskit.algorithms.minimum_eigen_solvers.qaoa.var_form import QAOAVarForm +from qiskit.circuit import QuantumCircuit, ParameterVector +from qiskit.circuit.parametertable import ParameterTable +from qiskit.opflow import Z, I, H + +from .benchmark import Benchmark + +class QAOAAnsatz(QuantumCircuit): + """QAOA ansatz as a quantum circuit.""" + + def __init__(self, operator, reps=1): + self._reps = reps + self._operator = operator + super().__init__(operator.num_qubits) + self._build() + + @property + def reps(self): + """Get the number of repetitions of the circuit.""" + return self._reps + + @reps.setter + def reps(self, value): + """Set the number of repetitions. Rebuilds the circuit.""" + self._reps = value + self._build() # rebuild + + def assign_parameters(self, params, inplace=False): + """Assign parameters.""" + if isinstance(params, (list, np.ndarray)): + params = dict(zip(self._params[:], params)) + + return super().assign_parameters(params, inplace=inplace) + + @property + def ordered_parameters(self): + return self._params[:] + + def _build(self): + # wipe current state + self._data = [] + self._parameter_table = ParameterTable() + + # get QAOA circuit + qaoa = QAOAVarForm(self._operator, self._reps) + params = ParameterVector('th', qaoa.num_parameters) + circuit = qaoa.construct_circuit(params) + + # store the parameters in a list for assigning them + self._params = params + + + # combine the circuit + self.compose(circuit, inplace=True) + + +def run_maxcut(): + operator = (I ^ I ^ Z ^ Z) + (I ^ Z ^ I ^ Z) + (Z ^ I ^ I ^ Z) + (I ^ Z ^ Z ^ I) + circuit = QAOAAnsatz(operator) + + benchmark = Benchmark(2 ** np.arange(2, 8), H, 24) + benchmark.run_benchmark(circuit, 'free') + benchmark.plot(show=True) diff --git a/data/good/efficient_su2_q3_r4_128_a50.npy b/data/good/efficient_su2_q3_r4_128_a50.npy deleted file mode 100644 index c22acdca463d97d98542e5cf7e9adb1753cbb92e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1637 zcmbu8ZBSHI7{_--fmS0mQ%nLhYcFc#TS~s&Lzt+`i#}$qB;jTE!h-BB|GRg!RaWtZ zqo{bd7k?} z|MS0F^5*8wns2o%wk)%|^?=K;Pe`>_<=aQ3+DrU~X=uJ8zv0%q@HDL=pbH-GXqCFy zD`_KA!>Rvo*{Wk)zM!`azsz@=4ah7J8aQgKNJ21vz; zgn@r6o`lE$sn}v-P;pj#+JgFv-zImcNaA>cknHL28JHD6My$A#cU7ctq!I>8+PSn} zLe}|S3`01cBn*}GOmfYQocrkvPjNg=uuFRBu9CNW(<}ysBaJXj(w6MOD@LELU>MFZ zg7AzUIbpzbBfSvMDza$xyf)9+)fZKasxOOw1;dzb;go%>=@>Q&Rr)@ODB#z01DUuFP8FQhahY+fAFhZst zbjAwT%go3%ybwl~;t}>wjf$(kcvrcz=9-EZIi?Y^)KiV%JgH54)NpXZT1o5AT&9H%E zBcV>x8rQx7+YWXzyv|Wi*d%FtV@&^~SbbG$*=q6a-9U|S>RG(;73MM>?mgQ1aQ z8)3WbywO}axnSXbh9-_3gq@Oh8M!2JJHsxH-Gn`ocKy5)w~7gGa_lASlk}dlpng}< zVTS!2&4dGz+HN%ex@iA#hPOE0CcG0d=U`My$@$*xIT;~_LmY<*M`TOl=6kgJ*eZsj z9LESPk|rJSsBz2JGrY_39^rU&e0zNPt+oKe367J5Q<4_dbqoy!w=ulWahlL7X>)8* X-_rS;8P0HgK=@DuEU1|{Tb%wE<;XxS diff --git a/data/good/efficient_su2_q5_r8_128_a24.npy b/data/good/efficient_su2_q5_r8_128_a24.npy deleted file mode 100644 index f2a3abeda9b756246d7662a5a78334c990414f7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 920 zcmbu5O-vI}6oscPR2)Q*UlqjqM+bx=Du{^AC|H!SEj%3^kfu)Cfs#PmGo2x6pv0K? zh`7P9FiqTIPs3s>I7OYZm1yYJky7*qlSLk@0= zoA$=_Ow90hdAu_rZ?nfcnlem7OGZ*gTwlX}Z6c%FJd@DUy4?$n&7Pd+|BAouiY2Yd zbk-M38M<%MnlQ&T!_cyP#L#1@WX3eCn8|}ij>Zj9 z+{~tR9&Xjiaa^bq+hk65%%O;2yCAz%hfQa|2ZO=>-*&AZvS^|>dM}I}Ig|+MPFrHz zilj9|o77F+$Y5s}rGh*xF9rG?fq7?uFVxinTQ+8Bag^n-OHf^Qt4)oeJd6tAA8Tb| z+Jt8Cs7x?>qn)T?_NobLHtls|_uuw76MLdPMbDO&+@@3`VJ}53L0zIUQL{#yR{fqf z3HvDO3HCFpDDAzAsR0QdiUR}(8RfXLpURV@ghLdE365;ik-7!xp@aqsFM*)1?~*a& zXbhuCV4{Ub?;gC&eiLz&qM4wD(fsrLG~e<|gpZ}f6h*O|Uq6aC zOL2}sWJBy^=4Yi95fa6Df(wk=+8-sWwz(dPUV@8TTDREXl;Ef6Be=9hm-C@|370AQ z31mHC?|xM>l8N#R7P9xcT^x>C1HqSnBb;vS(=HFsP7N86C#rU diff --git a/gradients/circuit_gradients.py b/gradients/circuit_gradients.py index 1b1c15b..df931da 100644 --- a/gradients/circuit_gradients.py +++ b/gradients/circuit_gradients.py @@ -142,8 +142,7 @@ def _accumulate_product_rule(self, gradients): # pylint: disable=inconsistent-return-statements def _bind(circuits, parameter_binds, inplace=False): if not isinstance(circuits, list): - existing_parameter_binds = { - p: parameter_binds[p] for p in circuits.parameters} + existing_parameter_binds = {p: parameter_binds[p] for p in circuits.parameters} return circuits.assign_parameters(existing_parameter_binds, inplace=inplace) bound = [] diff --git a/gradients/split_circuit.py b/gradients/split_circuit.py index be9bd92..5d70b57 100644 --- a/gradients/split_circuit.py +++ b/gradients/split_circuit.py @@ -1,4 +1,4 @@ -from qiskit.circuit import QuantumCircuit, ParameterExpression +from qiskit.circuit import QuantumCircuit, ParameterExpression, Parameter def split(circuit, parameters='all', @@ -24,10 +24,18 @@ def split(circuit, parameters='all', params = op[0].params elif parameters == 'free': params = [param for param in op[0].params if isinstance(param, ParameterExpression)] - elif isinstance(parameters, ParameterExpression): - params = [parameters] if parameters in op[0].params else [] + elif isinstance(parameters, Parameter): + if op[0].definition is not None: + free_op_params = op[0].definition.parameters + else: + free_op_params = {} + params = [parameters] if parameters in free_op_params else [] elif isinstance(parameters, list): - params = [p for p in parameters if p in op[0].params] + if op[0].definition is not None: + free_op_params = op[0].definition.parameters + else: + free_op_params = {} + params = [p for p in parameters if p in free_op_params] else: raise NotImplementedError('Unsupported type of parameters:', parameters) diff --git a/img/efficient_su2.pdf b/img/efficient_su2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e7a639aed34471b89207dadef20de92fe0f9209c GIT binary patch literal 19769 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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 0f310bb..e98f43e 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,38 @@ """Script to run the benchmarks.""" +# pylint: disable=invalid-name + import sys +from benchmarks.benchmark import Benchmark from benchmarks.efficient_su2 import run_efficientsu2 from benchmarks.featuremap import run_featuremap +from benchmarks.maxcut import run_maxcut + +if len(sys.argv) < 2: + print('Please specify a benchmark to run. Available: efficientsu2 featuremap maxcut') + sys.exit() + +task = sys.argv[1] + +if task == 'plot': + if len(sys.argv) < 3: + print('To plot please specify the filename as second argument.') + sys.exit() + fname = sys.argv[2] -if len(sys.argv) != 2: - print('Please specify a benchmark to run. Available: efficientsu2 uccsd') + if len(sys.argv) > 3: + saveas = sys.argv[3] + else: + saveas = None -if sys.argv[1] == 'efficientsu2': +if task == 'efficientsu2': run_efficientsu2() -elif sys.argv[1] == 'featuremap': +elif task == 'featuremap': run_featuremap() +elif task == 'maxcut': + run_maxcut() +elif task == 'plot': + benchmark = Benchmark([0], None, None) + benchmark.plot(fname, saveas=saveas, show=True) else: - raise ValueError(f'Invalid benchmark name: {sys.argv[1]}') + raise ValueError(f'Invalid argument: {task}')