| Prev: Testing | Up: Contents | Next: Bibliography and References |
Overall I would classify the project as a success. I have set out everything that I planned to achieve and in certain areas, such as the flexibility of the input file, I have exceeded my expectations.
There were a number of difficulties that arose along the way that could have been avoided. The two areas that I got the most wrong were the number of bits required to simulate a circuit and the inability to simulate concurrent gates concurrently. The first problem was due to a lack of proper understanding of the project (probably due to believing that I knew what was going on when in fact I didn't!). The second problem was due to not researching the task properly and not thinking about the results. I certainly knew enough by that stage to avoid making that mistake.
There are a number of areas that I would like to improve with the current implementation. The user interface could do with a lot more planning. It has been put together in a manner which suggests a lack of forethought.
On the Haskell side error messages need to be improved, perhaps by integrating the simulator more fully with the Haskell interpreter. At the moment the simulator effectively knows nothing about the Haskell code which outputs the set of complex numbers. An error in the Haskell code is usually relayed to the user as "ERROR: Expected (", as opposed to a nicer "Error at line 53 in Circuit.hs, etc. etc."
On the simulator side more research should be done to determine which of the various algorithms produce the best results. Perhaps a heuristic could be used to suggest to the user which algorithm is likely to lead to the quickest simulation. My sparse vector implementation was an algorithm which was invented 'off the cuff'. There has been a lot of published work in this area and proper research could considerable speed up the computation and / or reduce the memory overhead even further.
The areas where the simulator could be extended to are almost boundless. It may be nice to create some sort of graphical editing tool for creating circuits. The reason why I did not investigate this further was because the addition of a single gate affects the output of the entire system. Thus it is very hard to imagine anybody being able to create any useful quantum circuit by dropping circuits on to an editor and then connecting the pins. However as an education tool it could be invaluable. With some visualisation tool it could be used to demonstrate what is going on inside the quantum circuit.
A better way of visualising the amplitudes in the circuit would be nice. The main problem here is that the complex state of the system is inherently multi-dimensional. In fact the state at any given point is described by a point on a sphere in n-dimensional space, where n is the number of bits in the system. A program to visualise this space would be a large project in itself.
The ultimate quantum circuit simulator would be one that uses a quantum circuit to simulate other circuits, thereby reducing the exponential overheads. Such a goal, however, is a decade away at the very least.
| Prev: Testing | Up: Contents | Next: Bibliography and References |
This web page (c) 2000 Jon Marshall. Last updated 3rd June 2000