fig.colorbar(p32, ax=ax32) x_min = a y_min = a**2 scatter_31 = ax31.scatter(x_min, y_min, color='white') scatter_32 = ax32.scatter(x_min, y_min, color='white') #################################################################### # DISPLAY plt.ion() plt.show() for i in range(200): # Compute for Simple Convex swarm_1.step() next(GD_1.gradient_descent(lr=0.1)) for particle in swarm_1.get_particles(): ax11.scatter(*particle) for particle in GD_1.particle_coordinates: ax12.scatter(*particle) # Compute for Ratrigin swarm_2.step() next(GD_2.gradient_descent(lr=0.1)) for particle in swarm_2.get_particles(): ax21.scatter(*particle) for particle in GD_2.particle_coordinates:
sam = Sampler(omega, numerical_step_length, sys) met = Metropolis(step_metropolis, step_importance, num_particles, num_dimensions, sam, 0.0) for i in range(monte_carlo_cycles): new_energy, new_positions, count = met.metropolis(positions) positions = new_positions accumulate_energy += sam.local_energy(positions) accumulate_psi_term += sys.derivative_psi_term(positions) accumulate_both += sam.local_energy_times_wf(positions) expec_val_energy = accumulate_energy / (monte_carlo_cycles * num_particles) expec_val_psi = accumulate_psi_term / (monte_carlo_cycles * num_particles) expec_val_both = accumulate_both / (monte_carlo_cycles * num_particles) derivative_energy = 2 * (expec_val_both - expec_val_psi * expec_val_energy) print('deri energy = ', derivative_energy) print('counter (accepted moves in metropolis) = ', count) return derivative_energy, new_energy for i in range(gradient_iterations): d_El, energy = run_vmc(parameter) new_parameter = opt.gradient_descent(parameter, d_El) parameter = new_parameter print('new alpha = ', new_parameter) print('----------------------------') print('new energy = ', energy)