code: def run(self,shots=1,targetT=0.02,verbose=False):
  		
  		if self.qubo != []:
  			self.qi()
  		J = self.reJ()
  		N = len(J)
  
  		itetemp = 100
  		Rtemp = 0.75
  
  		self.E = []
  		qq = []
  		for i in range(shots):
  			T = self.Ts
  			q = np.random.choice([-1,1],N)
  			EE = []
  			EE.append(Ei(q,self.J)+self.ep)
  			while T>targetT:
  				x_list = np.random.randint(0, N, itetemp)
  				for x in x_list:
  					q2 = np.ones(N)*q[x]
  					q2[x] = 1
  					dE = -2*sum(q*q2*J[:,x])
  
  					if dE < 0 or np.exp(-dE/T) > np.random.random_sample():
  						q[x] *= -1
  				EE.append(Ei(q,self.J)+self.ep)
  				T *= Rtemp
  			self.E.append(EE)
  			qtemp = (np.asarray(q,int)+1)/2
  			qq.append([int(s) for s in qtemp])
  			if verbose == True:
  				print(i,':',[int(s) for s in qtemp])
  			if shots == 1:
  				qq = qq[0]
  		if shots == 1:
  			self.E = self.E[0]
  		return qq
docs: Run SA with provided QUBO. 
  		Set qubo attribute in advance of calling this method.