QCalibrate remote interface
Project description
A client library for runnig a custom optimisation with qcalibrate software
Note
The API is experimental and subject to change without a prior notice
Description
The qcalibrateremote package provides interface to QCalibrate optimisation service
Currently two modes are supported.
pure parameter optimisation
Random chopped base PWC function optimization
Examples
Use Web UI to create an experiment and define optimization parameters.
Parameter optimisation
# import dependencies
from typing import Dict
from qcalibrateremote import (
EvaluateFigureOfMerit,
FigureOfMerit,
create_optimizer_client,
)
# setup client connection (copy form web UI: https://www.qcalibrate.staging.optimal-control.net:31603)
experiment_id="0xabcd"
token=("ey...")
optimizer_client = create_optimizer_client(
host="grpc.qcalibrate.staging.optimal-control.net", port=31603, token=token)
# define infidelity evaluation class
class DistanceFom(EvaluateFigureOfMerit):
def __init__(self, *args, **kwargs) -> None:
super().__init__()
def infidelity(self, param1, param2) -> float:
return (param1 - 0.55)**2 + (param2 - 0.33)**2
def evaluate(self, parameters: Dict[str, float], **kwargs) -> FigureOfMerit:
"""Abstract method for figure of merit evaluation"""
# print(parameters)
return FigureOfMerit(self.infidelity(**parameters), '')
# run optimisation
optimisation_result = optimizer_client.run(experiment_id=experiment_id, evaluate_fom_class=DistanceFom)
# best fiting parameters
optimisation_result.top[0].parameters
Pulse optimisation
# import dependencies
from typing import Dict
from qcalibrateremote import (
EvaluateFigureOfMerit,
FigureOfMerit,
create_optimizer_client,
Pulse,
)
# setup client connection (copy form web UI: https://www.qcalibrate.staging.optimal-control.net:31603)
experiment_id="0xabcd"
token=("ey...")
optimizer_client = create_optimizer_client(
host="grpc.qcalibrate.staging.optimal-control.net", port=31603, token=token)
# define infidelity evaluation class
def expected_pulse(t):
return np.sin(2*np.pi*t)**4
class SineFom(EvaluateFigureOfMerit):
def evaluate(self, parameters: Dict[str, float], pulses: Dict[str, Pulse], **kwargs) -> FigureOfMerit:
pulse1 = pulses["pulse1"]
inf = np.sum((expected_pulse(pulse1.times) - pulse1.values)**2)
return FigureOfMerit(inf, '{}')
# run optimisation
optimisation_result = optimizer_client.run(experiment_id=experiment_id, evaluate_fom_class=SineFom)
# plot best fiting pulse
pulse1 = optimisation_result.top[0].pulses["pulse1"]
import matplotlib.pyplot as plt
plt.plot(pulse1.times, expected_pulse(pulse1.times))
plt.plot(pulse1.times, pulse1.values)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
qcalibrateremote-0.1.4.tar.gz
(40.4 kB
view hashes)
Built Distribution
Close
Hashes for qcalibrateremote-0.1.4-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2f51bc0794b80a8e69346dc2259b5099fed841e1d587b9ef636588a65298c8f1 |
|
MD5 | 2c218850e55b764fe8f1cbb98a65b91e |
|
BLAKE2b-256 | 90b0c5ca0a50cc1ad9c8830752b39bb73e04908d3b48f612732e79e15838e853 |