00001 #include <stdlib.h>
00002
00003 #include "cmlfile.h"
00004 #include "optim_driver.h"
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 optim_driver::optim_driver ( algorithm_type &oat,
00016 obj_funct *oF )
00017 {
00018 if ( !oF ) {
00019 fprintf (stderr,"\n\n You must allocate obj. function first! Exit.");
00020 fprintf (stderr,"\n optim_driver (file %s, line %d).\n",
00021 __FILE__,__LINE__);
00022 exit ( 1 ) ;
00023 }
00024
00025 at=oat ;
00026 switch (at)
00027 {
00028 case alg_sade:{
00029 Sade = new sade ;
00030 Sade->F = oF ;
00031 break ;
00032 }
00033 case alg_grade:{
00034 Grade = new grade ;
00035 Grade->F = oF ;
00036 break ;
00037 }
00038 default:
00039 fprintf (stderr,"\n\n unknown type of optimization algorithm in");
00040 fprintf (stderr,"\n optim_driver (file %s, line %d).\n",
00041 __FILE__,__LINE__);
00042 exit ( 1 ) ;
00043 }
00044
00045 cmlfile f( "parameters.cfg" ) ;
00046
00047 f.set_labels( 10 ) ;
00048 f.set_label_string( 0,"SadePoolRate" ) ;
00049 f.set_label_string( 1,"SadeRadioactivity" ) ;
00050 f.set_label_string( 2,"SadeLocalRadioactivity" ) ;
00051 f.set_label_string( 3,"SadeGradient" ) ;
00052 f.set_label_string( 4,"SadeCrossRate" ) ;
00053 f.set_label_string( 5,"SadeMutationRate" ) ;
00054 f.set_label_string( 6,"SadeMutagenRate" ) ;
00055
00056 f.set_label_string( 7,"GradePoolRate" ) ;
00057 f.set_label_string( 8,"GradeRadioactivity" ) ;
00058 f.set_label_string( 9,"GradeCrossLimit" ) ;
00059
00060 switch (at)
00061 {
00062 case alg_sade:{
00063 f.get_value( 0,Sade->pool_rate ) ;
00064 f.get_value( 1,Sade->radioactivity ) ;
00065 f.get_value( 2,Sade->local_radioactivity ) ;
00066 f.get_value( 3,Sade->gradient ) ;
00067 f.get_value( 4,Sade->cross_rate ) ;
00068 f.get_value( 5,Sade->mutation_rate ) ;
00069 f.get_value( 6,Sade->mutagen_rate ) ;
00070 break;
00071 }
00072 case alg_grade: {
00073 f.get_value( 7,Grade->pool_rate ) ;
00074 f.get_value( 8,Grade->radioactivity ) ;
00075 f.get_value( 9,Grade->cross_limit ) ;
00076 break ;
00077 }
00078 default:
00079 fprintf (stderr,"\n\n unknown type of optimization algorithm in");
00080 fprintf (stderr,"\n optim_driver (file %s, line %d).\n",
00081 __FILE__,__LINE__);
00082 }
00083 f.close() ;
00084 }
00085
00086
00087
00088
00089
00090
00091 optim_driver::~optim_driver ( void )
00092 {
00093 if ( Sade ) delete Sade ;
00094 if ( Grade ) delete Grade ;
00095 }
00096
00097
00098
00099
00100
00101
00102 void optim_driver::run ( long calls_limit )
00103 {
00104 switch (at)
00105 {
00106 case alg_sade:{
00107 Sade->fitness_calls_limit=calls_limit ;
00108 Sade->run() ; break ;
00109 }
00110 case alg_grade:{
00111 Grade->fitness_calls_limit=calls_limit ;
00112 Grade->run() ; break ;
00113 }
00114 default:
00115 fprintf (stderr,"\n\n unknown type of optimization algorithm in");
00116 fprintf (stderr,"\n optim_driver (file %s, line %d).\n",
00117 __FILE__,__LINE__);
00118 exit ( 1 ) ;
00119 }
00120 }
00121