Some checks failed
gitea-physics/pathfinder/pipeline/head There was a failure building this commit
58 lines
1.8 KiB
Python
58 lines
1.8 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)
|
|
|
|
return res.pathfinder_x
|
|
|
|
|
|
def main():
|
|
logging.info("Running script...")
|
|
dot_inputs = list(itertools.chain.from_iterable(
|
|
(([0 + o, 0, .01], f), ([0 + o, -1, 0], f), ([-1 + o, 0, -.01], f), ([-1 + o, -1, .01], f)) for f in numpy.arange(1, 10, .05) for o in (0, 0.5)
|
|
))
|
|
|
|
dipole = pathfinder.model.oscillating.OscillatingDipole([1, 2, 3], [0, 0, -1], 7)
|
|
expected_result = numpy.array([1, 2, 3, 0, 0, -1, 7])
|
|
dipole_arrangement = pathfinder.model.oscillating.OscillatingDipoleArrangement([dipole])
|
|
dot_measurements = dipole_arrangement.get_dot_measurements(dot_inputs)
|
|
|
|
model = pathfinder.model.oscillating.DotOscillatingDipoleModel(dot_measurements, 1)
|
|
logging.info("Finished setting up model")
|
|
|
|
results = []
|
|
rb = -4
|
|
ru = 5
|
|
points_to_try = [(model, expected_result, (0.01 + dx, 0.01 + dy, 0.01 + dz)) for dx in range(rb, ru, 3) for dy in range(rb, ru, 3) for dz in range(rb, ru, 2)]
|
|
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()
|