00001
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071 #include <MOO-EALib/IndividualMOO.h>
00072 #include <EALib/Individual.h>
00073 #include <typeinfo>
00074
00075
00076 using namespace std;
00077
00078
00079
00080
00081 IndividualMOO::IndividualMOO()
00082 : Individual()
00083 {
00084 MOOFitness.resize( 1, 0 );
00085 UnpenalizedMOOFitness.resize( 1, 0 );
00086 setMOORank(0);
00087 setMOOShare(0.0);
00088 }
00089
00090
00091
00092
00093 IndividualMOO::IndividualMOO(unsigned n)
00094 : Individual(n)
00095 {
00096 MOOFitness.resize( 1, 0 );
00097 UnpenalizedMOOFitness.resize( 1, 0 );
00098 setMOORank(0);
00099 setMOOShare(0.0);
00100 }
00101
00102
00103
00104
00105 IndividualMOO::IndividualMOO(unsigned n, const Chromosome& chrom1)
00106 : Individual(n, chrom1)
00107 {
00108 MOOFitness.resize( 1, 0 );
00109 UnpenalizedMOOFitness.resize( 1, 0 );
00110 setMOORank(0);
00111 setMOOShare(0.0);
00112 }
00113
00114
00115
00116
00117 IndividualMOO::IndividualMOO(const Chromosome& chrom1)
00118 : Individual(chrom1)
00119 {
00120 MOOFitness.resize( 1, 0 );
00121 UnpenalizedMOOFitness.resize( 1, 0 );
00122 setMOORank(0);
00123 setMOOShare(0.0);
00124 }
00125
00126
00127
00128
00129 IndividualMOO::IndividualMOO(const Chromosome& chrom1,
00130 const Chromosome& chrom2)
00131 : Individual(chrom1, chrom2)
00132 {
00133 MOOFitness.resize( 1, 0 );
00134 UnpenalizedMOOFitness.resize( 1, 0 );
00135 setMOORank(0);
00136 setMOOShare(0.0);
00137 }
00138
00139
00140
00141
00142 IndividualMOO::IndividualMOO(const Chromosome& chrom1,
00143 const Chromosome& chrom2,
00144 const Chromosome& chrom3)
00145 : Individual(chrom1, chrom2, chrom3)
00146 {
00147 MOOFitness.resize( 1, 0 );
00148 UnpenalizedMOOFitness.resize( 1, 0 );
00149 setMOORank(0);
00150 setMOOShare(0.0);
00151 }
00152
00153
00154
00155
00156 IndividualMOO::IndividualMOO(const Chromosome& chrom1,
00157 const Chromosome& chrom2,
00158 const Chromosome& chrom3,
00159 const Chromosome& chrom4)
00160 : Individual(chrom1, chrom2, chrom3, chrom4)
00161 {
00162 MOOFitness.resize( 1, 0 );
00163 UnpenalizedMOOFitness.resize( 1, 0 );
00164 setMOORank(0);
00165 setMOOShare(0.0);
00166 }
00167
00168
00169
00170
00171 IndividualMOO::IndividualMOO(const Chromosome& chrom1,
00172 const Chromosome& chrom2,
00173 const Chromosome& chrom3,
00174 const Chromosome& chrom4,
00175 const Chromosome& chrom5)
00176 : Individual(chrom1, chrom2, chrom3, chrom4, chrom5)
00177 {
00178 MOOFitness.resize( 1, 0 );
00179 UnpenalizedMOOFitness.resize( 1, 0 );
00180 setMOORank(0);
00181 setMOOShare(0.0);
00182 }
00183
00184
00185
00186
00187 IndividualMOO::IndividualMOO(const Chromosome& chrom1,
00188 const Chromosome& chrom2,
00189 const Chromosome& chrom3,
00190 const Chromosome& chrom4,
00191 const Chromosome& chrom5,
00192 const Chromosome& chrom6)
00193 : Individual(chrom1, chrom2, chrom3, chrom4, chrom5, chrom6)
00194 {
00195 MOOFitness.resize( 1, 0 );
00196 UnpenalizedMOOFitness.resize( 1, 0 );
00197 setMOORank(0);
00198 setMOOShare(0.0);
00199 }
00200
00201
00202
00203
00204 IndividualMOO::IndividualMOO(const Chromosome& chrom1,
00205 const Chromosome& chrom2,
00206 const Chromosome& chrom3,
00207 const Chromosome& chrom4,
00208 const Chromosome& chrom5,
00209 const Chromosome& chrom6,
00210 const Chromosome& chrom7)
00211 : Individual(chrom1, chrom2, chrom3, chrom4, chrom5, chrom6, chrom7)
00212 {
00213 MOOFitness.resize( 1, 0 );
00214 UnpenalizedMOOFitness.resize( 1, 0 );
00215 setMOORank(0);
00216 setMOOShare(0.0);
00217 }
00218
00219
00220
00221
00222 IndividualMOO::IndividualMOO(const Chromosome& chrom1,
00223 const Chromosome& chrom2,
00224 const Chromosome& chrom3,
00225 const Chromosome& chrom4,
00226 const Chromosome& chrom5,
00227 const Chromosome& chrom6,
00228 const Chromosome& chrom7,
00229 const Chromosome& chrom8)
00230 : Individual(chrom1, chrom2, chrom3, chrom4, chrom5, chrom6, chrom7, chrom8)
00231 {
00232 MOOFitness.resize( 1, 0 );
00233 UnpenalizedMOOFitness.resize( 1, 0 );
00234 setMOORank(0);
00235 setMOOShare(0.0);
00236 }
00237
00238
00239
00240
00241 IndividualMOO::IndividualMOO(const vector< Chromosome* >& chrom1)
00242 : Individual(chrom1)
00243 {
00244 MOOFitness.resize( 1, 0 );
00245 UnpenalizedMOOFitness.resize( 1, 0 );
00246 setMOORank(0);
00247 setMOOShare(0.0);
00248 }
00249
00250
00251
00252
00253 IndividualMOO::IndividualMOO(const Individual& indiv1)
00254 : Individual(indiv1)
00255 {
00256 MOOFitness.resize( 1, 0 );
00257 UnpenalizedMOOFitness.resize( 1, 0 );
00258 setMOORank(0);
00259 setMOOShare(0.0);
00260 }
00261
00262
00263
00264
00265 IndividualMOO::IndividualMOO(const IndividualMOO& indmoo)
00266 : Individual(dynamic_cast< const Individual& >(indmoo))
00267 {
00268 unsigned i;
00269
00270 MOOFitness.resize(indmoo.MOOFitness.size());
00271 for (i = indmoo.MOOFitness.size(); i--;)
00272 {
00273 setMOOFitness(i, indmoo.MOOFitness[i]);
00274 }
00275 UnpenalizedMOOFitness.resize(indmoo.UnpenalizedMOOFitness.size());
00276 for (i = indmoo.UnpenalizedMOOFitness.size(); i--;)
00277 {
00278 setUnpenalizedMOOFitness(i, indmoo.UnpenalizedMOOFitness[i]);
00279 }
00280 setMOORank(indmoo.MOORank);
00281 setMOOShare(indmoo.MOOShare);
00282 fitness = indmoo.fitness;
00283 scaledFitness = indmoo.scaledFitness;
00284 evalFlg = indmoo.evalFlg;
00285 feasible = indmoo.feasible;
00286 selProb = indmoo.selProb;
00287 numCopies = indmoo.numCopies;
00288 elitist = indmoo.elitist;
00289 age = indmoo.age;
00290 }
00291
00292
00293
00294
00295 IndividualMOO::~IndividualMOO()
00296 { }
00297
00298
00299
00300
00301
00302 unsigned IndividualMOO::totalSize() const
00303 {
00304 return Individual::totalSize();
00305 }
00306
00307
00308
00309
00310 void IndividualMOO::setEvalFlg(bool flg)
00311 {
00312 if (flg)
00313 {
00314 Individual::setEvaluationFlag();
00315 }
00316 else
00317 {
00318 Individual::clearEvaluationFlag();
00319 }
00320 }
00321
00322
00323
00324
00325
00326 void IndividualMOO::setLearnTime(unsigned lt)
00327 {
00328 Individual::setLearnTime(lt);
00329 }
00330
00331
00332
00333
00334 unsigned IndividualMOO::getLearnTime() const
00335 {
00336 return Individual::getLearnTime();
00337 }
00338
00339
00340
00341
00342 void IndividualMOO::setNoOfObj(unsigned n)
00343 {
00344 MOOFitness.resize(n);
00345 UnpenalizedMOOFitness.resize(n);
00346 initializeMOOFitness(0.0);
00347 initializeUnpenalizedMOOFitness(0.0);
00348 }
00349
00350
00351
00352
00353 unsigned IndividualMOO::getNoOfObj() const
00354 {
00355 return MOOFitness.size();
00356 }
00357
00358
00359
00360
00361 void IndividualMOO::setMOORank(unsigned n)
00362 {
00363 MOORank = n;
00364 }
00365
00366
00367
00368
00369 unsigned IndividualMOO::getMOORank() const
00370 {
00371 return MOORank;
00372 }
00373
00374
00375
00376
00377 void IndividualMOO::setMOOShare(double n)
00378 {
00379 MOOShare = n;
00380 }
00381
00382
00383
00384
00385 double IndividualMOO::getMOOShare() const
00386 {
00387 return MOOShare;
00388 }
00389
00390
00391
00392
00393 const std::vector<double> & IndividualMOO::getMOOFitnessValues( bool unpenalized ) const {
00394 return (unpenalized ? getUnpenalizedMOOFitnessValues() : getMOOFitnessValues());
00395 }
00396
00397 std::vector<double> & IndividualMOO::getMOOFitnessValues(bool unpenalized) {
00398 return (unpenalized ? getUnpenalizedMOOFitnessValues() : getMOOFitnessValues());
00399 }
00400
00401
00402
00403 void IndividualMOO::setMOOFitness(unsigned nof, double fit)
00404 {
00405 RANGE_CHECK(nof < MOOFitness.size())
00406 MOOFitness[nof] = fit;
00407 }
00408
00409
00410
00411
00412 double IndividualMOO::getMOOFitness(unsigned nof)
00413 {
00414 RANGE_CHECK(nof < MOOFitness.size())
00415 return MOOFitness[nof];
00416 }
00417
00418
00419
00420
00421 void IndividualMOO::setMOOFitnessValues(double f0)
00422 {
00423 RANGE_CHECK(0 < MOOFitness.size())
00424 MOOFitness[0] = f0;
00425 }
00426
00427
00428
00429
00430 void IndividualMOO::setMOOFitnessValues(double f0, double f1)
00431 {
00432 RANGE_CHECK(1 < MOOFitness.size())
00433 MOOFitness[0] = f0;
00434 MOOFitness[1] = f1;
00435 }
00436
00437
00438
00439
00440 void IndividualMOO::setMOOFitnessValues(double f0, double f1,
00441 double f2)
00442 {
00443 RANGE_CHECK(2 < MOOFitness.size())
00444 MOOFitness[0] = f0;
00445 MOOFitness[1] = f1;
00446 MOOFitness[2] = f2;
00447 }
00448
00449
00450
00451
00452 void IndividualMOO::setMOOFitnessValues(double f0, double f1,
00453 double f2, double f3)
00454 {
00455 RANGE_CHECK(3 < MOOFitness.size())
00456 MOOFitness[0] = f0;
00457 MOOFitness[1] = f1;
00458 MOOFitness[2] = f2;
00459 MOOFitness[3] = f3;
00460 }
00461
00462
00463
00464
00465 void IndividualMOO::setMOOFitnessValues(double f0, double f1,
00466 double f2, double f3,
00467 double f4)
00468 {
00469 RANGE_CHECK(4 < MOOFitness.size())
00470 MOOFitness[0] = f0;
00471 MOOFitness[1] = f1;
00472 MOOFitness[2] = f2;
00473 MOOFitness[3] = f3;
00474 MOOFitness[4] = f4;
00475 }
00476
00477
00478
00479
00480 void IndividualMOO::setMOOFitnessValues(double f0, double f1,
00481 double f2, double f3,
00482 double f4, double f5)
00483 {
00484 RANGE_CHECK(5 < MOOFitness.size())
00485 MOOFitness[0] = f0;
00486 MOOFitness[1] = f1;
00487 MOOFitness[2] = f2;
00488 MOOFitness[3] = f3;
00489 MOOFitness[4] = f4;
00490 MOOFitness[5] = f5;
00491 }
00492
00493
00494
00495
00496 void IndividualMOO::setMOOFitnessValues(double f0, double f1,
00497 double f2, double f3,
00498 double f4, double f5,
00499 double f6)
00500 {
00501 RANGE_CHECK(6 < MOOFitness.size())
00502 MOOFitness[0] = f0;
00503 MOOFitness[1] = f1;
00504 MOOFitness[2] = f2;
00505 MOOFitness[3] = f3;
00506 MOOFitness[4] = f4;
00507 MOOFitness[5] = f5;
00508 MOOFitness[6] = f6;
00509 }
00510
00511
00512
00513
00514 void IndividualMOO::setMOOFitnessValues(double f0, double f1,
00515 double f2, double f3,
00516 double f4, double f5,
00517 double f6, double f7)
00518 {
00519 RANGE_CHECK(7 < MOOFitness.size())
00520 MOOFitness[0] = f0;
00521 MOOFitness[1] = f1;
00522 MOOFitness[2] = f2;
00523 MOOFitness[3] = f3;
00524 MOOFitness[4] = f4;
00525 MOOFitness[5] = f5;
00526 MOOFitness[6] = f6;
00527 MOOFitness[7] = f7;
00528 }
00529
00530
00531
00532
00533 void IndividualMOO::setMOOFitnessValues(vector< double >& fit)
00534 {
00535 RANGE_CHECK(fit.size() == MOOFitness.size())
00536 for (unsigned i = fit.size(); i--;)
00537 {
00538 MOOFitness[i] = fit[i];
00539 }
00540 }
00541
00542
00543
00544
00545 const vector<double> & IndividualMOO::getMOOFitnessValues() const {
00546 return MOOFitness;
00547 }
00548
00549 vector< double >& IndividualMOO::getMOOFitnessValues() {
00550 return MOOFitness;
00551 }
00552
00553
00554
00555
00556 void IndividualMOO::initializeMOOFitness(double x)
00557 {
00558 for (unsigned i = MOOFitness.size(); i--;)
00559 {
00560 MOOFitness[i] = x;
00561 }
00562 }
00563
00564
00565
00566
00567 void IndividualMOO::setUnpenalizedMOOFitness(unsigned nof, double fit)
00568 {
00569 RANGE_CHECK(nof < UnpenalizedMOOFitness.size())
00570 UnpenalizedMOOFitness[nof] = fit;
00571 }
00572
00573
00574
00575
00576 double IndividualMOO::getUnpenalizedMOOFitness(unsigned nof)
00577 {
00578 RANGE_CHECK(nof < UnpenalizedMOOFitness.size())
00579 return UnpenalizedMOOFitness[nof];
00580 }
00581
00582
00583
00584
00585 void IndividualMOO::setUnpenalizedMOOFitnessValues(double f0)
00586 {
00587 RANGE_CHECK(0 < UnpenalizedMOOFitness.size())
00588 UnpenalizedMOOFitness[0] = f0;
00589 }
00590
00591
00592
00593
00594 void IndividualMOO::setUnpenalizedMOOFitnessValues(double f0, double f1)
00595 {
00596 RANGE_CHECK(1 < UnpenalizedMOOFitness.size())
00597 UnpenalizedMOOFitness[0] = f0;
00598 UnpenalizedMOOFitness[1] = f1;
00599 }
00600
00601
00602
00603
00604 void IndividualMOO::setUnpenalizedMOOFitnessValues(double f0, double f1,
00605 double f2)
00606 {
00607 RANGE_CHECK(2 < UnpenalizedMOOFitness.size())
00608 UnpenalizedMOOFitness[0] = f0;
00609 UnpenalizedMOOFitness[1] = f1;
00610 UnpenalizedMOOFitness[2] = f2;
00611 }
00612
00613
00614
00615
00616 void IndividualMOO::setUnpenalizedMOOFitnessValues(double f0, double f1,
00617 double f2, double f3)
00618 {
00619 RANGE_CHECK(3 < UnpenalizedMOOFitness.size())
00620 UnpenalizedMOOFitness[0] = f0;
00621 UnpenalizedMOOFitness[1] = f1;
00622 UnpenalizedMOOFitness[2] = f2;
00623 UnpenalizedMOOFitness[3] = f3;
00624 }
00625
00626
00627
00628
00629 void IndividualMOO::setUnpenalizedMOOFitnessValues(double f0, double f1,
00630 double f2, double f3,
00631 double f4)
00632 {
00633 RANGE_CHECK(4 < UnpenalizedMOOFitness.size())
00634 UnpenalizedMOOFitness[0] = f0;
00635 UnpenalizedMOOFitness[1] = f1;
00636 UnpenalizedMOOFitness[2] = f2;
00637 UnpenalizedMOOFitness[3] = f3;
00638 UnpenalizedMOOFitness[4] = f4;
00639 }
00640
00641
00642
00643
00644 void IndividualMOO::setUnpenalizedMOOFitnessValues(double f0, double f1,
00645 double f2, double f3,
00646 double f4, double f5)
00647 {
00648 RANGE_CHECK(5 < UnpenalizedMOOFitness.size())
00649 UnpenalizedMOOFitness[0] = f0;
00650 UnpenalizedMOOFitness[1] = f1;
00651 UnpenalizedMOOFitness[2] = f2;
00652 UnpenalizedMOOFitness[3] = f3;
00653 UnpenalizedMOOFitness[4] = f4;
00654 UnpenalizedMOOFitness[5] = f5;
00655 }
00656
00657
00658
00659
00660 void IndividualMOO::setUnpenalizedMOOFitnessValues(double f0, double f1,
00661 double f2, double f3,
00662 double f4, double f5,
00663 double f6)
00664 {
00665 RANGE_CHECK(6 < UnpenalizedMOOFitness.size())
00666 UnpenalizedMOOFitness[0] = f0;
00667 UnpenalizedMOOFitness[1] = f1;
00668 UnpenalizedMOOFitness[2] = f2;
00669 UnpenalizedMOOFitness[3] = f3;
00670 UnpenalizedMOOFitness[4] = f4;
00671 UnpenalizedMOOFitness[5] = f5;
00672 UnpenalizedMOOFitness[6] = f6;
00673 }
00674
00675
00676
00677
00678 void IndividualMOO::setUnpenalizedMOOFitnessValues(double f0, double f1,
00679 double f2, double f3,
00680 double f4, double f5,
00681 double f6, double f7)
00682 {
00683 RANGE_CHECK(7 < UnpenalizedMOOFitness.size())
00684 UnpenalizedMOOFitness[0] = f0;
00685 UnpenalizedMOOFitness[1] = f1;
00686 UnpenalizedMOOFitness[2] = f2;
00687 UnpenalizedMOOFitness[3] = f3;
00688 UnpenalizedMOOFitness[4] = f4;
00689 UnpenalizedMOOFitness[5] = f5;
00690 UnpenalizedMOOFitness[6] = f6;
00691 UnpenalizedMOOFitness[7] = f7;
00692 }
00693
00694
00695
00696
00697 void IndividualMOO::setUnpenalizedMOOFitnessValues(vector< double >& fit)
00698 {
00699 RANGE_CHECK(fit.size() < UnpenalizedMOOFitness.size())
00700 for (unsigned i = fit.size(); i--;)
00701 {
00702 UnpenalizedMOOFitness[i] = fit[i];
00703 }
00704 }
00705
00706
00707
00708
00709 const vector<double> & IndividualMOO::getUnpenalizedMOOFitnessValues() const {
00710 return UnpenalizedMOOFitness;
00711 }
00712
00713 vector<double> & IndividualMOO::getUnpenalizedMOOFitnessValues() {
00714 return UnpenalizedMOOFitness;
00715 }
00716
00717
00718
00719
00720 void IndividualMOO::initializeUnpenalizedMOOFitness(double x)
00721 {
00722 for (unsigned i = UnpenalizedMOOFitness.size(); i--;)
00723 {
00724 UnpenalizedMOOFitness[i] = x;
00725 }
00726 }
00727
00728
00729
00730
00731 Chromosome& IndividualMOO::operator [ ](unsigned i)
00732 {
00733 return Individual::operator [ ](i);
00734 }
00735
00736
00737
00738
00739 const Chromosome& IndividualMOO::operator [ ](unsigned i) const
00740 {
00741 return Individual::operator [ ](i);
00742 }
00743
00744
00745
00746
00747 IndividualMOO& IndividualMOO::operator = (const IndividualMOO& indmoo)
00748 {
00749
00750
00751
00752 unsigned i;
00753
00754 for (i = size(); i--;)
00755 delete *(begin() + i);
00756
00757 vector< Chromosome * >::operator = (indmoo);
00758
00759 for (i = size(); i--;)
00760 *(begin() + i) = indmoo[ i ].clone();
00761
00762 #ifdef EALIB_REGISTER_INDIVIDUAL
00763 for (i = size(); i--;)
00764 (*(begin() + i))->registerIndividual(*this, i);
00765 #endif
00766
00767 if (MOOFitness.size() != indmoo.MOOFitness.size())
00768 setNoOfObj(indmoo.MOOFitness.size());
00769
00770 fitness = indmoo.fitness;
00771 scaledFitness = indmoo.scaledFitness;
00772 evalFlg = indmoo.evalFlg;
00773 feasible = indmoo.feasible;
00774 selProb = indmoo.selProb;
00775 numCopies = indmoo.numCopies;
00776 elitist = indmoo.elitist;
00777 age = indmoo.age;
00778 learnTime = indmoo.getLearnTime();
00779 MOORank = indmoo.MOORank;
00780 MOOShare = indmoo.MOOShare;
00781
00782 for (i = getNoOfObj(); i--;)
00783 {
00784 MOOFitness[i] = indmoo.MOOFitness[i];
00785 }
00786
00787 for (i = getNoOfObj(); i--;)
00788 {
00789 UnpenalizedMOOFitness[i] = indmoo.UnpenalizedMOOFitness[i];
00790 }
00791
00792 return *this;
00793 }
00794
00795
00796
00797
00798 bool IndividualMOO::operator == (const IndividualMOO& indmoo) const
00799 {
00800 unsigned i;
00801 if (size() == indmoo.size())
00802 {
00803
00804 for (i = size(); i--;)
00805 {
00806 if (!((*this)[i] == indmoo[i]))
00807 {
00808 return false;
00809 }
00810 }
00811
00812 if (MOOFitness.size() != indmoo.MOOFitness.size() || UnpenalizedMOOFitness.size() != indmoo.UnpenalizedMOOFitness.size())
00813 {
00814 return false;
00815 }
00816
00817 for (i = MOOFitness.size(); i--;)
00818 {
00819 if (!(MOOFitness[i] == indmoo.MOOFitness[i]))
00820 {
00821 return false;
00822 }
00823 }
00824
00825 for (i = UnpenalizedMOOFitness.size(); i--;)
00826 {
00827 if (!(UnpenalizedMOOFitness[i] == indmoo.UnpenalizedMOOFitness[i]))
00828 {
00829 return false;
00830 }
00831 }
00832
00833
00834 if (fitness == indmoo.fitness &&
00835 scaledFitness == indmoo.scaledFitness &&
00836 evalFlg == indmoo.evalFlg &&
00837 feasible == indmoo.feasible &&
00838 selProb == indmoo.selProb &&
00839 numCopies == indmoo.numCopies &&
00840 elitist == indmoo.elitist &&
00841 age == indmoo.age &&
00842 MOORank == indmoo.MOORank &&
00843 MOOShare == indmoo.MOOShare)
00844 {
00845 return true;
00846 }
00847 }
00848 return false;
00849 }
00850
00851
00852
00853
00854 IndividualMOO& IndividualMOO::operator = (const Individual& ind)
00855 {
00856
00857
00858
00859 unsigned i;
00860
00861 for (i = size(); i--;)
00862 delete *(begin() + i);
00863
00864 vector< Chromosome * >::operator = (ind);
00865
00866 for (i = size(); i--;)
00867 *(begin() + i) = ind[ i ].clone();
00868
00869 #ifdef EALIB_REGISTER_INDIVIDUAL
00870 for (i = size(); i--;)
00871 (*(begin() + i))->registerIndividual(*this, i);
00872 #endif
00873
00874 setNoOfObj(1);
00875 initializeMOOFitness(0);
00876 initializeUnpenalizedMOOFitness(0);
00877
00878
00879 fitness = ind.fitnessValue();
00880 scaledFitness = ind.getScaledFitness();
00881 evalFlg = ind.needEvaluation();
00882 feasible = ind.isFeasible();
00883 selProb = ind.selectionProbability();
00884 numCopies = ind.numberOfCopies();
00885 elitist = ind.isElitist();
00886 age = ind.getAge();
00887 learnTime = ind.getLearnTime();
00888 MOORank = 0;
00889 MOOShare = 0;
00890
00891 return *this;
00892 }
00893
00894
00895
00896
00897 void IndividualMOO::replace(unsigned i, const Chromosome& chrom)
00898 {
00899 Individual::replace(i, chrom);
00900 }
00901
00902
00903
00904
00905 void IndividualMOO::insert(unsigned i, const Chromosome& chrom)
00906 {
00907 Individual::insert(i, chrom);
00908 }
00909
00910
00911
00912
00913 void IndividualMOO::append(const Chromosome& chrom)
00914 {
00915
00916 vector< Chromosome * >::push_back(chrom.clone());
00917 }
00918
00919
00920
00921
00922 void IndividualMOO::remove (unsigned i)
00923 {
00924 Individual::remove (i);
00925 }
00926
00927
00928
00929
00930 void IndividualMOO::remove (unsigned i, unsigned j)
00931 {
00932 Individual::remove (i, j);
00933 }
00934
00935
00936
00937
00938 double IndividualMOO::aggregation(const vector< double >& weight)
00939 {
00940 if (MOOFitness.size() > weight.size())
00941 {
00942 cout << "\n ***** The size is not match in TO-IM-200 *****\n" << endl;
00943 return 0.0;
00944 }
00945 double sum = 0.0;
00946 for (unsigned i = MOOFitness.size(); i--;)
00947 {
00948 sum += getMOOFitness(i) * weight[ i ];
00949 }
00950 setFitness(sum);
00951 return sum;
00952 }
00953
00954
00955
00956
00957 double IndividualMOO::simplesum()
00958 {
00959 double sum = 0.0;
00960 for (unsigned i = MOOFitness.size(); i--;)
00961 {
00962 sum += getMOOFitness(i);
00963 }
00964 setFitness(sum);
00965 return sum;
00966 }
00967
00968
00969
00970
00971 void IndividualMOO::printIM()
00972 {
00973 unsigned i;
00974 cout << "\n\n********** IndividualMOO **********\n";
00975 cout << "No. of Chromosomes : " << size() << "\n";
00976 cout << "Variable ( fitness ) : " << fitness << "\n";
00977 cout << "Variable ( scaledFitness ) : " << scaledFitness << "\n";
00978 cout << "Variable ( evalFlg ) : " << evalFlg << "\n";
00979 cout << "Variable ( feasible ) : " << feasible << "\n";
00980 cout << "Variable ( selProb ) : " << selProb << "\n";
00981 cout << "Variable ( numCopies ) : " << numCopies << "\n";
00982 cout << "Variable ( elitist ) : " << elitist << "\n";
00983 cout << "Variable ( age ) : " << age << "\n";
00984 cout << "Variable ( MOOShare ) : " << MOOShare << "\n";
00985 cout << "Variable ( MOORank ) : " << MOORank << "\n";
00986 cout << "No. of fitness functions : " << MOOFitness.size()
00987 << "\n";
00988 for (i = 0; i < MOOFitness.size(); i++)
00989 {
00990 cout << "Value of fitness function : " << MOOFitness[i]
00991 << " ( fun. = " << i << " )\n";
00992 }
00993
00994 for (i = 0; i < UnpenalizedMOOFitness.size(); i++)
00995 {
00996 cout << "Value of penalized fitness function : " << UnpenalizedMOOFitness[i]
00997 << " ( fun. = " << i << " )\n";
00998 }
00999
01000 if (size() != 0)
01001 {
01002 for (unsigned i = 0; i < size(); i++)
01003 {
01004 cout << "No. Of Alleles : " << (*this)[i].size()
01005 << " ( Chr. = " << i << " )\n";
01006 }
01007 }
01008 cout << endl;
01009 }
01010
01011
01012
01013
01014 int IndividualMOO::pvm_pkind()
01015 {
01016
01017
01018 unsigned i;
01019
01020 unsigned *s = new unsigned;
01021 *s = this->size();
01022 pvm_pkuint(s, 1, 1);
01023 delete s;
01024
01025 for (i = 0; i < this->size(); i++)
01026 ((*this)[i]).pvm_pkchrom();
01027
01028 uint u[8];
01029 u[0] = feasible;
01030 u[1] = elitist;
01031 u[2] = evalFlg;
01032 u[3] = numCopies;
01033 u[4] = age;
01034 u[5] = learnTime;
01035 u[6] = MOORank;
01036 u[7] = getNoOfObj();
01037 pvm_pkuint(u, 8, 1);
01038
01039 double *g = new double[2*getNoOfObj()];
01040 unsigned jj = 0;
01041 for (;jj < getNoOfObj();jj++)
01042 g[jj] = MOOFitness[jj];
01043 for (;jj < 2*getNoOfObj();jj++)
01044 g[jj] = UnpenalizedMOOFitness[jj];
01045 pvm_pkdouble(g, 2*getNoOfObj(), 1);
01046 delete[] g;
01047
01048 double f[4];
01049 f[0] = fitness;
01050 f[1] = scaledFitness;
01051 f[2] = selProb;
01052 f[3] = MOOShare;
01053 pvm_pkdouble(f, 4, 1);
01054
01055 return 1;
01056 }
01057
01058
01059
01060
01061 int IndividualMOO::pvm_upkind()
01062 {
01063
01064
01065 unsigned i;
01066
01067 unsigned *s = new unsigned;
01068 pvm_upkuint(s, 1, 1);
01069 if (this->size() != *s) throw SHARKEXCEPTION("[IndividualMOO::pvm_upkind] unexpected size");
01070 delete s;
01071
01072 for (i = 0; i < this->size(); i++)
01073 ((*this)[i]).pvm_upkchrom();
01074
01075 uint *o = new uint;
01076 uint u[8];
01077 pvm_upkuint(u, 8, 1);
01078 feasible = u[0] ? 1 : 0;
01079 elitist = u[1] ? 1 : 0;
01080 evalFlg = u[2] ? 1 : 0;
01081 numCopies = u[3];
01082 age = u[4];
01083 learnTime = u[5];
01084 MOORank = u[6];
01085 *o = u[7];
01086
01087 setNoOfObj(*o);
01088
01089 double *g = new double[2 * getNoOfObj()];
01090 pvm_upkdouble(g, 2 * getNoOfObj(), 1);
01091 unsigned jj = 0;
01092 for (;jj < getNoOfObj();jj++)
01093 MOOFitness[jj] = g[jj];
01094 for (;jj < 2 * getNoOfObj();jj++)
01095 UnpenalizedMOOFitness[jj] = g[jj];
01096 delete[] g;
01097 delete[] o;
01098
01099 double f[4];
01100 pvm_upkdouble(f, 4, 1);
01101 fitness = f[0];
01102 scaledFitness = f[1];
01103 selProb = f[2];
01104 MOOShare = f[3];
01105
01106 return 1;
01107 }
01108
01109
01110
01111
01112
01113
01114