Esempio n. 1
0
 def test_reset_just_moved(self):
     position = Position()
     particle = Particle("R")
     position.add_particle(particle)
     position.particles[0].is_just_moved = True
     position.reset_just_moved()
     self.assertEqual(position.particles[0].is_just_moved, False)
    def generate_particles(self, number_of_new_particles):
        """Create a new particle at the generator's location and give it an initial velocity"""
        # In the callback case the implementer controls it all, including the number
        # create an empty list to hold the data
        particle_data = []
        if self.callback:
            # We have a callback, so delegate all of the work....
            particle_data = self.callback()
        else:
            # No callback, so make some random ones by default
            for particle_index in range(0, number_of_new_particles):
                new_data = (random.randint(-2, 2), random.randint(5, 20) * -1,
                            (random.randint(0, 255), random.randint(0, 255),
                             random.randint(0, 255)))
                particle_data.append(new_data)

        # Callback or not, at this point we should have a list of particle data
        for particle_info in particle_data:
            # Create a new particle object
            new_particle = Particle(self.screen, self.settings, self.x, self.y,
                                    particle_info[0], particle_info[1],
                                    random.randint(1, 4), particle_info[2])

            # Add it to the list to track/draw
            self.particles.append(new_particle)
Esempio n. 3
0
 def test_position_is_empty(self):
     position = Position()
     self.assertEqual(position.particles, [])
     self.assertEqual(position.is_empty(), True)
     particle = Particle("L")
     position.add_particle(particle)
     self.assertEqual(position.is_empty(), False)
     self.assertEqual(position.particles, [particle])
Esempio n. 4
0
    def __minimize(self,
                   constFunc,
                   x0,
                   bounds,
                   num_particles,
                   maxiter,
                   verbose=False):
        err_best_g = -1
        pos_best_g = []

        swarm = []

        for i in range(0, num_particles):
            swarm.append(Particle(x0))

        i = 0
        while i < maxiter:

            if verbose:
                print(f'iter: {i:>4d}, best solution: {err_best_g:10.6f}')

            for j in range(0, num_particles):
                swarm[j].evaluate(constFunc)

                if swarm[j].err < err_best_g or err_best_g == -1:
                    pos_best_g = list(swarm[j].position)
                    err_best_g = float(swarm[j].err)

            for j in range(num_particles):
                swarm[j].update_velocity(pos_best_g)
                swarm[j].update_position(bounds)
            i = i + 1

        print('\nFINAL SOLUTION:')
        print(f'   > {pos_best_g}')
        print(f'   > {err_best_g}\n')
def test_visualize() -> None:
    particles = [Particle(0.3, 0.5), Particle(0.0, -0.5), Particle(-0.1, -0.4)]
    simulator = Simulator(particles)
    visualize(simulator)
Esempio n. 6
0
 def test_remove_particle(self):
     position = Position()
     particle = Particle("R")
     position.add_particle(particle)
     position.remove_particle(0)
     self.assertEqual(position.is_empty(), True)
Esempio n. 7
0
 def test_particle_creation(self):
     particle = Particle("L")
     self.assertEqual(particle.direction, "L")
     self.assertEqual(particle.is_just_moved, False)
import sys
import matplotlib.pylab as plt
import numpy as np

from os import path

sys.path.append(path.dirname(path.dirname(
    path.abspath(__file__))))  # adds src to module list

from src.particle import Particle
from src.particle import Spherical_Plummer_Vectorized

p = Particle([1., 0., 0., 0., 0., 0., 0.], 1.)
p_resample = p.Resample_Plummer_Positions(1000000)
r = [np.linalg.norm(x) for x in p_resample]

bin_edges = np.linspace(-1, 1, 51)
bins = bin_edges[1:] - (bin_edges[1] - bin_edges[0])
x_hist, _ = np.histogram(p_resample.T[0], bins=bin_edges)
y_hist, _ = np.histogram(p_resample.T[1], bins=bin_edges)
z_hist, _ = np.histogram(p_resample.T[2], bins=bin_edges)

r_bin_edges = np.linspace(0, 10., 101)
r_bins = r_bin_edges[1:] - (r_bin_edges[1] - r_bin_edges[0])
r_hist, _ = np.histogram(r, bins=r_bin_edges, normed=True)

plt.plot(r_bins, r_hist)
plt.plot(r_bins, Spherical_Plummer_Vectorized(r_bins, 1))
plt.show()

plt.plot(bins, x_hist, lw=2)