26 #ifndef GRALE_GRIDLENSINVERSIONGENOMENEW_H
28 #define GRALE_GRIDLENSINVERSIONGENOMENEW_H
30 #include "graleconfig.h"
31 #include "lensinversiongenomebase.h"
37 #define GRIDLENSINVERSIONGENOMENEW_MAXFITNESSCOMP 16
42 class GridLensInversionGAFactoryNew;
43 class GravitationalLens;
45 class GRALE_IMPORTEXPORT GridLensInversionGenomeNew :
public LensInversionGenomeBase
48 GridLensInversionGenomeNew(GridLensInversionGAFactoryNew *pFactory,
int numMasses,
bool useSheet);
49 GridLensInversionGenomeNew(GridLensInversionGAFactoryNew *pFactory,
const std::vector<float> &masses,
float sheetValue);
50 ~GridLensInversionGenomeNew();
52 void setActiveFitnessComponent(
int i) { m_activeFitnessComponent = i; }
53 bool calculateFitness();
54 bool isFitterThan(
const mogal::Genome *pGenome)
const;
55 mogal::Genome *reproduce(
const mogal::Genome *pGenome)
const;
56 Genome *clone()
const;
58 std::string getFitnessDescription()
const;
60 const float *getFitnessValues()
const {
return m_fitnessValues; }
61 float getScaleFactor()
const {
return m_scaleFactor; }
62 void setFitnessValues(
const float *pValues);
63 void setScaleFactor(
float s) { m_scaleFactor = s; }
65 const std::vector<float> &getMasses()
const {
return m_masses; }
66 float getSheetValue()
const {
return m_sheetValue; }
68 GravitationalLens *createLens(
double *totalmass, std::string &errstr)
const;
70 void copyFitnessValuesTo(
float *pDestination,
int amount)
const { memcpy(pDestination, m_fitnessValues,
sizeof(
float)*amount); }
72 GridLensInversionGAFactoryNew *getFactory()
const {
return m_pFactory; }
76 void initializeNewCalculation();
77 float calculateMassScaleFitness(
float scalefactor,
float sheetScale);
78 void calculateTotalFitness(
float scalefactor,
float sheetScale,
float *fitnessvalues);
80 int m_activeFitnessComponent;
81 float m_fitnessValues[GRIDLENSINVERSIONGENOMENEW_MAXFITNESSCOMP];
83 std::vector<float> m_masses;
86 GridLensInversionGAFactoryNew *m_pFactory;
89 inline bool GridLensInversionGenomeNew::isFitterThan(
const mogal::Genome *pGenome)
const
91 const GridLensInversionGenomeNew *pGenome2 = (
const GridLensInversionGenomeNew *)pGenome;
93 if (m_fitnessValues[m_activeFitnessComponent] < pGenome2->m_fitnessValues[m_activeFitnessComponent])
98 inline void GridLensInversionGenomeNew::setFitnessValues(
const float *pValues)
100 memcpy(m_fitnessValues, pValues,
sizeof(
float)*GRIDLENSINVERSIONGENOMENEW_MAXFITNESSCOMP);
105 #endif // GRALE_GRIDLENSINVERSIONGENOMENEW_H