You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Python version: Running on Python version: 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]
Operating System: Ubuntu WSL
Description
I need to optimize a function of >30 arguments using PSO technique.
The function in nonconvex and has a lot of pockets inside.
I know the bounds for each parameter to optimize and the initial guess for each of them.
But I don't get how to pass all this information to PySwarms to get it working.
So I need a very basic example to run and I created next "toy problem" to solve that will help me and others to understand how can I use this package for this kind of problems.
What I Did
I have created a toy-problem function, the parameters of which I need to optimize.
It doesn't works (I don't know why) and that is where I need help for understanding.
Here is the code:
import numpy as np
import pyswarms as ps
# Define the objective function
def objective_function(x):
return ((x[0] - 1)**2 + (x[1]-2)**2 + (x[2] - 3)**2)
# Define the bounds for each element of x
bounds = ([-5]*3, [5]*3)
print('Bounds:')
print(bounds)
# Define the initial guesses for each element of x
initial_guess_1 = np.array([1.0, 2.0, 2.9])
# Define the number of elements to optimize
dimensions = initial_guess_1.size
print('Dimensions:', dimensions)
# defining the number of particles to use:
n_particles = 100
print('Objective function for initial guess:')
print(objective_function(initial_guess_1))
# reshaping to get all the particles initial guess positions?
# I don't know if it's necessary to do this?
initial_guess = initial_guess_1.reshape((1, dimensions))
init_pos = np.tile(initial_guess, (n_particles, 1))
print('Initial guess of one particle:')
print(initial_guess_1)
print('Initial positions for all particles: ')
print(init_pos.shape)
print(init_pos)
# Define the options for the optimizer
options = {
'c1': 0.5, # cognitive parameter
'c2': 0.3, # social parameter
'w': 0.9 # inertia weight
}
# Create a PSO optimizer
optimizer = ps.single.GlobalBestPSO(n_particles=n_particles,
dimensions=dimensions,
options=options,
bounds=bounds,
init_pos=init_pos
)
# Initialize the particles with the initial guesses
#optimizer.pos = init_pos
# Run the optimization
best_cost, best_position= optimizer.optimize(objective_function, iters=1000, verbose=True)
# Print the results
print("Best position:", best_position)
print("Best cost:", best_cost)
print('Func value at best pos', objective_function(best_cost))
It gives an error message:
ValueError: operands could not be broadcast together with shapes (3,) (100,)
The text was updated successfully, but these errors were encountered:
Description
I need to optimize a function of >30 arguments using PSO technique.
The function in nonconvex and has a lot of pockets inside.
I know the bounds for each parameter to optimize and the initial guess for each of them.
But I don't get how to pass all this information to PySwarms to get it working.
So I need a very basic example to run and I created next "toy problem" to solve that will help me and others to understand how can I use this package for this kind of problems.
What I Did
I have created a toy-problem function, the parameters of which I need to optimize.
It doesn't works (I don't know why) and that is where I need help for understanding.
Here is the code:
It gives an error message:
The text was updated successfully, but these errors were encountered: