Python Framework for Ising Model

## Project description

![wildqat](MDR_Wildqat.png)

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

```python
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
```python
#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.
```python

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.
```python

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
```python
from wildqat import *
from blueqat import vqe

qubo = pauli(sel(4,1)) # => 0.5*Z*Z + 1.0*I - Z - Z + 0.5*Z*Z - Z + 0.5*Z*Z - Z + 0.5*Z*Z + 0.5*Z*Z + 0.5*Z*Z
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
```python
from wildqat import *
a = opt()
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
```python
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
```python
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
```python
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
```python
print(zeros(3))
#=>
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
```

diag(list)
Create QUBO with diag from list
```python
print(diag([1,2,1]))
#=>
[[1 0 0]
[0 2 0]
[0 0 1]]
```

rands(N)
Create QUBO with random number
```python
print(rands(2))
#=>
[[0.89903411 0.68839641]
[0. 0.28554602]]
```

dbms(list,weight)
Create QUBO on DBM or RBM model
```python
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

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

https://github.com/mdrft/Wildqat/tree/master/examples_ja

Authors
----------

Disclaimer
----------

## Project details

This version 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 0.6.6 0.6.3 0.6.2 0.6.1 0.6.0 0.5.6 0.5.5 0.5.4 0.5.3 0.5.2 0.5.1 0.5.0 0.4.9 0.4.8 0.4.7 0.4.6 0.4.5 0.4.4 0.4.3 0.4.1 0.4.0 0.3.8 0.3.7 0.3.6 0.3.5 0.3.4 0.3.3 0.3.2 0.3.1 0.3.0 0.2.8 0.2.7 0.2.6 0.2.5 0.2.4 0.2.3 0.2.2 0.2.1 0.2.0 0.1.9 0.1.4 0.1.3 0.1.2 0.1.1 0.1.0 0.0.1