|
@@ -12,9 +12,11 @@
|
|
#include <stdexcept>
|
|
#include <stdexcept>
|
|
#include <string>
|
|
#include <string>
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
const double PI_=3.14159265358979323846;
|
|
const double PI_=3.14159265358979323846;
|
|
const double eps_=1e-11;
|
|
const double eps_=1e-11;
|
|
-long total_generations_ = 15000;
|
|
|
|
|
|
+long total_generations_ = 10000;
|
|
double noise_amp = 1e-8;
|
|
double noise_amp = 1e-8;
|
|
|
|
|
|
// int voxel_num = 10;
|
|
// int voxel_num = 10;
|
|
@@ -30,7 +32,7 @@ double vox[] = {0.822628,0.691376,0.282906,0.226013,0.90703,0.144985,0.328563,0.
|
|
// //double vox[] = {0.822628,0.691376,0.282906,0.226013,0.90703,0.144985};
|
|
// //double vox[] = {0.822628,0.691376,0.282906,0.226013,0.90703,0.144985};
|
|
// double vox[] = {0.822628,0.691376,0.282906,0.226013,0.30703,0.244985};
|
|
// double vox[] = {0.822628,0.691376,0.282906,0.226013,0.30703,0.244985};
|
|
|
|
|
|
-double total_periods = 20;
|
|
|
|
|
|
+double total_periods = 40;
|
|
int rf_samples_per_period = 1;
|
|
int rf_samples_per_period = 1;
|
|
|
|
|
|
std::vector<double> init_vox (vox, vox + sizeof(vox) / sizeof(double) );
|
|
std::vector<double> init_vox (vox, vox + sizeof(vox) / sizeof(double) );
|
|
@@ -56,16 +58,19 @@ jade::SubPopulation sub_population_; // Optimizer.
|
|
|
|
|
|
void InitGenerators();
|
|
void InitGenerators();
|
|
void PrintVector(const std::vector<double> &values);
|
|
void PrintVector(const std::vector<double> &values);
|
|
-void SetOptimizer();
|
|
|
|
|
|
+void SetOptimizer(long dimensions, std::vector<std::vector<double> > x_feed_vectors);
|
|
|
|
|
|
double EvaluateFitness(const std::vector<double> &input){
|
|
double EvaluateFitness(const std::vector<double> &input){
|
|
- return fitness_rf_.TryFit(input);
|
|
|
|
|
|
+ // return fitness_rf_.TryFit(input);
|
|
|
|
+ return fitness_rf_.TryApproximateFit(input);
|
|
};
|
|
};
|
|
|
|
|
|
int main(int argc, char *argv[]) {
|
|
int main(int argc, char *argv[]) {
|
|
|
|
+
|
|
MPI_Init(&argc, &argv);
|
|
MPI_Init(&argc, &argv);
|
|
int rank;
|
|
int rank;
|
|
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
|
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
|
|
|
+
|
|
try {
|
|
try {
|
|
|
|
|
|
InitGenerators();
|
|
InitGenerators();
|
|
@@ -78,21 +83,23 @@ int main(int argc, char *argv[]) {
|
|
generator_rf_.EvaluateDemodulated(mag_sin,mag_cos);
|
|
generator_rf_.EvaluateDemodulated(mag_sin,mag_cos);
|
|
fitness_rf_.SetBase(mag_sin, mag_cos);
|
|
fitness_rf_.SetBase(mag_sin, mag_cos);
|
|
|
|
|
|
- SetOptimizer();
|
|
|
|
|
|
+ std::vector<std::vector<double> > x_feed_vectors;
|
|
|
|
+ x_feed_vectors.push_back(std::vector<double> (2*voxel_num, 0.5));
|
|
|
|
+ SetOptimizer(2*voxel_num, x_feed_vectors);
|
|
sub_population_.FitnessFunction = &EvaluateFitness;
|
|
sub_population_.FitnessFunction = &EvaluateFitness;
|
|
-
|
|
|
|
- // double fit = fitness_rf_.TryFit(origin_values);
|
|
|
|
- // std::cout << fit << std::endl;
|
|
|
|
-
|
|
|
|
- sub_population_.RunOptimization();
|
|
|
|
double fit;
|
|
double fit;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // fit = fitness_rf_.TryApproximateFit(origin_values);
|
|
|
|
+ // std::cout<< std::endl << "========================================================= "<< fit << std::endl;
|
|
|
|
+ sub_population_.RunOptimization();
|
|
auto best_local_x = sub_population_.GetBest(&fit);
|
|
auto best_local_x = sub_population_.GetBest(&fit);
|
|
std::cout << "origin values:\t";
|
|
std::cout << "origin values:\t";
|
|
PrintVector(origin_values);
|
|
PrintVector(origin_values);
|
|
std::cout << " fit values:\t";
|
|
std::cout << " fit values:\t";
|
|
PrintVector(best_local_x);
|
|
PrintVector(best_local_x);
|
|
std::vector<double> diff_vec(origin_values.size());
|
|
std::vector<double> diff_vec(origin_values.size());
|
|
- for (int i = 0; i < origin_values.size(); ++i)
|
|
|
|
|
|
+ for (unsigned int i = 0; i < origin_values.size(); ++i)
|
|
diff_vec[i] = std::abs(origin_values[i]-best_local_x[i])*100;
|
|
diff_vec[i] = std::abs(origin_values[i]-best_local_x[i])*100;
|
|
std::cout << " diff:\t";
|
|
std::cout << " diff:\t";
|
|
PrintVector(diff_vec);
|
|
PrintVector(diff_vec);
|
|
@@ -121,6 +128,7 @@ void InitGenerators() {
|
|
generator_rf_.SetNoiseAmplitude(noise_amp);
|
|
generator_rf_.SetNoiseAmplitude(noise_amp);
|
|
fitness_rf_.InitVoxels(voxel_num, phase_init, phase_range, T2s_scale);
|
|
fitness_rf_.InitVoxels(voxel_num, phase_init, phase_range, T2s_scale);
|
|
fitness_rf_.SetNoiseAmplitude(0.0);
|
|
fitness_rf_.SetNoiseAmplitude(0.0);
|
|
|
|
+ fitness_rf_.InitApproximation();
|
|
|
|
|
|
generator_rf_.InitTimer(total_periods, period_ms, rf_samples_per_period);
|
|
generator_rf_.InitTimer(total_periods, period_ms, rf_samples_per_period);
|
|
fitness_rf_.InitTimer(total_periods, period_ms, rf_samples_per_period);
|
|
fitness_rf_.InitTimer(total_periods, period_ms, rf_samples_per_period);
|
|
@@ -136,21 +144,21 @@ void PrintVector(const std::vector<double> &values) {
|
|
// ********************************************************************** //
|
|
// ********************************************************************** //
|
|
// ********************************************************************** //
|
|
// ********************************************************************** //
|
|
// ********************************************************************** //
|
|
// ********************************************************************** //
|
|
-void SetOptimizer() {
|
|
|
|
- long dimension = 2*voxel_num;
|
|
|
|
- long total_population = dimension * 20;
|
|
|
|
|
|
+void SetOptimizer(long dimension, std::vector<std::vector<double> > x_feed_vectors) {
|
|
|
|
+ long total_population = dimension * 30;
|
|
sub_population_.Init(total_population, dimension);
|
|
sub_population_.Init(total_population, dimension);
|
|
/// Low and upper bound for all dimenstions;
|
|
/// Low and upper bound for all dimenstions;
|
|
sub_population_.SetAllBounds(eps_, 1.0-eps_);
|
|
sub_population_.SetAllBounds(eps_, 1.0-eps_);
|
|
sub_population_.SetTargetToMinimum();
|
|
sub_population_.SetTargetToMinimum();
|
|
sub_population_.SetTotalGenerationsMax(total_generations_);
|
|
sub_population_.SetTotalGenerationsMax(total_generations_);
|
|
|
|
+ sub_population_.SetFeed(x_feed_vectors);
|
|
//sub_population_.SwitchOffPMCRADE();
|
|
//sub_population_.SwitchOffPMCRADE();
|
|
|
|
|
|
//sub_population_.SetBestShareP(0.1);
|
|
//sub_population_.SetBestShareP(0.1);
|
|
//sub_population_.SetAdapitonFrequencyC(1.0/20.0);
|
|
//sub_population_.SetAdapitonFrequencyC(1.0/20.0);
|
|
sub_population_.SetBestShareP(0.1);
|
|
sub_population_.SetBestShareP(0.1);
|
|
sub_population_.SetAdapitonFrequencyC(1.0/20.0);
|
|
sub_population_.SetAdapitonFrequencyC(1.0/20.0);
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
// ********************************************************************** //
|
|
// ********************************************************************** //
|
|
// ********************************************************************** //
|
|
// ********************************************************************** //
|