Skip to content

matsuzaki215/Wildqat

 
 

Repository files navigation

Wildqat Python SDK

Python Framework for QUBO

Version

1.1.6

Install

$ pip3 install wildqat

or

$ git clone https://github.com/mdrft/Wildqat.git
$ python setup.py install

Example

from wildqat import *
a = opt()
a.qubo = [[4,-4,-4],[0,4,-4],[0,0,4]]
a.run() #=> [1, 1, 1]
print(a.E[-1]) #=>[0.0]

Parameters

Some parameters for simualtion is adjustable

#for sa
a.Ts  = 10    #default 5
a.R   = 0.99  #default 0.95
a.ite = 10000 #default 1000

Energy Function

Energy function of the calculation is stored in attribute E as an array.

print(a.E[-1]) #=>[0.0]

#if you want to check the time evolution
a.plot()

Sampling

Sampling and counter function with number of shots.

result = a.run(shots=100,sampler="fast")

print(result)

[[0, 1, 0],
 [0, 0, 1],
 [0, 1, 0],
 [0, 0, 1],
 [0, 1, 0],
 ...
 
 counter(result) # => Counter({'001': 37, '010': 25, '100': 38})

Universal Gate Model Operator

With blueqat, you can easily simulate combinatorial optimization problem on Universal Gate Model link:Blueqat

from wildqat import *
from blueqat import vqe

qubo = pauli(sel(4,1)) # =>  0.5*Z[0]*Z[1] + 1.0*I - Z[2] - Z[0] + 0.5*Z[0]*Z[2] - Z[3] + 0.5*Z[0]*Z[3] - Z[1] + 0.5*Z[1]*Z[2] + 0.5*Z[1]*Z[3] + 0.5*Z[2]*Z[3]
step = 4
result = vqe.Vqe(vqe.QaoaAnsatz(qubo,step)).run()
print(result.most_common(5))

# => (((0, 0, 1, 0), 0.24650337773427797), ((1, 0, 0, 0), 0.24650337773427794), ((0, 0, 0, 1), 0.24650337773427788), ((0, 1, 0, 0), 0.24650337773427783), ((0, 0, 0, 0), 0.0034271782738342416))

Connection to D-Wave cloud

Direct connection to D-Wave machine with apitoken
https://github.com/dwavesystems/dwave-cloud-client is required

from wildqat import *
a = opt()
a.dwavetoken = "YOUR TOKEN HERE"
a.qubo = [[0,0,0,0,-4],[0,2,0,0,-4],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,4]] 
a.dw()

# => [1,1,-1,1,1,0,0,0,0,0,0]

Functions

sel(N,K,array)
Automatically create QUBO which select K qubits from N qubits

print(sel(5,2))
#=>
[[-3  2  2  2  2]
 [ 0 -3  2  2  2]
 [ 0  0 -3  2  2]
 [ 0  0  0 -3  2]
 [ 0  0  0  0 -3]]

if you set array on the 3rd params, the result likely to choose the nth qubit in the array

print(sel(5,2,[0,2]))
#=>
[[-3.5  2.   2.   2.   2. ]
 [ 0.  -3.   2.   2.   2. ]
 [ 0.   0.  -3.5  2.   2. ]
 [ 0.   0.   0.  -3.   2. ]
 [ 0.   0.   0.   0.  -3. ]]

net(arr,N)
Automatically create QUBO which has value 1 for all connectivity defined by array of edges and graph size N

print(net([[0,1],[1,2]],4))
#=>
[[0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

this create 4*4 QUBO and put value 1 on connection between 0th and 1st qubit, 1st and 2nd qubit

zeros(N) Create QUBO with all element value as 0

print(zeros(3))
#=>
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

diag(list) Create QUBO with diag from list

print(diag([1,2,1]))
#=>
[[1 0 0]
 [0 2 0]
 [0 0 1]]

rands(N) Create QUBO with random number

print(rands(2))
#=>
[[0.89903411 0.68839641]
 [0.         0.28554602]]

dbms(list,weight) Create QUBO on DBM or RBM model

print(dbms([2,2]))
#=>
[[0.60181446 0.         0.41019491 0.17743251]
 [0.         0.61166332 0.87964297 0.46509678]
 [0.         0.         0.29579843 0.        ]
 [0.         0.         0.         0.96743087]]

Document

English
https://wildqat.readthedocs.io/en/latest/

日本語
https://wildqat.readthedocs.io/ja/latest/

Tutorial

English
https://github.com/mdrft/Wildqat/tree/master/examples_en

日本語
https://github.com/mdrft/Wildqat/tree/master/examples_ja

Authors

Yuichiro Minato(MDR), Asa Eagle(MDR), Satoshi Takezawa(TerraSky), Seiya Sugo(TerraSky)

Disclaimer

Copyright 2018 The Wildqat Developers.

About

Python Framework for QUBO

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 99.2%
  • Python 0.8%