Anpassungen

This commit is contained in:
2026-02-05 16:54:28 +01:00
parent ac1436a7f7
commit 36e243d6d4
2 changed files with 7 additions and 8 deletions

View File

@@ -49,7 +49,7 @@ def midpoint_fitness(x: tuple) -> float:
return f 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. 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. 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 P0: Startpunkt
:param Pk: Zielpunkt :param Pk: Zielpunkt
:param maxSegLen: maximale Segmentlänge :param maxSegLen: maximale Segmentlänge
:param stopeval: maximale Durchläufe der CMA-ES
:param maxIter: maximale Durchläufe der Mittelpunktsgenerierung :param maxIter: maximale Durchläufe der Mittelpunktsgenerierung
:param all_points: Ergebnisliste mit allen Punkte, die wahlweise mit ausgegeben werden kann :param all_points: Ergebnisliste mit allen Punkte, die wahlweise mit ausgegeben werden kann
:return: Richtungswinkel des Start- und Zielpunktes und Gesamtlänge :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 ell_ES = ell
R0 = (ell.ax + ell.ay + ell.b) / 3 R0 = (ell.ax + ell.ay + ell.b) / 3
if maxSegLen is None: 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 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) sigmaStep = sigma_uv_nom * (Sehne(A, B) / maxSegLen)
u, v = escma(midpoint_fitness, N=2, xmean=xmean, sigma=sigmaStep, stopfitness=-np.inf, u, v = escma(midpoint_fitness, N=2, xmean=xmean, sigma=sigmaStep)
stopeval=stopeval)
P_next = ell.para2cart(u, v) P_next = ell.para2cart(u, v)
new_points.append(P_next) new_points.append(P_next)
@@ -171,7 +169,7 @@ if __name__ == '__main__':
beta1, lamb1 = (0.7, 0.3) beta1, lamb1 = (0.7, 0.3)
P1 = ell.ell2cart(beta1, lamb1) 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 = [] points_num = []
for beta, lamb in zip(betas, lambs): for beta, lamb in zip(betas, lambs):
points_num.append(ell.ell2cart(beta, lamb)) points_num.append(ell.ell2cart(beta, lamb))

View File

@@ -9,8 +9,8 @@ def felli(x):
return float(np.sum((1e6 ** exponents) * (x ** 2))) return float(np.sum((1e6 ** exponents) * (x ** 2)))
def escma(func, *, N=10, xmean=None, sigma=0.5, stopfitness=1e-14, stopeval=None, def escma(func, *, N=10, xmean=None, sigma=0.5, stopfitness=1e-14, stopeval=2000,
func_args=(), func_kwargs=None, seed=None, func_args=(), func_kwargs=None, seed=0,
bestEver = np.inf, noImproveGen = 0, absTolImprove = 1e-12, maxNoImproveGen = 100, sigmaImprove = 1e-12): bestEver = np.inf, noImproveGen = 0, absTolImprove = 1e-12, maxNoImproveGen = 100, sigmaImprove = 1e-12):
if func_kwargs is None: 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) sigma = sigma * np.exp(0.2 + cs / damps)
print(' [CMA-ES] stopfitness erreicht.') print(' [CMA-ES] stopfitness erreicht.')
#print("warning: flat fitness, consider reformulating the objective") #print("warning: flat fitness, consider reformulating the objective")
break
#print(f"{counteval}: {arfitness[0]}") #print(f"{counteval}: {arfitness[0]}")