def import_key(key_file): with open(key_file, 'r') as kf: encoded_key = kf.read().replace("\n", "") encoded_key = encoded_key.replace(PRIVATE_HEAD_BLOCK, "") encoded_key = encoded_key.replace(PUBLIC_HEAD_BLOCK, "") encoded_key = encoded_key.replace(END_BLOCK, "") plain_key = base58.b58decode(encoded_key).decode() object_param_list = plain_key.split("\n") params = object_param_list[0].split(",") params = [int(i) for i in params] params = Parameters(params[0], params[1], params[2], params[3], params[4], params[5]) h = object_param_list[1].split() h = [int(i) for i in h] h = poly(h, params.get_N()) f = g = None if len(object_param_list) == 4: f = object_param_list[2].split() f = [int(i) for i in f] f = poly(f, params.get_N()) g = object_param_list[3].split() g = [int(i) for i in g] g = poly(g, params.get_N()) if f and g: return NTRUKey(params, h, f, g) else: return NTRUKey(params, h)
def main(): base1 = poly(n=6, r=40, topleft=(50, 50)) base3 = poly(n=6, r=40, topleft=(50, 270)) base2 = poly(n=8, r=40, topleft=(250, 50)) pg=ComboGroup((PolyGroup(base_poly=base1,EVEN=3,ODD=2,line=3),\ PolyGroup(base_poly=base3,EVEN=3,ODD=2,line=3),\ PolyGroup(base_poly=base2,EVEN=3,ODD=2,line=3))) FontObj = pygame.font.SysFont('stliti', 20) x = 0 for g in pg.groups: for p in g: pygame.draw.polygon(DIS, (255, 255, 255), p.points, 2) text = FontObj.render(str(x), True, (0, 255, 255)) _rect = text.get_rect() _rect.center = p.center DIS.blit(text, _rect) x += 1 print(g.rect.xywh) pygame.draw.rect(DIS, (255, 255, 255), g.rect.xywh, 2) pygame.image.save(DIS, 'demo_img1.jpg') pygame.display.update() while True: time.sleep(0.2) for event in pygame.event.get(): if event.type == QUIT: pygame.quit() return if event.type == MOUSEBUTTONDOWN: po = pg.collide(event.pos) print(pg.get_neibors_by_num(pg.coord_to_num(po))) print(po)
def main(): ## base1=poly(n=6,r=40,topleft=(50,50)) ## base3=poly(n=6,r=40,topleft=(50,270)) ## base2=poly(n=8,r=40,topleft=(250,50)) ## pg=ComboGroup((PolyGroup(base_poly=base1,EVEN=3,ODD=2,line=3),\ ## PolyGroup(base_poly=base3,EVEN=3,ODD=2,line=3),\ ## PolyGroup(base_poly=base2,EVEN=3,ODD=2,line=3))) XMAR = 2 YMAR = 40 size = 40 GAP = size base1 = poly.poly(n=8, size=size, topleft=(XMAR, YMAR)) base2 = poly.poly(n=6, size=size, topleft=(9.2 * size + XMAR + GAP, YMAR + 0.35 * size)) base3 = poly.poly(n=8, size=size, topleft=(XMAR + 14.2 * size + XMAR + 2 * GAP, YMAR)) pg=poly.ComboGroup((poly.PolyGroup(base_poly=base1,EVEN=4,ODD=3,line=5),\ poly.PolyGroup(base_poly=base2,EVEN=7,ODD=6,line=3),\ poly.PolyGroup(base_poly=base3,EVEN=4,ODD=3,line=5))) pg.set_special_neibors({ 14: (18, 19), 15: (19, 20, 21), 16: (21, 22, 23), 17: (3, 24) }) chessurf = pygame.image.load('Eight.png') chess_pics[8] = pygame.transform.scale(chessurf, base1.rect.iwh) chessurf = pygame.image.load('Six.png') chess_pics[6] = pygame.transform.scale(chessurf, base2.rect.iwh) x = 0 FontObj = pygame.font.SysFont('stliti', 20) for p in pg: background.blit(chess_pics[p.n], p.topleft) text = FontObj.render(str(x), True, (0, 255, 255)) background.blit(text, p.center) x += 1 '''for g in pg.groups: for p in g: pygame.draw.polygon(DIS,(255,255,255),p.points,2) pygame.draw.rect(DIS,(255,255,255),g.rect.xywh,2)''' DIS.blit(background, (0, 0)) pygame.display.update() while True: time.sleep(0.2) for event in pygame.event.get(): if event.type == QUIT: pygame.quit() return if event.type == MOUSEBUTTONDOWN: po = pg.collide(event.pos) print(pg.get_neibors_by_num(pg.coord_to_num(po))) print(po)
def __init__(self, DIS): global background, hlight_pic self._posdict = {n: None for n in range(56)} self.DIS = DIS self.all_chess = [] files_image_background = 'backimage.jpg' files_sound_boomsound = 'Boomsound.mp3' background = pygame.image.load(files_image_background).convert_alpha() #boomsound = pygame.mixer.Sound(files_sound_boomsound) #Initializing the high light surfaces hlight_pic = dict() hlight_color = (0, 200, 200, 100) for n in (6, 8): t_poly = poly.poly(n=n, topleft=(0, 0), size=40) highlight = pygame.surface.Surface(t_poly.rect.iwh).convert_alpha() highlight.fill((0, 0, 0, 0)) pygame.draw.polygon(highlight, hlight_color, t_poly.points, 0) hlight_pic[n] = highlight #Setting up blocks XMAR = 2 YMAR = 40 size = 40 GAP = size base1 = poly.poly(n=8, size=size, topleft=(XMAR, YMAR)) base2 = poly.poly(n=6, size=size, topleft=(9.2 * size + XMAR + GAP, YMAR + 0.35 * size)) base3 = poly.poly(n=8, size=size, topleft=(XMAR + 14.2 * size + XMAR + 2 * GAP, YMAR)) self.board=poly.ComboGroup((poly.PolyGroup(base_poly=base1,EVEN=4,ODD=3,line=5),\ poly.PolyGroup(base_poly=base2,EVEN=7,ODD=6,line=3),\ poly.PolyGroup(base_poly=base3,EVEN=4,ODD=3,line=5))) self.board.set_special_neibors({ 14: (18, 19), 15: (19, 20, 21), 16: (21, 22, 23), 17: (3, 24), 38: (31, 32), 39: (32, 33, 34), 40: (34, 35, 36), 41: (36, 37) }) chess_pics = {} chessurf = pygame.image.load('Eight.png') chess_pics[8] = pygame.transform.scale(chessurf, base1.rect.iwh) chessurf = pygame.image.load('Six.png') chess_pics[6] = pygame.transform.scale(chessurf, base2.rect.iwh) for p in self.board: background.blit(chess_pics[p.n], p.topleft)
def list_polys(): f = open("./map.txt", "r") polys = f.readlines() #print(polys); f.close() poly_obj = [] for x in polys: #print("pre new line",x); if (x != "\n"): #ignore empty lines temp = x.rstrip("\r\n") #print("post strip",temp); temp = temp.split("/") #print("temp:",temp); #if( eval(temp[2])[2] > 0 or eval(temp[3])[2] > 0 or eval(temp[4])[2] > 0): #wrong file poly_obj.append( poly(temp[0], temp[1], eval(temp[2]), eval(temp[3]), eval(temp[4]))) else: #print("empty line"); pass #TODO: rotate objects around camera forward by vector indicated by camera up """ print(poly_obj); for x in poly_obj: x.get_info(); """ #TODO: sort objects to that farthest away is first in list return poly_obj
def bias(self, x_pos, x_neg): m_pos = x_pos.shape[1] m_neg = x_neg.shape[1] Q = None c = np.bmat([\ [ zeros(1) ],\ [ ones(m_pos) ],\ [ ones(m_neg) ]\ ]) A_ub = np.bmat([\ [ ones(m_pos), -eye(m_pos), zeros(m_pos,m_neg) ],\ [ -ones(m_neg), zeros(m_neg,m_pos), -eye(m_neg) ],\ [ zeros(m_pos), -eye(m_pos), zeros(m_pos,m_neg) ],\ [ zeros(m_neg), zeros(m_neg,m_pos), -eye(m_neg) ]\ ]) b_ub = np.bmat([\ [ -ones(m_pos) ],\ [ -ones(m_neg) ],\ [ zeros(m_pos) ],\ [ zeros(m_neg) ]\ ]) for i in range(m_pos): b_ub[i, 0] += self.a(x_pos[:, i]) for i in range(m_neg): b_ub[i + m_pos, 0] -= self.a(x_neg[:, i]) P = poly(A_ub, b_ub) sol = QP(Q, c, P).solve() b = sol[0, 0] return b
def encrypto(self, m): phi = self.randpoly_phi() phi = poly([-1, 1, 0, 0, 0, -1, 1]) c = phi.StarMult(self.public_key, self.N, self.q) c.expend(self.N) m.expend(self.N) for i in range(0, self.N): c.coe[i] = self.p * c.coe[i] + m.coe[i] c.coe[i] %= self.q return c
def test_creation_and_operations(self): key = generate_key() m = poly([1,1,0,0,-1,-1,-1,1,1,0,1,-1,1,0,-1,-1,1,0,0,1,0,1,-1,1], 29) c = key.encrypt(m) d = key.decrypt(c) self.assertEqual(m,d) self.assertTrue(key.is_private())
def __init__(self,s): """ x ∈ R^n """ s = sampled_convex_set.remove_interior_points(s) n = s.shape[0] m = s.shape[1] A_ub = np.bmat([[zeros(m,n),-eye(m)],[zeros(m,n),eye(m)]]) b_ub = np.bmat([[zeros(m)],[ones(m)]]) A_eq = np.bmat([[-eye(n),s],[zeros(1,n),ones(1,m)]]) b_eq = np.bmat([[zeros(n)],[ones(1)]]) self.P = poly(A_ub,b_ub,A_eq,b_eq)
def main(): base1 = poly(n=6, r=40, topleft=(10, 10)) base2 = poly(n=8, size=40, center=(100, 140), lie=False) #True) FontObj = pygame.font.SysFont('stliti', 20) for p in (base1, base2): pygame.draw.polygon(DIS, (255, 255, 255), p.points, 2) x = 0 for i in p.points: text = FontObj.render(str(x), True, (0, 255, 255)) _rect = text.get_rect() _rect.center = i DIS.blit(text, _rect) x += 1 pygame.draw.rect(DIS, (255, 255, 5), p.rect.xywh, 2) pygame.image.save(DIS, 'demo_img2.jpg') pygame.display.update() while True: time.sleep(0.2) for event in pygame.event.get(): if event.type == QUIT: pygame.quit() return
def __init__(self,a,b,c,d,P): n = P.n m = P.A_ub.shape[0] r = P.A_eq.shape[0] A_ub = np.bmat([[P.A_ub,-P.b_ub],[zeros(1,n),-ones(1)]]) b_ub = zeros(m+1) A_eq = np.bmat([[P.A_eq,-P.b_eq],[c.T,-d]]) b_eq = np.bmat([[zeros(r)],[ones(1)]]) P = poly(A_ub,b_ub,A_eq,b_eq) Q = None c = np.bmat([[a],[b]]) self.QP = QP(None,c,P) self.n = n
def dual(self, x, y): m = y.shape[0] c_dual = -ones(m) Q_dual = eye(m) for i in range(m): for j in range(m): Q_dual[i, j] = y[i, 0] * y[j, 0] * self.K(x[:, i], x[:, j]) A_ub = -eye(m) b_ub = zeros(m) A_eq = y.T b_eq = zeros(1) P_dual = poly(A_ub, b_ub, A_eq, b_eq) z = QP(Q_dual, c_dual, P_dual).solve() return z
def _randpoly(self, one=None, _one=None): if one == None and _one == None: tot = random.randint(2, self.N - 1) one = random.randint(0, tot) _one = tot - one r = [0] * self.N while one != 0 or _one != 0: pos = random.randint(0, self.N - 1) if r[pos] is 0: if one > 0: r[pos] = 1 one -= 1 elif _one > 0: r[pos] = -1 _one -= 1 return poly(r)
def __init__(self,x): n = x.shape[0] m = x.shape[1] self.x = x P_list = [] for j in range(m): A = zeros(m-1,n) b = zeros(m-1,1) i_ = 0 for i in range(m): if i != j: A[i_,:] = 2*(x[:,i].T-x[:,j].T) b[i_] = x[:,i].T*x[:,i] - x[:,j].T*x[:,j] i_ += 1 P_list.append(poly(A,b)) self.P_list = P_list
def soft_dual(self, x, y, λ=0.1): assert λ >= 0, "λ >= 0" m = y.shape[0] c_dual = None Q_dual = eye(m) for i in range(m): for j in range(m): Q_dual[i, j] = y[i, 0] * y[j, 0] * self.K(x[:, i], x[:, j]) A_ub = np.bmat([\ [ -eye(m) ],\ [ eye(m) ]\ ]) b_ub = np.bmat([\ [ zeros(m) ],\ [ λ*ones(1) ]\ ]) A_eq = y.T b_eq = zeros(1) P_dual = poly(A_ub, b_ub, A_eq, b_eq) z = QP(Q_dual, c_dual, P_dual).solve() return z
def __init__(self, N, p, q, Fp=None, Fq=None, g=None, private_key=None, public_key=None): self.N = N self.p = p self.q = q self.private_key = private_key self.public_key = public_key self.Fp = Fp self.Fq = Fq self.g = g P = [0] * (N + 1) P[0] = -1 P[N] = 1 self.P = poly(P)
def drawtri(color, size, alpha=255): X = 0 Y = 1 color = color + (alpha, ) YIN = pygame.surface.Surface((size, size // 5)).convert_alpha() YIN.fill((255, 255, 255, 0)) pygame.draw.rect(YIN, color, (0, 0, size * 2 // 5, size // 5)) pygame.draw.rect(YIN, color, (size * 3 // 5, 0, size * 2 // 5, size // 5)) YANG = pygame.surface.Surface((size, size // 5)).convert_alpha() YANG.fill(color) YI = (YIN, YANG) Trigram = [] for lower in YI: for mid in YI: for upper in YI: GUA = pygame.surface.Surface((size, size)).convert_alpha() GUA.fill((255, 255, 255, 0)) GUA.blit(lower, (0, size * 4 // 5)) GUA.blit(mid, (0, size * 2 // 5)) GUA.blit(upper, (0, 0)) Trigram.append(GUA) temp = poly.poly(n=8, topleft=(size, size), size=size * 2) picsurf = pygame.surface.Surface((size * 7, size * 7)).convert_alpha() picsurf.fill((255, 255, 255, 0)) for i in range(4): Trigram[i] = pygame.transform.rotate(Trigram[i], -(i - 4) * 45) TriRect = Trigram[i].get_rect() TriRect.center = ((temp.points[4 - i][X] + temp.points[3 - i][X]) // 2, (temp.points[4 - i][Y] + temp.points[3 - i][Y]) // 2) picsurf.blit(Trigram[i], TriRect) for i in [4, 5, 6, 7]: Trigram[i] = pygame.transform.rotate(Trigram[i], (i + 1) * 45) TriRect = Trigram[i].get_rect() TriRect.center = ((temp.points[i][X] + temp.points[(i + 1) % 8][X]) // 2, (temp.points[i][Y] + temp.points[(i + 1) % 8][Y]) // 2) picsurf.blit(Trigram[i], TriRect) return picsurf
def qvoronoi (points, command = 'qvoronoi'): point_fn = get_temp_file_name () fp = open (point_fn, "w") fp.write ("2 rbox %i\n%i D2\n" % (len(points), len(points))) for x in points: fp.write ("%.16f %.16f\n" % (x[0],x[1])) fp.close () off_fn = get_temp_file_name (); print off_fn cmd = 'cat %s | %s s o >%s' % (point_fn, command, off_fn) print cmd if os.system (cmd) != 0: die ("%s failed" % command) tessel = poly.poly () tessel.read_from_off (off_fn) os.remove (off_fn) #os.remove (point_fn) return tessel
def qvoronoi(points, command="qvoronoi"): point_fn = get_temp_file_name() fp = open(point_fn, "w") fp.write("2 rbox %i\n%i D2\n" % (len(points), len(points))) for x in points: fp.write("%.16f %.16f\n" % (x[0], x[1])) fp.close() off_fn = get_temp_file_name() print off_fn cmd = "cat %s | %s s o >%s" % (point_fn, command, off_fn) print cmd if os.system(cmd) != 0: die("%s failed" % command) tessel = poly.poly() tessel.read_from_off(off_fn) os.remove(off_fn) # os.remove (point_fn) return tessel
def gen_rPoly(self): """ Generate a random r for security parameters """ rp = [0] * self._N p1,n1 = 0,0 while p1 != self._dr or n1 != self._dr: if p1 == self._dr: pass else: x = CR.randint(0,self._N-1) if rp[x] == 0: rp[x] = 1 p1+=1 else: pass if n1 == self._dr: pass else: y = CR.randint(0,self._N-1) if rp[y] == 0: rp[y] = -1 n1+=1 else: pass return poly(rp, self._N)
def gen_gPoly(self): """ Generate a g private key """ gp = [0] * self._N p1,n1 = 0,0 while p1 != self._dg or n1 != self._dg: if p1 == self._dg: pass else: x = CR.randint(0,self._N-1) if gp[x] == 0: gp[x] = 1 p1+=1 else: pass if n1 == self._dg: pass else: y = CR.randint(0,self._N-1) if gp[y] == 0: gp[y] = -1 n1+=1 else: pass return poly(gp, self._N)
def gen_fPoly(self): """ Generate a f private key """ fp = [0] * self._N p1,n1 = 0,0 while p1 != self._df+1 or n1 != self._df: if p1 == self._df+1: pass else: x = CR.randint(0,self._N-1) if fp[x] == 0: fp[x] = 1 p1+=1 else: pass if n1 == self._df: pass else: y = CR.randint(0,self._N-1) if fp[y] == 0: fp[y] = -1 n1+=1 else: pass return poly(fp, self._N)
def test_mod_and_eq(self): a = poly([3,4,5,6,7], 5) b = poly([6,1,2,9,13,0,0,0], 8) self.assertFalse(a == b) self.assertTrue(a%3 == b%3)
def test_conv_product(self): f = poly([3,0,2,0,-3,0,1], 7) g = poly([1,-3,1,0,0,2,-1], 7) fmg = f * g self.assertEqual(fmg._coeff, [4, -10, -1, -3, 1, 14, -5])
def test_add(self): f = poly([3,0,2,0,-3,0,1], 7) g = poly([1,-3,1,0,0,2,-1], 7) fpg = f + g self.assertEqual(fpg._coeff, [4,-3,3,0,-3,2])
if __name__ == "__main__": temp = crossing_point((1, 0), (-1, 0), (0, 1), (0, -1)) print(temp) temp = distance_between((1, 1), (-1, -1)) print(temp) temp = points_in_line((0, 0), (100, 100), (200, 200)) print(temp) temp = points_in_line((0, 0), (100, 100), (200, 205)) print(temp) offset = (500, 400) ray_num = 50 for i in range(ray_num): ray(offset, 2 / ray_num * i, 10000) poly.poly([(100, 200), (200, 100)], WHITE) poly.poly([(100, 200), (0, 200)], WHITE) poly.poly([(700, 400), (700, 500), (800, 500), (800, 400)], WHITE) poly.poly([(900, 400), (900, 500), (1000, 500), (1000, 400)], WHITE) poly.poly([(300, 300), (400, 350), (400, 400), (500, 450), (500, 500), (300, 500)], WHITE) for r in whole: r.update() for r in whole: r.render() for p in poly.whole: p.render() pygame.display.flip()
def mainloop(): done = False clock = pygame.time.Clock() src_x = 500 src_y = 400 keyUP = False keyLEFT = False keyDOWN = False keyRIGHT = False ray_num = 200 ray.ray_source((src_x, src_y), 0, 1 / 4, 30) poly.poly([(100, 200), (200, 100)], WHITE) poly.poly([(100, 200), (0, 200)], WHITE) poly.poly([(700, 400), (700, 500), (800, 500), (800, 400)], WHITE) poly.poly([(900, 400), (900, 500), (1000, 500), (1000, 400)], WHITE) poly.poly([(300, 300), (400, 350), (400, 400), (500, 450), (500, 500), (300, 500)], WHITE) speed = 5 while not done: clock.tick(FPS) #게임의 화면 투사를 30Hz로 설정 #이벤트 입력받기 for event in pygame.event.get(): # User did something if event.type == pygame.QUIT: # If user clicked close done = True # Flag that we are done so we exit this loop if event.type == pygame.MOUSEMOTION: angle_new = 0 if event.pos[0] == src_x and event.pos[1] - src_y == 0: angle_new = 0 elif event.pos[0] == src_x and event.pos[1] - src_y > 0: angle_new = numpy.pi * 1 / 2 elif event.pos[0] == src_x and event.pos[1] - src_y < 0: angle_new = numpy.pi * 3 / 2 elif event.pos[0] < src_x: angle_new = numpy.arctan((event.pos[1] - src_y) / (event.pos[0] - src_x)) + numpy.pi else: angle_new = numpy.arctan( (event.pos[1] - src_y) / (event.pos[0] - src_x)) for r in ray.ray_source_whole: r.update_angle(angle_new / numpy.pi) if event.type == pygame.KEYDOWN: if event.key == 119: #key 'w' keyUP = True elif event.key == 97: #key 'a' keyLEFT = True elif event.key == 115: #key 's' keyDOWN = True elif event.key == 100: #key 'd' keyRIGHT = True if event.type == pygame.KEYUP: if event.key == 119: # key 'w' keyUP = False elif event.key == 97: # key 'a' keyLEFT = False elif event.key == 115: # key 's' keyDOWN = False elif event.key == 100: # key 'd' keyRIGHT = False if keyUP: src_y -= speed if keyLEFT: src_x -= speed if keyDOWN: src_y += speed if keyRIGHT: src_x += speed for r in ray.ray_source_whole: r.update_pos((src_x, src_y)) update() #call update funtion pygame.display.flip()
m.expend(self.N) for i in range(0, self.N): c.coe[i] = self.p * c.coe[i] + m.coe[i] c.coe[i] %= self.q return c def decrypto(self, m): a = self.private_key.StarMult(m, self.N, self.q) for i in range(0, len(a.coe)): if a.coe[i] < 0: a.coe[i] += self.q if a.coe[i] > self.q / 2: a.coe[i] = a.coe[i] - self.q M = a.StarMult(self.Fp, self.N, self.p).polydiv(self.P, self.p)[1] return M """ TEST """ NTRU = ntru(97, 3, 32, Fp=poly([-1, 0, 1, 1]), public_key=poly([1, 2, 0, -2, -1]), private_key=poly([-1, 1, 0, 0, 1])) NTRU.createKey_pair() m = NTRU.encrypto(poly([1, 2, 1, 1, 1, 0, 0, 1, 1])) # M = NTRU.decrypto(m) print(M.coe)
fitness += sum((1 if y[x.index(e)] == eval(attempt) else 0) for e in x) return fitness except: return 0 x = input("What is the input number set, separated with spaces?\n").split() y = input("What is the output number set, separated with spaces?\n").split() z = input("Extra options? (See source for full list.)\n").split(' ') # Options: # 1. Minimum complexity (default is 1) # 2. Charset used (0: basic, 1: advanced) # 3. Maximum complexity (default is 6) #x='1 3 5 7 9 11 13 2 4 6 8 10 12 14'.split() #y='0 0 0 0 0 0 0 5 -10 398053859 -7 -103454 0 2804'.split() x, y = [eval(e) for e in x], [eval(e) for e in y] print('Polynomial Regression:',poly.poly(x,y),'\n') z[0] = 1 if z[0]=='' else int(z[0]) charsets = ["e-0123456789%+*/().","""e\\0123456789%+-_=/*^,.;!()'{}[]:\""""] chars = charsets[int(z[1])] if len(z)>1 else charsets[0] maximum = int(z[2]) if len(z)>2 else 10 fitness, bestFit, indices = 0,0,[0]*z[0] addLen = (len(chars))**z[0] while fitness < len(x): attempt = '' for a in indices: attempt += chars[a] fitness = fit(attempt) if bestFit < fitness: bestFit = fitness print(" {0} received a fitness of {1}.".format(attempt,fitness)) indices[-1] += 1
def test_len(self): a = poly([3,4,5,6,7], 5) g = poly([1,-3,1,0,0,2,-1], 7) self.assertEqual(len(a), 5) self.assertFalse(len(a) == len(g))
def test_init(self): a = poly([3,4,5,6,7], 5) b = poly([6,1,2,9,13,0,0,0,0,0,0,0,0,0,0,0,0,0], 18) self.assertEqual(str(a), "3 4 5 6 7") self.assertEqual(str(b), "6 1 2 9 13")
def __init__(self, x_pos, x_neg, p='inf', λ=1): """ x_pos ∈ R^{n,m_pos} x_neg ∈ R^{n,m_neg} """ n = x_pos.shape[0] m_pos = x_pos.shape[1] m_neg = x_neg.shape[1] assert x_neg.shape[0] is n if p is 1: Q = None c = np.bmat([[zeros(n + 1)], [λ * ones(m_pos + m_neg)], [ones(n)]]) A_ub = np.bmat([\ [ -x_pos.T, ones(m_pos), -eye(m_pos), zeros(m_pos,m_neg), zeros(m_pos,n) ],\ [ x_neg.T, -ones(m_neg), zeros(m_neg,m_pos), -eye(m_neg), zeros(m_neg,n) ],\ [ -eye(n), zeros(n), zeros(n,m_pos), zeros(n,m_neg), -eye(n) ],\ [ eye(n), zeros(n), zeros(n,m_pos), zeros(n,m_neg), -eye(n) ],\ [ zeros(m_pos,n), zeros(m_pos), -eye(m_pos), zeros(m_pos,m_neg), zeros(m_pos,n) ],\ [ zeros(m_neg,n), zeros(m_neg), zeros(m_neg,m_pos), -eye(m_neg), zeros(m_neg,n) ]]) b_ub = np.bmat([\ [ -ones(m_pos) ],\ [ -ones(m_neg) ],\ [ zeros(n) ],\ [ zeros(n) ],\ [ zeros(m_pos) ],\ [ zeros(m_neg) ]]) P = poly(A_ub, b_ub) sol = QP(Q, c, P).solve() self.a = sol[0:n, 0] self.b = sol[n, 0] if p is 2: Q = zeros(n + 1 + m_pos + m_neg, n + 1 + m_pos + m_neg) Q[0:n, 0:n] = 2 * eye(n) c = zeros(n + 1 + m_pos + m_neg, 1) c[(n + 1 + 1 - 1):(n + 1 + m_pos + m_neg)] = λ * ones(m_pos + m_neg, 1) A_ub = np.bmat([\ [ -x_pos.T, ones(m_pos), -eye(m_pos), zeros(m_pos,m_neg) ],\ [ x_neg.T, -ones(m_neg), zeros(m_neg,m_pos), -eye(m_neg) ],\ [ zeros(m_pos,n), zeros(m_pos), -eye(m_pos), zeros(m_pos,m_neg) ],\ [ zeros(m_neg,n), zeros(m_neg), zeros(m_neg,m_pos), -eye(m_neg) ]]) b_ub = np.bmat([\ [ -ones(m_pos) ],\ [ -ones(m_neg) ],\ [ zeros(m_pos) ],\ [ zeros(m_neg) ]\ ]) P = poly(A_ub, b_ub) sol = QP(Q, c, P).solve() self.a = sol[0:n, 0] self.b = sol[n, 0] if p is 'inf': Q = None c = np.bmat([[zeros(n + 1)], [λ * ones(m_pos + m_neg)], [ones(1)]]) A_ub = np.bmat([\ [ -x_pos.T, ones(m_pos), -eye(m_pos), zeros(m_pos,m_neg), zeros(m_pos) ],\ [ x_neg.T, -ones(m_neg), zeros(m_neg,m_pos), -eye(m_neg), zeros(m_neg) ],\ [ -eye(n), zeros(n), zeros(n,m_pos), zeros(n,m_neg), -ones(n) ],\ [ eye(n), zeros(n), zeros(n,m_pos), zeros(n,m_neg), -ones(n) ],\ [ zeros(m_pos,n), zeros(m_pos), -eye(m_pos), zeros(m_pos,m_neg), zeros(m_pos) ],\ [ zeros(m_neg,n), zeros(m_neg), zeros(m_neg,m_pos), -eye(m_neg), zeros(m_neg) ]]) b_ub = np.bmat([\ [ -ones(m_pos) ],\ [ -ones(m_neg) ],\ [ zeros(n) ],\ [ zeros(n) ],\ [ zeros(m_pos) ],\ [ zeros(m_neg) ]]) P = poly(A_ub, b_ub) sol = QP(Q, c, P).solve() self.a = sol[0:n, 0] self.b = sol[n, 0]