This repository has been archived on 2022-02-23. You can view files and clone it, but cannot push or open issues or pull requests.
pathfinder/scripts/random_test1.py
Deepak 260c1b0a4e
Some checks failed
gitea-physics/pathfinder/pipeline/pr-master There was a failure building this commit
Adds a bunch for random noise stuff
2021-11-29 14:44:14 -06:00

60 lines
2.0 KiB
Python

import itertools
import logging
import multiprocessing
import numpy
import pathfinder.model.oscillating
def print_result(msg, result):
logging.info(msg)
logging.info(f"\tResult: {result.pathfinder_x}")
logging.info(f"\tSuccess: {result.success}. {result.message}")
try:
logging.info(f"\tFunc evals: {result.nfev}")
except AttributeError:
pass
try:
logging.info(f"\tJacb evals: {result.njev}")
except AttributeError:
pass
def try_initial_position(model, expected_result, initial_pos):
res = model.sol_basinhopping(initial_position=initial_pos)
logging.info(res)
return res.pathfinder_x
def main():
logging.info("Running script...")
dot_inputs = list(itertools.chain.from_iterable(
(([-.8, -5.1, 0], f), ([.5, -1, 0], f), ([.3, 5, 0], f), ([7.3, 6.5, 0], f)) for f in numpy.arange(1, 10, 2)
))
dipole = pathfinder.model.oscillating.OscillatingDipole([1, 2, 3], [.51, -1.2, 0], 8)
expected_result = numpy.array([1, 2, 3, .51, -1.2, 0, 8])
dipole_arrangement = pathfinder.model.oscillating.OscillatingDipoleArrangement([dipole])
dot_measurements = dipole_arrangement.get_dot_measurements(dot_inputs)
dot_measurements_with_error = dipole_arrangement.get_dot_measurements_with_random(dot_inputs)
# model = pathfinder.model.oscillating.DotOscillatingDipoleModel(dot_measurements_with_error, 1)
model = pathfinder.model.oscillating.DotOscillatingDipoleModel(dot_measurements, 1)
logging.info("Finished setting up model")
results = []
rb = -2
ru = 3
interval = 3
points_to_try = [(model, expected_result, (0.01 + dx, 0.01 + dy, 0.01 + dz)) for dx in numpy.arange(rb, ru, interval) for dy in numpy.arange(rb, ru, interval) for dz in range(rb, ru, interval)]
logging.info(f"Will have {len(points_to_try)} points to try")
logging.info("creating pool...")
with multiprocessing.Pool() as pool:
results = pool.starmap(try_initial_position, points_to_try)
logging.info(results)
final_values = [r for r in results if r is not None]
logging.info(final_values)
if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG)
main()