Beispiel #1
0
 def optimize(self):
     # assert self.model
     # Solve
     self.model.optimize()         
     n = len(self.getX())  
     x = np.zeros((n, 1)) 
     if self.model.status == GRB.status.OPTIMAL:
        for i in xrange(n):
            x[i][0] = self.getX()[i].x
            
     # f(x) + 1/2 * rho * ||x - K||2
     f_opt = self.model.ObjVal        
     prox = x - self.K 
     prox = dnrm2(prox)
     prox *= self.rho
     prox *= 0.5
     
     # f(x)
     f_opt -= prox
                       
     return (x, f_opt) 
Beispiel #2
0
 def optimizeX(self):
     # assert self.model
     # Solve
     self.model_x.optimize()         
     x = np.zeros((self.n, 1)) 
     if self.model_x.status == GRB.status.OPTIMAL:
        for i in xrange(self.n):
            x[i][0] = self.getX()[i].x
            
     # f(x) + 1/2 * rho * ||A * x + B * zk - c + uk||2
     f_opt = self.model_x.ObjVal        
     prox = self.prox_x # B * zk - c + uk
     if(self.A is not None):
         prox += np.dot(self.A, x)
         
     prox = dnrm2(prox) # ||A * x + B * zk - c + uk||2
     prox *= self.rho
     prox *= 0.5
     
     # f(x)
     f_opt -= prox
                               
     return (x, f_opt) 
Beispiel #3
0
 def _unitvec_l2(self, vec):
     return dscal(1.0 / dnrm2(vec), vec)
  ####
  ##
  ## ADMM convergence criteria
  ##
  ## x ∈ Rn and z ∈ Rm, where A ∈ Rp×n, B ∈ Rp×m, and c ∈ Rp
  ##
  ## For exchange A = 1 and B = -1
  ##
  ## e_pri = sqrt(p)+ e_abs + e_rel * max{Axk2,Bzk2,c2},
  ## e_dual = sqrt(n) + e_abs + e_rel * A.T x yk2
  ##
  ## This time n = p = T
  #######
  
  # rk+1 = Axk+1 + Bzk+1 − c
  r_norm  =  np.sqrt(N) * dnrm2(x_mean)# r_i = x_mean => sqrt(sum ||r_i||_2^2) = sqrt(N * ||x_mean||_2^2)
 
  # |ρ * A.TxB * (zk+1 − zk)|2
  s_norm = rho * nzdiffstack # |ρ * -1 * (zk+1 − zk)|2 = ρ * |zk+1 − zk|2
 
  # as described above        
  eps_pri = np.sqrt(T) * ABSTOL + RELTOL * max(nxstack, nzstack) 
  eps_dual = np.sqrt(T) * ABSTOL + RELTOL * nystack    
  
  # current snapshot
  if(rank == 0 and DISP):
     print ("\n%3d\t%10.3f\t%10.3f\t%10.3f\t%10.3f\t%10.3f\t%10.3f" %
            (k, rho, r_norm, eps_pri, s_norm, eps_dual,cost))
            
  #  save history
  if (rank == 0):