Comments (4)
Do you mean this Operator ?
from qiskit.quantum_info.operators import Operator
It is in qiskit-terra, not qiskit-aqua
from qiskit-aqua.
It is about this code which I am not able to get running:
Filip Mazurek, https://github.com/filipmazurek/Quantum-Workspace/blob/master/Qiskit-TSP/qiskit_qaoa_tsp.py:
from qiskit.quantum_info import Pauli
from qiskit.aqua import Operator
import numpy as np
from functools import partial, reduce
from qiskit.aqua.components.initial_states import Custom
from qiskit import QuantumRegister, Aer, BasicAer, execute
from scipy.optimize import minimize
from qiskit.aqua.translators.ising import tsp
from results_visualization import list_to_easier_vis
np.set_printoptions(precision=3, suppress=True)def pauli_i(coeff, n_q):
id_pauli = Pauli(np.zeros(n_q), np.zeros(n_q))
return Operator([[coeff, id_pauli]])def pauli_x(qubit, coeff, n_q):
eye = np.eye(n_q)
return Operator([[coeff, Pauli(np.zeros(n_q), eye[qubit])]])def pauli_z(qubit, coeff, n_q):
eye = np.eye(n_q)
return Operator([[coeff, Pauli(eye[qubit], np.zeros(n_q))]])def product_pauli_z(q1, q2, coeff, n_q):
eye = np.eye(n_q)
return Operator([[coeff, Pauli(eye[q1], np.zeros(n_q)) * Pauli(eye[q2], np.zeros(n_q))]])def evolve(hamiltonian, angle, quantum_registers):
return hamiltonian.evolve(None, angle, 'circuit', 1,
quantum_registers=quantum_registers,
expansion_mode='suzuki',
expansion_order=3)def create_circuit(qr, gamma, beta, p, m_H, c_H, init_circ):
circuit_evolv = reduce(lambda x, y: x + y, [evolve(m_H, beta[i], qr) + evolve(c_H, gamma[i], qr)
for i in range(p)])
circuit = init_circ + circuit_evolv
return circuitdef neg_evaluate_circuit(gamma_beta, qr, p, m_H, c_H, init_circ):
n = len(gamma_beta)//2
circuit = create_circuit(qr, gamma_beta[:n], gamma_beta[n:], p, m_H=m_H, c_H=c_H, init_circ=init_circ)
return np.real(c_H.eval("matrix", circuit, Aer.get_backend('statevector_simulator'))[0])def create_weights_cost_operators(num_cities, num_qubits, dist_mat):
cost_operator = Nonefor i in range(num_cities): for j in range(i, num_cities): for t in range(num_cities - 1): weight = dist_mat[i][j] / 2 if dist_mat[i][j] != 0: qubit_1 = t * num_cities + i qubit_2 = (t + 1) * num_cities + j if cost_operator is None: cost_operator = pauli_i(weight, num_qubits) - \ product_pauli_z(qubit_1, qubit_2, weight, num_qubits) else: cost_operator += pauli_i(weight, num_qubits) - \ product_pauli_z(qubit_1, qubit_2, weight, num_qubits) return cost_operator
def create_penalty_operators_for_bilocation(num_cities, distance_mat, num_qubits):
# TODO: big problems here. It likes position 1010 WAAY too much (= 0.88) (in two city case)
penalty_operators = None
for t in range(num_cities): # adding penalty for being in multiple cities at the same time point
range_of_qubits = list(range(t * num_cities, (t + 1) * num_cities))
print(range_of_qubits)
if penalty_operators is None:
penalty_operators = create_penalty_operators_for_qubit_range(range_of_qubits, distance_mat, num_qubits)
else:
penalty_operators += create_penalty_operators_for_qubit_range(range_of_qubits, distance_mat, num_qubits)return penalty_operators
def create_penalty_operators_for_repetition(num_cities, distance_mat, num_qubits):
# TODO: big problems here. It likes position 1100 WAAY too much (= 0.88) (in two city case)
penalty_operators = None
for i in range(num_cities): # add penalty for visiting the same city more than once
range_of_qubits = list(range(i, num_cities ** 2, num_cities))
print(range_of_qubits)
if penalty_operators is None:
penalty_operators = create_penalty_operators_for_qubit_range(range_of_qubits, distance_mat, num_qubits)
else:
penalty_operators += create_penalty_operators_for_qubit_range(range_of_qubits, distance_mat, num_qubits)
return penalty_operatorsdef create_penalty_operators_for_qubit_range(range_of_qubits, dist_mat, n_q):
penalty_weight = 100 * np.max(dist_mat)
cost_operators = None
for i in range_of_qubits:
if i == range_of_qubits[0]:
z_term = pauli_z(qubit=i, coeff=penalty_weight, n_q=n_q)
all_ones_term = pauli_i(coeff=.5 * penalty_weight, n_q=n_q) - pauli_z(qubit=i, coeff=0.5 * penalty_weight, n_q=n_q)
else:
z_term = z_term * pauli_z(qubit=i, coeff=1, n_q=n_q)
all_ones_term = all_ones_term * (pauli_i(coeff=.5, n_q=n_q) - pauli_z(qubit=i, coeff=0.5, n_q=n_q))if cost_operators is None: cost_operators = pauli_i(penalty_weight, n_q) - z_term - all_ones_term else: cost_operators += pauli_i(penalty_weight, n_q) - z_term - all_ones_term return cost_operators
def main(run_mode):
# graph of city coordinates
cities = np.array([[0, 0], [0, 1]]) # coordinates of the cities
num_cities = len(cities)
num_qubits = num_cities ** 2# algorithm properties p = 2 # number of time steps beta = np.random.uniform(0, np.pi * 2, p) gamma = np.random.uniform(0, np.pi * 2, p) # create matrix of distances between cities distance_mat = tsp.calc_distance(cities).w # note that this method does integer distances # create mixing Hamiltonian. A city may or may not be visited in a timestep mixing_hamiltonian = reduce(lambda x, y: x + y, [pauli_x(i, 1, num_qubits) for i in range(num_qubits)]) # penalty_operators = create_weights_cost_operators(num_cities=num_cities, num_qubits=num_qubits, # dist_mat=distance_mat) penalty_operators = create_penalty_operators_for_bilocation(num_qubits=num_qubits, num_cities=num_cities, distance_mat=distance_mat) penalty_operators += create_penalty_operators_for_repetition(num_qubits=num_qubits, num_cities=num_cities, distance_mat=distance_mat) print(penalty_operators) cost_hamiltonian = penalty_operators # circuit initial state vector. All states in equal superposition init_state_vect = [1 for i in range(2 ** num_qubits)] init_state = Custom(num_qubits, state_vector=init_state_vect) # initialize quantum circuit qr = QuantumRegister(num_qubits, name='q') init_circ = init_state.construct_circuit('circuit', qr) # find optimal beta and gamma evaluate = partial(neg_evaluate_circuit, qr=qr, p=p, m_H=mixing_hamiltonian, c_H=cost_hamiltonian, init_circ=init_circ) print("Looking for optimal beta and gamma") # TODO: maybe we should use a different or faster method of finding the min? Super long even with two cities result = minimize(evaluate, np.concatenate([gamma, beta]), method='L-BFGS-B') # result = minimize(evaluate, np.concatenate([gamma, beta])) print(result) # now use the result of the gathered angles to find the answer circuit = create_circuit(qr, result['x'][:p], result['x'][p:], p, m_H=mixing_hamiltonian, c_H=cost_hamiltonian, init_circ=init_circ) if run_mode == "IBM quantum": import secrets from qiskit import IBMQ from qiskit.providers.ibmq import least_busy provider = IBMQ.enable_account(secrets.IBM_TOKEN) large_enough_devices = provider.backends(filters=lambda x: x.configuration().n_qubits > 4 and not x.configuration().simulator) backend = least_busy(large_enough_devices) print("This will be running on the IBM device " + backend.name()) else: print("Preparing to run on local simulator") backend = BasicAer.get_backend('statevector_simulator') job = execute(circuit, backend) state = np.asarray(job.result().get_statevector(circuit)) print(list_to_easier_vis(np.absolute(state)))
main(run_mode="sim")
from qiskit-aqua.
That code you link has last been updated in December 2019. Since then, a lot of Aqua has changed and, in fact, about a week ago Aqua was deprecated and split into multiple other repositories.
I think you have two options:
- Update the code yourself. For that, the following resources may be helpful:
- the migration guide: https://qiskit.org/documentation/aqua_migration.html
- the documentation and tutorials in general
- the Slack channel for help: https://qiskit.slack.com/messages/aqua
- Talk to the original author of that code and/or raise an issue there
from qiskit-aqua.
If you just want to be able to run that old code then a third option might be to pip install qiskit==0.14.0
which would install an old version that I think should be compatible with that code. You might want to do this is a new python environment, so you can keep your current installation, your choice.
If you are interested in TSP problem have you seen the Qsikit tutorial https://qiskit.org/documentation/optimization/tutorials/06_examples_max_cut_and_tsp.html This shows it being solved with VQE but its easy to switch it to using QAOA instead.
from qiskit-aqua.
Related Issues (20)
- CPLEX cannot be installed in Python 3.8 HOT 1
- QAOA with ideal noise returns wrong result HOT 5
- One of the ML link is not working
- No module named 'qiskit.aqua.components.qfts' HOT 2
- CI fails to install cryptography 3.4.1 HOT 2
- Docplex 2.20 does not work without cplex HOT 1
- astroid2.5 causes lint errors HOT 2
- Pylint 2.6.1 stops by error HOT 4
- test_weighted_pauli_operator fails HOT 2
- QGAN fails with default generator when snapshot_dir is enabled HOT 4
- Revert #1440 i.e. remove PauliSumOp
- Pin dependent versions for the final deprecated release.
- Deprecate Aqua HOT 2
- TypeError: result() got an unexpected keyword argument 'wait' - bug in `QuantumInstance` HOT 2
- stable_set.get_operator() HOT 16
- Error in installing qiskit-aqua from source HOT 1
- QAOA for TSP on QISKIT HOT 12
- Bug in nakanishi_fujii_todo HOT 2
- QSVM with train+test data returns second matrix of wrong size HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from qiskit-aqua.