From 36e243d6d431000899d89b1afae34f101f23e7d3 Mon Sep 17 00:00:00 2001 From: Nico Date: Thu, 5 Feb 2026 16:54:28 +0100 Subject: [PATCH] Anpassungen --- GHA_triaxial/gha2_ES.py | 10 ++++------ Hansen_ES_CMA.py | 5 +++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/GHA_triaxial/gha2_ES.py b/GHA_triaxial/gha2_ES.py index d403b02..3ed29aa 100644 --- a/GHA_triaxial/gha2_ES.py +++ b/GHA_triaxial/gha2_ES.py @@ -49,7 +49,7 @@ def midpoint_fitness(x: tuple) -> float: return f -def gha2_ES(ell: EllipsoidTriaxial, P0: NDArray, Pk: NDArray, maxSegLen: float = None, stopeval: int = 2000, maxIter: int = 10000, all_points: bool = False): +def gha2_ES(ell: EllipsoidTriaxial, P0: NDArray, Pk: NDArray, maxSegLen: float = None, maxIter: int = 10000, all_points: bool = False): """ Berechnen der 2. GHA mithilfe der CMA-ES. Die CMA-ES optimiert sukzessive den Mittelpunkt zwischen Start- und Zielpunkt. Der Abbruch der Berechnung erfolgt, wenn alle Segmentlängen <= maxSegLen sind. @@ -58,7 +58,6 @@ def gha2_ES(ell: EllipsoidTriaxial, P0: NDArray, Pk: NDArray, maxSegLen: float = :param P0: Startpunkt :param Pk: Zielpunkt :param maxSegLen: maximale Segmentlänge - :param stopeval: maximale Durchläufe der CMA-ES :param maxIter: maximale Durchläufe der Mittelpunktsgenerierung :param all_points: Ergebnisliste mit allen Punkte, die wahlweise mit ausgegeben werden kann :return: Richtungswinkel des Start- und Zielpunktes und Gesamtlänge @@ -67,7 +66,7 @@ def gha2_ES(ell: EllipsoidTriaxial, P0: NDArray, Pk: NDArray, maxSegLen: float = ell_ES = ell R0 = (ell.ax + ell.ay + ell.b) / 3 if maxSegLen is None: - maxSegLen = R0 * 1 / (637.4) # 10km Segment bei mittleren Erdradius + maxSegLen = R0 * 1 / (637.4*2) # 10km Segment bei mittleren Erdradius sigma_uv_nom = 1e-3 * (maxSegLen / R0) # ~1e-5 @@ -101,8 +100,7 @@ def gha2_ES(ell: EllipsoidTriaxial, P0: NDArray, Pk: NDArray, maxSegLen: float = sigmaStep = sigma_uv_nom * (Sehne(A, B) / maxSegLen) - u, v = escma(midpoint_fitness, N=2, xmean=xmean, sigma=sigmaStep, stopfitness=-np.inf, - stopeval=stopeval) + u, v = escma(midpoint_fitness, N=2, xmean=xmean, sigma=sigmaStep) P_next = ell.para2cart(u, v) new_points.append(P_next) @@ -171,7 +169,7 @@ if __name__ == '__main__': beta1, lamb1 = (0.7, 0.3) P1 = ell.ell2cart(beta1, lamb1) - alpha0, alpha1, s_num, betas, lambs = gha2_num(ell, beta0, lamb0, beta1, lamb1, n=10000, all_points=True) + alpha0, alpha1, s_num, betas, lambs = gha2_num(ell, beta0, lamb0, beta1, lamb1, n=1000, all_points=True) points_num = [] for beta, lamb in zip(betas, lambs): points_num.append(ell.ell2cart(beta, lamb)) diff --git a/Hansen_ES_CMA.py b/Hansen_ES_CMA.py index 6a7311f..055e3ee 100644 --- a/Hansen_ES_CMA.py +++ b/Hansen_ES_CMA.py @@ -9,8 +9,8 @@ def felli(x): return float(np.sum((1e6 ** exponents) * (x ** 2))) -def escma(func, *, N=10, xmean=None, sigma=0.5, stopfitness=1e-14, stopeval=None, - func_args=(), func_kwargs=None, seed=None, +def escma(func, *, N=10, xmean=None, sigma=0.5, stopfitness=1e-14, stopeval=2000, + func_args=(), func_kwargs=None, seed=0, bestEver = np.inf, noImproveGen = 0, absTolImprove = 1e-12, maxNoImproveGen = 100, sigmaImprove = 1e-12): if func_kwargs is None: @@ -142,6 +142,7 @@ def escma(func, *, N=10, xmean=None, sigma=0.5, stopfitness=1e-14, stopeval=None sigma = sigma * np.exp(0.2 + cs / damps) print(' [CMA-ES] stopfitness erreicht.') #print("warning: flat fitness, consider reformulating the objective") + break #print(f"{counteval}: {arfitness[0]}")