Skip to content

Commit fc7e7bb

Browse files
committed
fix inversion for natural grad
1 parent 475d510 commit fc7e7bb

2 files changed

Lines changed: 8 additions & 12 deletions

File tree

src/main.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ void run_modcma(parameters::MatrixAdaptationType mat_t, functions::ObjectiveFunc
6363
rng::set_seed(42);
6464
parameters::Modules m;
6565
m.matrix_adaptation = mat_t;
66-
m.elitist = false;
66+
m.elitist = true;
6767
m.active = false;
6868
m.ssa = ssa;
6969
//m.weights = parameters::RecombinationWeights::EQUAL;
@@ -116,10 +116,10 @@ int main()
116116
//run_modcma(parameters::MatrixAdaptationType::NONE, ft, ssa);
117117
//run_modcma(parameters::MatrixAdaptationType::SEPERABLE, ft);
118118
//run_modcma(parameters::MatrixAdaptationType::MATRIX, ft, ssa);
119-
//run_modcma(parameters::MatrixAdaptationType::CHOLESKY, ft);
119+
//run_modcma(parameters::MatrixAdaptationType::CHOLESKY, ft, ssa);
120120
//run_modcma(parameters::MatrixAdaptationType::COVARIANCE_NO_EIGV, ft, ssa);
121-
//run_modcma(parameters::MatrixAdaptationType::NATURAL_GRADIENT, ft, parameters::StepSizeAdaptation::XNES);
122-
run_modcma(parameters::MatrixAdaptationType::NATURAL_GRADIENT, ft, parameters::StepSizeAdaptation::MXNES);
121+
run_modcma(parameters::MatrixAdaptationType::NATURAL_GRADIENT, ft, parameters::StepSizeAdaptation::XNES);
122+
run_modcma(parameters::MatrixAdaptationType::NATURAL_GRADIENT, ft, ssa);
123123
//run_modcma(parameters::MatrixAdaptationType::NATURAL_GRADIENT, ft, parameters::StepSizeAdaptation::LPXNES);
124124
run_modcma(parameters::MatrixAdaptationType::COVARIANCE, ft, ssa);
125125
}

src/matrix_adaptation.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ namespace matrix_adaptation
392392

393393
void NaturalGradientAdaptation::adapt_evolution_paths_inner(const Population& pop, const parameters::Weights& w, const parameters::Stats& stats, size_t mu, size_t lambda)
394394
{
395-
ps = (1.0 - w.cs) * ps + (w.sqrt_cs_mueff * A.triangularView<Eigen::Lower>().solve(dm));
395+
ps = (1.0 - w.cs) * ps + (w.sqrt_cs_mueff * dz);
396396
}
397397

398398
bool NaturalGradientAdaptation::adapt_matrix(
@@ -410,21 +410,16 @@ namespace matrix_adaptation
410410
const auto& z = pop.Z.col(i);
411411
G.noalias() += w.positive(i) * (z * z.transpose() - I);
412412
}
413-
414-
415-
//std::cout << A << std::endl << std::endl;
416413

417414
// Remove isotropic (sigma-related) component: make G trace-free
418415
G -= (G.trace() / dd) * I;
419416

420417
// Ensure symmetry for numerical stability
421-
G = 0.5 * (G + G.transpose().eval());
418+
G = 0.5 * (G + G.transpose().eval());
422419

423420
// Apply the exponential update to A
424421
A *= ((0.5 * eta) * G).exp();
425422

426-
//std::cout << A << std::endl << std::endl << std::endl;
427-
428423
return true;
429424
}
430425

@@ -442,7 +437,8 @@ namespace matrix_adaptation
442437

443438
Vector NaturalGradientAdaptation::invert_y(const Vector& yi)
444439
{
445-
return A.triangularView<Eigen::Lower>().solve(yi);
440+
//return A.triangularView<Eigen::Lower>().solve(yi);
441+
return A.fullPivLu().solve(yi);
446442
}
447443

448444
}

0 commit comments

Comments
 (0)