Skip to content

Commit

Permalink
Merge pull request #67 from youheiakimoto/patch-1
Browse files Browse the repository at this point in the history
A more reliable way to find the mirrored vectors in TPA of restricted_gaussian_sampler
  • Loading branch information
nikohansen authored Apr 27, 2018
2 parents 25b8957 + 364a416 commit a30d025
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions cma/restricted_gaussian_sampler.py
Original file line number Diff line number Diff line change
Expand Up @@ -458,21 +458,31 @@ def update(self, vectors, weights):
np.linalg.norm(vectors[idx[i] + 1]) for i in range(lam)
])
ndx = self.dx / np.linalg.norm(self.dx)
for ip in range(lam):
if np.allclose(nlist[ip], ndx):
break
if ip == lam - 1:
raise RuntimeError("no first mirrored vector found for TPA")
if 11 < 3:
for ip in range(lam):
if np.allclose(nlist[ip], ndx):
break
if ip == lam - 1:
raise RuntimeError("no first mirrored vector found for TPA")
warnings.warn("no first mirrored vector found for TPA",
RuntimeWarning)
for im in range(lam):
if np.allclose(nlist[im], -ndx):
break
if im == lam - 1:
raise RuntimeError("no second mirrored vector found for TPA")
warnings.warn("no second mirrored vector found for TPA",
RuntimeWarning)
else:
inner = [np.dot(ny, ndx) for ny in nlist]
ip = np.argmax(inner)
im = np.argmin(inner)
if inner[ip] < 0.99:
warnings.warn("no first mirrored vector found for TPA",
RuntimeWarning)
for im in range(lam):
if np.allclose(nlist[im], -ndx):
break
if im == lam - 1:
raise RuntimeError("no second mirrored vector found for TPA")
if inner[im] > -0.99:
warnings.warn("no second mirrored vector found for TPA",
RuntimeWarning)

alpha_act = im - ip
alpha_act /= float(lam - 1)
self.ps += self.cs * (alpha_act - self.ps)
Expand Down

0 comments on commit a30d025

Please sign in to comment.