verschrottungwahrscheinlich.../optimized_mortality.py
2020-10-08 12:10:01 +02:00

31 lines
1.2 KiB
Python

import pickle
import numpy as np
from pyswarm import pso
from calculations import steady_state_population
from load_real_data import real_mortality_distribution, real_population_distribution
def optimized_mortality_distribution() -> np.ndarray:
population_distribution = real_population_distribution()
initial_mortality = real_mortality_distribution()
upper_bound = 0.20 * np.ones(initial_mortality.shape)
lower_bound = 0.01 * np.ones(initial_mortality.shape)
def _inner(x):
mortality = np.array(x)
try:
steady_state_population_distribution = steady_state_population(mortality,
total_population=sum(population_distribution))
except Exception:
return 1e100
population_error = np.sum(np.abs(steady_state_population_distribution-population_distribution))/sum(population_distribution)
return population_error
xopt, fopt = pso(_inner, lower_bound, upper_bound, swarmsize=1000, maxiter=100, debug=True)
with open("output/swarm-mortality.pickle", "wb") as fp:
pickle.dump(xopt, fp)
if __name__ == "__main__":
optimized_mortality_distribution()