Coder Social home page Coder Social logo

kotarot / sawatabi Goto Github PK

View Code? Open in Web Editor NEW
16.0 3.0 7.0 11.42 MB

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

License: Apache License 2.0

Python 100.00%
stream-processing ising-model annealing quantum-annealing ising streaming python

sawatabi's Introduction

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).

sawatabi's People

Contributors

jusui avatar kotarot avatar marblejenka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

sawatabi's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.