18 #include <utility/exit.hh>
19 #include <numeric/random/random.hh>
21 #include <ObjexxFCL/format.hh>
25 #include <utility/vector1.hh>
28 static numeric::random::RandomGenerator
my_RG(6172008);
31 namespace optimization {
33 using namespace ObjexxFCL::fmt;
38 os <<
" best fitness: " << ObjexxFCL::fmt::F( 9,5,-1.0 * p.
fitness_pbest() )
39 <<
", current fitness: " << ObjexxFCL::fmt::F( 9,6,-1.0 * p.
fitness_ ) <<
", current dofs: [";
40 for (
core::Size i=1; i <= p.
p_.size(); ++i ) { os << ObjexxFCL::fmt::F( 8,4,p.
p_[i] ) <<
", "; }
49 return a->fitness_pbest() > b->fitness_pbest();
54 utility::pointer::ReferenceCount(),
56 C_inertia_start_(0.9),
85 for(
Size i = 1; i <= num_part; ++i) {
96 particles.push_back(p);
98 run(num_cycles, f_fitness, particles);
106 for(
Size i = 1; i <= num_part; ++i) {
109 p->p_[j] = init_values[j] +
my_RG.uniform() -
my_RG.uniform();
112 if ( p->p_[j] <
p_min_[j] ) { p->p_[j] =
my_RG.uniform(); }
113 else if ( p->p_[j] >
p_max_[j] ) { p->p_[j] =
p_max_[j]; }
121 particles.push_back(p);
123 run(num_cycles, f_fitness, particles);
130 Size const N = particles.size();
133 for(
Size i = 1; i <=
N; ++i) {
134 particles[i]->ensure_size(
size_ );
136 for(
Size cycle = 1; cycle <= num_cycles; ++cycle) {
138 Real const frac_done =
Real(cycle) /
Real(num_cycles > 1 ? num_cycles-1 : 1);
155 for(
Size i = 1; i <=
N; ++i) {
162 else if ( j >
int(N) ) j -= N;
163 if ( lbests[i]->fitness_ < particles[j]->fitness_ )
164 lbests[i] = particles[j];
168 for(
Size i = 1; i <=
N; ++i) {
169 if( gbest->fitness_ < particles[i]->fitness_ ) {
176 gbest = particles[i];
181 for(
Size j = 1; j <=
N; ++j) {
185 Real const pi = p->p_[i];
187 Real vi = ( C_inertia*p->v_[i]
208 else if( vi < -vmax )
218 for(
Size j = 1; j <=
N; ++j) {
221 Real ppi = p->p_[i] + p->v_[i];
228 else if( ppi >
p_max_[i] )
242 std::sort(particles.begin(), particles.end(),
cmp_particles);
247 Size const N = particles.size();
248 for(
Size i = 1; i <=
N; ++i) {
249 particles[i]->score(f_fitness);
258 std::cout << header <<
", particle: " << I(2,i);
259 std::cout << *p << std::endl;