Skip to content

kotarot/sawatabi

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

sawatabi-logo

sawatabi

PyPI PyPI - Python Version GitHub repo size GitHub Workflow Status Codecov branch GitHub Code style: black

Sawatabi is an application framework to develop and run stream-data-oriented Ising applications with quantum annealing.

Visualization of a Sample Sawatabi Application

The animation shows visualization of Outlier Detection Problem and its solutions obtained by a Sawatabi application. The Ising fomulation for the Outlier Detection Problem proposed in [1] is used. The left figure represents continuous input event data (stream-data) where blue points mean normal values and red points mean abnormal values (outliers). The right figure represents solutions for Outlier Detection for each window of the input stream-data. The boxes try to cover only normal points as much as possible.

Outlier_Detection_JMA_Tokyo_202010_WINDOW

[1] V. N. Smelyanskiy, E. G. Rieffel, S. I. Knysh, C. P. Williams, M. W. Johnson, M. C. Thom, W. G. Macready, and K. L. Pudenz, "A near-term quantum computing approach for hard computational problems in space exploration," arXiv:1204.2821 [quant-ph], 2012. Available: https://arxiv.org/abs/1204.2821

Usage

Installation

pip install sawatabi

Sample Applications

This section only describes a sample application of NPP (Number Partition Problem), for other sample applications please see:
https://github.com/kotarot/sawatabi/tree/main/sample/algorithm

To run a sample NPP (Number Partition Problem) Sawatabi application on local environment

The following application reads numbers from a local file, run continuous annealing computations to solve NPP on local environment, and writes solutions to the stdout:

python sample/algorithm/npp_window.py --input="tests/algorithm/numbers_100.txt"

To run a sample NPP (Number Partition Problem) Sawatabi application on Google Cloud Dataflow using Google Cloud Pub/Sub

Please prepare your GCP service account credentials as ./gcp-key.json and open three terminals.

[1st terminal] The Pub/Sub publisher continuously publishes numbers to the specified Pub/Sub topic:

GOOGLE_APPLICATION_CREDENTIALS="./gcp-key.json" \
    python sample/pubsub/publish_pubsub.py \
        --project=<PROJECT> \
        --topic=<TOPIC> \
        --interval=1.0 \
        --random-number

where

  • <PROJECT> is your GCP project name, and
  • <TOPIC> is your Google Cloud Pub/Sub topic name to publish messages (numbers) to.

[2nd terminal] The Pub/Sub subscriber continuously subscribes solutions from the specified Pub/Sub subscription:

GOOGLE_APPLICATION_CREDENTIALS="./gcp-key.json" \
    python sample/pubsub/subscribe_pubsub.py \
        --project=<PROJECT> \
        --subscription=<SUBSCRIPTION>

where

  • <PROJECT> is your GCP project name, and
  • <SUBSCRIPTION> is your Google Cloud Pub/Sub subscription name to subscribe messages (solutions) from.

[3rd terminal] The following application reads numbers from the given Pub/Sub topic, run continuous annealing computations to solve NPP on Google Cloud Dataflow, and writes solutions to the given Pub/Sub topic:

GOOGLE_APPLICATION_CREDENTIALS="./gcp-key.json" \
    python sample/algorithm/npp_window.py \
        --project=<PROJECT> \
        --input-topic=<INPUT_TOPIC> \
        --output-topic=<OUTPUT_TOPIC> \
        --dataflow \
        --dataflow-bucket=<DATAFLOW_BUCKET>

where

  • <PROJECT> is your GCP project name,
  • <INPUT_TOPIC> is your Google Cloud Pub/Sub topic name of input,
  • <OUTPUT_TOPIC> is your Google Cloud Pub/Sub topic name of output, and
  • <DATAFLOW_BUCKET> is your GCS bucket name for Dataflow temporary files.

Solvers

If you would like to use the D-Wave solver

Please give credentials directly to the sawatabi.solver.DWaveSolver() constructor arguments, or set up a config using dwave-cloud-client:

$ dwave config create
Configuration file not found; the default location is: /path/to/your/location/dwave.conf
Configuration file path [/path/to/your/location/dwave.conf]:
Configuration file path does not exist. Create it? [y/N]: y
Profile (create new) [prod]: dev
API endpoint URL [skip]: xxxxxxxxxxxxxxxx
Authentication token [skip]: xxxxxxxxxxxxxxxx
Default client class [skip]:
Default solver [skip]: Advantage_system1.1
Configuration saved.

If you would like to use the Fixstars GPU solver (Optigan)

Please give credentials directly to the sawatabi.solver.OptiganSolver() constructor arguments, or set up a API Token in ~/.optigan.yml:

api:
    endpoint: http://optigan.example.com/method
    token: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

For Contributions to the Sawatabi Framework

Please set up a development environment as follows:

python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install --editable ".[dev]"

Acknowledgement

This work is supported by the MITOU Target program from Information-technology Promotion Agency, Japan (IPA).

About

Sawatabi is an application framework to develop and run stream-data-oriented Ising applications with quantum annealing.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages