Python Framework for Ising Model

## Project description

![wildqat](MDR_Wildqat.png)

Wildqat Python SDK
--------
Python Framework for QUBO

Version
--------
1.1.333

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.sa() #=> [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

#for sqa
a.Gs = 100 #default 10
```

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()
```

Universal Gate Model Operator
-------
It is convertible to the universal gate model pauli operator for qaoa simulations
```python
pauli(sel(2,1))
# => -0.5*I + 0.5*Z*Z
```

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))
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]]
```

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 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4

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