Giter VIP home page Giter VIP logo

quisp's Introduction

QUISP

Codacy Badge Coverage Status github workflow Slack Widget The Quantum Internet Simulation Package (QuISP) is an event-driven simulation of quantum repeater networks, which will be the foundation of the coming Quantum Internet. QuISP's goal is to simulate a full Quantum Internet consisting of up to 100 networks of up to 100 nodes each. Its focus is on protocol design and emergent behavior of complex, heterogeneous networks at large scale, while keeping the physical layer as realistic as possible.

QuISP is a product of the Advancing Quantum Architecture (AQUA) research group headed by Prof. Rodney Van Meter, at Keio University's Shonan Fujisawa Campus, Fujisawa, Japan. See http://aqua.sfc.wide.ad.jp and the list of Authors.

Research questions

A simulator is one or more of three things: a time machine, an X-ray machine, or a telescope. It can be used to look into the future or the past, look at the internals of an object that are otherwise inaccessible, or look at objects of a far vaster scale than can be built in a laboratory. QuISP is, perhaps, most importantly a telescope: we are looking at large-scale quantum networks and ultimately the Quantum Internet, but we do also pause to look at the micro (local) behavior of protocols, as well.

Research questions we hope to answer:

  • Emergent behavior
    • Classical networks exhibit congestion collapse; are quantum networks subject to the same thing?
    • Will the dynamics of large networks prevent us from making end-to-end connections under realistic scenarios, even when a naive model suggests it should be possible?
    • Are there other unexpected behaviors in large-scale networks?
  • Protocol design
    • Testing of detailed protocol designs to validate correct operation.
    • Are there interactions between the classical and quantum portions of the network?
  • Connection architecture and performance prediction
    • All three proposed network generations exhibit complex behavior that makes analytic prediction of performance difficult with realistic parameters; simulation, of course, will require the best effort we can make at validation, as well.
  • Dynamic behavior
    • Are networks stable as conditions change?
    • When a topology change occurs, how do the protocols respond?
    • Network traffic will be dynamic; can our multiplexing and resource management protocols adapt so that new connections are given service in a reasonable time, and ongoing connections continue to receive expected levels?

Simulation goals

We have a number of long-term goals for development of the simulator:

  • Complex network topologies, including the notion of network boundaries and heterogeneity at the physical and logical levels
  • support 1G, 2G and 3G quantum networks, utilizing either purify-and-swap (1G) or quantum error corrected (QEC) (2G and 3G) protocols for managing errors
  • Distinct link architectures: memory-to-memory (MM), midpoint interference (MIM), and midpoint source (MSM), sneakernet, satellite
  • Internetworking protocols for connecting different types of networks
  • Various applications running in complex traffic patterns

Because these protocols can result in hundreds of qubits in a single entangled state, and the entire system may consist of up to a million qubits, simulation at the physical Hamiltonian level or even just above that at the unitary (gate, e.g. CNOT) level is infeasible. We cannot calculate and store full density matrices for such states. Instead, like simulators for large-scale error correction, QuISP operates primarily in the error basis, in which we maintain a description of errors the states have incurred rather than the full state. However, unlike most QEC simulators, QuISP supports non-Pauli errors, in a limited fashion.

QuISP is almost endlessly configurable; for example, it is possible to set not only different lengths for different links in the network, but also different gate error rates and memory lifetimes on individual qubits. Non-Pauli errors that are at least partially supported in the current release include qubit loss, relaxation to ground state, excitation to excited state, and complete mixing.

If you are unfamiliar with the research literature or the terminology above, see "Learning more", below.

In addition, we aim to make simulations run on QuISP completely reproducible, to the extent humanly possible. It will be possible for others to verify work done using QuISP if they have the name of the QuISP release, version numbers for supporting software, the .ini file, any changed .ned files, and the seed for the pseudo-random number generator.

Current status

Most of the infrastructure is up and running, though the sets of actual experiments (interesting simulations) you can do are fairly limited still.

Working infrastructure:

  • All of the basic OMNeT++ functionality, such as events, visualization, logging, analysis, etc.
  • Complex network topologies, defining per link parameters including length, channel error rates, numbers of qubit memories, gate error rates, etc. (You will see the included demonstration networks in the documentation linked below.)
  • A complete internal model of the software architecture for a repeater, including a connection manager, the RuleSet execution engine, real-time tracking of quantum states, etc.

Besides the obvious joys of the endless network configurability, here are the key quantum protocols that are implemented:

  • basics of RuleSet creation & distribution
  • various purification protocols: Single round of X purification, alternating X/Z purification, etc. Default to one round of purification per entanglement swapping round. Extending these to test your own custom purification protocol is pretty straightforward.
  • tomography: when the simulation boots, it assumes that the software at each end of each link knows nothing about the link, so it begins by performing tomography on the links. (This is actually problematic, because it turns out to take a long time for tomography to converge, which means a lot of boot-up time in the simulation before other interesting things start to happen. We are working on a way to pre-calculate this, so that you can choose to either include tomography or not.)
  • entanglement swapping.

Current generic networking-level status:

  • fully blocking circuit switching
  • random pairwise traffic pattern (flat distribution)

In-progress work:

  • entanglement swapping is a relatively new feature, and taking data using it is still not fully implemented
  • although the connection setup protocol works, the teardown on completion of a connection still needs a little love
  • the set of demo networks is still being polished

Upcoming features in near-term releases:

  • more general resource allocation & multiplexing
  • more general mechanism for establishing traffic patterns
  • MSM links
  • graph states at the link level
  • multi-party states at the application level

Mid-term to long-term release features:

  • 2G networks, esp. Jiang style
  • full quantum internetworking

Installation requirements

The full installation process is described in Wiki. The main software tools you will need are:

  • QUISP requires OMNeT++ and
  • an external C++ library, Eigen, to work.
  • To contribute to QuISP development, you will also need to be familiar with at least the basics of git.
  • We recommend the use of Doxygen for source code comments, but the Doxygen tools are not required unless you want to build the source code documentation.

Depending on your local setup and how you intend to use QuISP, you may also need various tools (a C++ compiler, make, an X Windows server, Docker, ffmpeg for making videos, etc.), documented in the installation notes.

Trying it out on the web

If you just want to take a peek at the basic sample simulation set, we encourage you to try them out on the web (here) which is built using the WebAssembly. Currently the Wasm version only supports running the pre-configured simulations and users cannot upload custom topology, we are still working on that. Also due to the heavy load of the OMNeT++ and the QuISP itself the performance on the web version is a lot slower than running it locally.

Building and running locally

First see Wiki, then follow the instructions below.

There are two main ways of working with QUISP. You can either use the Eclipse-like graphical interface of OmNET++, for which you will find instructions in Building QuISP with OMNeT IDE , or you can use the Makefile and GNU make, by looking at instructions in Building QuISP with GNU Make (wiki). Some operations are implemented in the Makefile and not explained for the graphical user interface.

Moving into useful work

Once you have gotten this far, you should be able to run some of the most basic demos. Next, you'll want to learn how to create your own test networks, and how to extend the source code for your own uses.

When you are ready to start contributing, you can start reading the code, as we have done.

You will also want to look at some of the software design documents.

Development tools

A few tools (mainly scripts) can be used to make development a bit easier. Look around in the bin folder of this project.

Is QuISP right for me?

Fundamentally, the point of QuISP is that networks are much more than point-to-point connections.

If you want to know about the behavior of systems and networks, to study behavior of links that are too complex for simple analytic equations (esp. those with multiple qubits per link) or to contribute to the design of network protocols, QuISP is the simulator for you. If you're trying to adjust detector window timing v. entanglement fidelity, or figure out what Q factor your cavity needs to be, or understand dispersion in a fiber, it might not be.

Learning more

See the references.

Contributing

First, join the QuISP Slack team.

Please also refer to the code of conduct and Contributing guide.

License

QuISP was initially released on April 5, 2020, and is licensed under the 3-Clause BSD License.

QuISP builds on OMNeT++. OMNeT++ itself is a custom license, open source and free for academic use, but a license fee required for commercial organizations. QuISP also requires the linear algebra library Eigen, where license is MPL2, and so probably not an issue.

quisp's People

Contributors

chibikuri avatar cocori2 avatar dependabot[bot] avatar icepolarizer avatar lmpawan10 avatar makotonakai avatar mhajdusek avatar naphann avatar ngym avatar ntanetani avatar pfittipaldi avatar porametpat avatar rdviii avatar res6idue avatar rum-yasuhiro avatar saram92 avatar sierpinskiii avatar sitong1011 avatar t13569tm avatar tatzhiro avatar tsarkar99 avatar w2ak avatar zigen avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

quisp's Issues

gravity model Bell pair traffic pattern

Similar to today's Internet, with fairly central hubs and an "incast" traffic pattern, with a hub-and-spoke for client-server. (Is that enough buzzwords?)
Simplest implementation is to raise the probability that a node gets a new connection based on the number of connections it currently has.
** need to find the right research paper reference **
Needs to be under control of a .ned or .ini parameter.

QNIC-based, fully blocking circuit switching

Simplest form: first message processed sets a flag that the QNIC is busy.
Issue: how do we make sure we don't get conflicting reservations at the two ends of the link?
Allow a request to sit unprocessed until the connection that first got the link finishes. How do we do that? Can we set an event?

QNIC-based, fully blocking circuit switching

The goal

Fully blocking circuit switched resource allocation with released random backoff on failure
in order to avoid dead lock

Tasks

  • Add to "Q node" ( or "QNIC" ) "Allocated" flag.

  • modify Connection manager to handle massage to test and set allocated flag
    """ Example pseudo code
    if(! allocated){
    allocate
    ( continue processing )
    }else{
    send reject request
    ( about processing )
    }
    """

  • define reject setup request message type

  • Connection manager :: handle massage extend to handle
    """ Example pseudo code
    Reject:
    Allocated -> False
    """

  • random backoff
    """
    if ( EndNode ):
    sleep( random ) // send yourself a message to the future
    try again
    """"

  • Limit the lifetime of a connection

    • set the parameter for that.
  • Implement connection tear down

    • Do we need new message type?
    • clear allocated flag

Jiang 2G network

This will be more than just one task, but now we'll treat it as a single issue.

3G network

This will be more than just one task, but now we'll treat it as a single issue.

double-selection purification

There are actually several options here, as well. This is something we've tinkered with off and on for years; with high entanglement success rates it's a win.

Fowler 2G network

This will be more than just one task, but now we'll treat it as a single issue.

interpreting sim results

Add a doc (or add to a doc) description of where to find the output files from a simulation and how to interpret the results (placeholder in running-demos.md for now)

  • For single-connection sims
  • For multiple-connection simulations

document hop count based routing

How does existing routing work? Needs to be explained. I know it's "just counting the number of hops", but is there a routing protocol or magic information about the network topology?
(Depending on the answer to this, new Issues will doubtless arise, some perhaps necessary for 0.2.0.)

Adjust parameters in tutorial networks

After multi-hop ES works, turn on EndToEndConnection in the various networks (in quisp_tutorial.ini?), make sure the initial tomography is short enough to run reasonably, make sure demos all run smoothly in a couple of minutes.

MSM link

doesn't work yet. A great project.

multi-hop entanglement swapping

critical feature before non-AQUAns will use.
See software design doc, "Dur-Briegel Path Setup.md" and other related files.

entanglement swapping

Implementing entanglement swapping

Procedure of entanglement swapping

Todo

  • Implement RuleSet
  • etc...

Future work

read link tomography from a file

Currently, full link tomography is done on every link at boot time, and it's a long process. Would be nice to be able to read the link tomography density matrices from the output files from previous runs, bypassing that step. Needs:
a. check to make sure .dm file is newer than .ned file (and .ini?)
b. figure out how long the tomography should have taken, advance the clock to that point

When clicking "Set Up an Unconfigured Network", simulator breaks

When clicking File-"Set Up an Unconfigured Network", the simulator terminates. https://camo.githubusercontent.com/5c3417410b6642d65321c9361669b9070392c5d8/68747470733a2f2f692e696d6775722e636f6d2f6364693334766b2e706e67

Error code:
Simulation terminated with exit code: 139
Working directory: /root/models/quisp/networks
Command line: ../quisp -m -n .. quisp_tutorial.ini

Environment variables:
PATH=/root/omnetpp/bin::/root/omnetpp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LD_LIBRARY_PATH=/root/omnetpp/lib::
OMNETPP_IMAGE_PATH=/root/omnetpp/images

simplify adding Rules & RuleSets

This is probably a big rewrite of some core node code. Might even be nice if they could be read from a file, instead of requiring extensive C++ surgery. This is a long-term issue.

simplest multiple connection random traffic pattern

Critical feature before non-AQUAns will use.
On boot, every node should pick a random partner somewhere in the network to start a connection with. This means everyone starts a connection, and on average everyone receives one connection request, so the average number of connections/node is 2, but there will be high variability.
This has to work in conjunction with the simplest QNIC-based resource management.

clique Bell pair traffic pattern

Add small cliques that must all share Bell pairs, e.g. for Byzantine agreement.
a. how do you find the nodes that are members?
b. how long a connection?
c. what configuration parameters in .ned or .ini?

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.