00001
00020 #include "problemisda.h"
00021 #include "benchmark.h"
00022 #include "F7-F11.h"
00023 #include <cstdlib>
00024 #include <cstdio>
00025
00026 using namespace realea;
00027
00028 tFitness eval_cec2008(const tGen *x, int dim);
00029
00030 static unsigned m_fun;
00031 static tFitness m_optime;
00032
00033 ProblemISDA::ProblemISDA(unsigned int dim) {
00034 if (dim > 1000) {
00035 dim = 1000;
00036 }
00037
00038 m_ndim = dim;
00039 }
00040
00041 ProblemISDA::~ProblemISDA(void) {
00042 }
00043
00044
00045 tFitness eval_isda(const tGen *s, int dim) {
00046 double x[dim];
00047
00048 for (int i = 0; i < dim; i++) {
00049 x[i] = s[i];
00050 }
00051
00052
00053 if (m_fun >= 1 && m_fun <= 6) {
00054 return eval_func(m_fun, dim, x)-m_optime;
00055 }
00056 else if (m_fun == 7) {
00057 return f_Schwefel2_22(dim, x);
00058 }
00059 else if (m_fun == 8) {
00060 return f_Schwefel1_2(dim, x);
00061 }
00062 else if (m_fun == 9) {
00063 return Extended_f_10(dim, x);
00064 }
00065 else if (m_fun == 10) {
00066 return f_Bohachevsky(dim, x);
00067 }
00068 else if (m_fun == 11) {
00069 return f_Schaffer(dim, x);
00070 }
00071 else {
00072 fprintf(stderr, "Error: fun no valido\n");
00073 exit(1);
00074 }
00075 }
00076
00077 ProblemPtr ProblemISDA::get(unsigned int fun) {
00078 string name;
00079 double min, max, optime;
00080
00081 m_fun = fun;
00082
00083 if (fun == 1) {
00084 min = -100; max = 100;
00085 optime = -450;
00086 }
00087 else if (fun == 2) {
00088 min = -100; max = 100;
00089 optime = -450;
00090 }
00091 else if (fun == 3) {
00092 min = -100; max = 100;
00093 optime = 390;
00094 }
00095 else if (fun == 4) {
00096 min = -5; max = 5;
00097 optime = -330;
00098 }
00099 else if (fun == 5) {
00100 min = -600; max = 600;
00101 optime = -180;
00102 }
00103 else if (fun == 6) {
00104 min = -32; max = 32;
00105 optime = -140;
00106 }
00107 else if (fun == 7) {
00108 min = -10; max = 10;
00109 optime = 0;
00110 }
00111 else if (fun == 8) {
00112 min = -65.536; max = 65.536;
00113 optime = 0;
00114 }
00115 else if (fun == 9) {
00116 min = -10; max = 10;
00117 optime = 0;
00118 }
00119 else if (fun == 10) {
00120 min = -15; max = 15;
00121 optime = 0;
00122 }
00123 else if (fun == 11) {
00124 min = -100; max = 100;
00125 optime = 0;
00126 }
00127
00128 ProblemPtr prob (new Problem());
00129 prob->setDimension(m_ndim);
00130
00131 for (unsigned i = 0; i < m_ndim; ++i) {
00132 prob->setDomainValues(i, min, max, true);
00133 }
00134
00135 m_optime = optime;
00136
00137 prob->setOptimize(0, 0);
00138 prob->setMaxEval(5000*m_ndim);
00139 prob->setMinimize();
00140
00141
00142 prob->setEval(eval_isda);
00143 return prob;
00144 }