Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cb7254c

Browse files
committed
import&export added
1 parent 45f2de1 commit cb7254c

File tree

1 file changed

+96
-52
lines changed

1 file changed

+96
-52
lines changed

src/chicken_swarm.py

Lines changed: 96 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# A basic chicken swarm optimization class.
77
#
88
# Author(s): Lauren Linkous, Jonathan Lundquist
9-
# Last update: june 19, 2025
9+
# Last update: June 28, 2025
1010
##--------------------------------------------------------------------\
1111

1212

@@ -69,13 +69,13 @@ def __init__(self, lbound, ubound, targets,E_TOL, maxit,
6969

7070

7171
#unpack the opt_df standardized vals
72-
boundary = opt_df['BOUNDARY'][0]
73-
RN = opt_df['RN'][0]
74-
HN = opt_df['HN'][0]
75-
MN = opt_df['MN'][0]
76-
CN = opt_df['CN'][0]
77-
G = opt_df['G'][0]
78-
NO_OF_PARTICLES = RN + HN + MN + CN
72+
boundary = int(opt_df['BOUNDARY'][0])
73+
RN = int(opt_df['RN'][0])
74+
HN = int(opt_df['HN'][0])
75+
MN = int(opt_df['MN'][0])
76+
CN = int(opt_df['CN'][0])
77+
G = int(opt_df['G'][0])
78+
NO_OF_PARTICLES = RN + HN + MN + CN
7979

8080

8181
heightl = np.shape(lbound)[0]
@@ -702,51 +702,95 @@ def step(self, suppress_output):
702702
self.debug_message_printout(msg)
703703

704704
def export_swarm(self):
705-
swarm_export = {'lbound': self.lbound,
706-
'ubound': self.ubound,
707-
'M': self.M,
708-
'V': self.V,
709-
'Gb': self.Gb,
710-
'F_Gb': self.F_Gb,
711-
'Pb': self.Pb,
712-
'F_Pb': self.F_Pb,
713-
'targets': self.targets,
714-
'maxit': self.maxit,
715-
'E_TOL': self.E_TOL,
716-
'iter': self.iter,
717-
'current_particle': self.current_particle,
718-
'number_of_particles': self.number_of_particles,
719-
'allow_update': self.allow_update,
720-
'Flist': self.Flist,
721-
'Fvals': self.Fvals,
722-
'Active': self.Active,
723-
'Boundary': self.boundary,
724-
'Mlast': self.Mlast}
705+
#These do NOT export.
706+
# # These are passed objects created at runtim
707+
# self.parent # this is an object in memory at runtime
708+
# self.surrogateOptimizer = # this is an object in memory at runtime
709+
# self.obj_func = # this is an object in memory at runtime
710+
# self.constr_func = # this is an object in memory at runtime
711+
# self.useSurrogateModel = # this NEEDS to match every time. Should be part of the init()
712+
# self.number_decimals = # this can be changed. IT might be interesting to change between runs
713+
# self.boundary = boundary # int. can be chaged, but needs a default
714+
# These export:
715+
716+
717+
swarm_export = {
718+
# These are values that define the swarm and current solution space
719+
# These are retained because the dimensionality of M, F_pb, etc. are strict
720+
'evaluate_threshold': [self.evaluate_threshold],
721+
'obj_threshold': [self.obj_threshold],
722+
'targets': [self.targets],
723+
'lbound': [self.lbound],
724+
'ubound': [self.ubound],
725+
'output_size': [self.output_size], # this can be calculated if needed
726+
# convergence and step criteria
727+
'maxit': [self.maxit],
728+
'E_TOL': [self.E_TOL],
729+
'iter': [self.iter],
730+
'current_particle': [self.current_particle],
731+
'allow_update': [self.allow_update],
732+
# optimizer specfic
733+
'RN': [self.RN],
734+
'HN': [self.HN],
735+
'MN': [self.MN],
736+
'CN': [self.CN],
737+
'G': [self.G],
738+
'number_of_particles': [self.number_of_particles],
739+
# shared format vars for AntennaCAT set
740+
'M': [self.M],
741+
'Active': [self.Active],
742+
'Gb': [self.Gb],
743+
'F_Gb': [self.F_Gb],
744+
'Pb': [self.Pb],
745+
'F_Pb': [self.F_Pb],
746+
'Flist': [self.Flist],
747+
'Fvals': [self.Fvals],
748+
'Mlast': [self.Mlast]
749+
}
725750

726-
return swarm_export
727-
728-
def import_swarm(self, swarm_export, obj_func):
729-
self.lbound = swarm_export['lbound']
730-
self.ubound = swarm_export['ubound']
731-
self.M = swarm_export['M']
732-
self.V = swarm_export['V']
733-
self.Gb = swarm_export['Gb']
734-
self.F_Gb = swarm_export['F_Gb']
735-
self.Pb = swarm_export['Pb']
736-
self.F_Pb = swarm_export['F_Pb']
737-
self.targets = swarm_export['targets']
738-
self.maxit = swarm_export['maxit']
739-
self.E_TOL = swarm_export['E_TOL']
740-
self.iter = swarm_export['iter']
741-
self.current_particle = swarm_export['current_particle']
742-
self.number_of_particles = swarm_export['number_of_particles']
743-
self.allow_update = swarm_export['allow_update']
744-
self.Flist = swarm_export['Flist']
745-
self.Fvals = swarm_export['Fvals']
746-
self.Active = swarm_export['Active']
747-
self.boundary = swarm_export['Boundary']
748-
self.Mlast = swarm_export['Mlast']
749-
self.obj_func = obj_func
751+
return swarm_export # this is turned into a dataframe in the driver class
752+
753+
def import_swarm(self, swarm_export):
754+
755+
# swarm export is a dataframe. this is unpacked and converted just like
756+
# with the initialized opt_df params
757+
758+
# These are values that define the swarm and current solution space
759+
# These are retained because the dimensionality of M, F_pb, etc. are strict
760+
self.evaluate_threshold = bool(swarm_export['evaluate_threshold'][0])
761+
self.obj_threshold = np.array(swarm_export['obj_threshold'][0])
762+
self.targets = np.array(swarm_export['targets'][0]).reshape(-1, 1)
763+
764+
self.lbound = np.array(swarm_export['lbound'][0])
765+
self.ubound = np.array(swarm_export['ubound'][0])
766+
self.output_size = int(swarm_export['output_size'][0]) # this can be calculated if needed
767+
# convergence and step criteria
768+
self.maxit = int(swarm_export['maxit'][0])
769+
self.E_TOL = float(swarm_export['E_TOL'][0])
770+
self.iter = int(swarm_export['iter'][0]) # NEED 'RESUME' and 'START OVER' options
771+
self.current_particle = int(swarm_export['current_particle'][0])
772+
self.allow_update = int(swarm_export['allow_update'][0]) # BOOL as INT
773+
774+
# optimizer specfic
775+
self.RN = int(swarm_export['RN'][0])
776+
self.HN = int(swarm_export['HN'][0])
777+
self.MN = int(swarm_export['MN'][0])
778+
self.CN = int(swarm_export['CN'][0])
779+
self.G = int(swarm_export['G'][0])
780+
self.number_of_particles = int(swarm_export['number_of_particles'][0])
781+
782+
# shared format vars for AntennaCAT set
783+
784+
self.M = np.array(swarm_export['M'][0])
785+
self.Active = np.array(swarm_export['Active'][0])
786+
self.Gb = np.array(swarm_export['Gb'][0])
787+
self.F_Gb = np.array(swarm_export['F_Gb'][0])
788+
self.Pb = np.array(swarm_export['Pb'][0])
789+
self.F_Pb = np.array(swarm_export['F_Pb'][0])
790+
self.Flist = np.array(swarm_export['Flist'][0])
791+
self.Fvals= np.array(swarm_export['Fvals'][0])
792+
self.Mlast= np.array(swarm_export['Mlast'][0])
793+
750794

751795
def get_obj_inputs(self):
752796
return np.vstack(self.M[self.current_particle])

0 commit comments

Comments
 (0)