Anpassungen
This commit is contained in:
@@ -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))
|
||||||
|
|||||||
@@ -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]}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user