26 #ifndef GRALE_GRIDLENSINVERSIONGENOMEBASE_H
28 #define GRALE_GRIDLENSINVERSIONGENOMEBASE_H
30 #include "graleconfig.h"
31 #include "lensinversiongenomebase.h"
37 #define GRIDLENSINVERSIONGENOMEBASE_MAXFITNESSCOMP 16
42 class GridLensInversionGAFactoryBase;
43 class GravitationalLens;
45 class GRALE_IMPORTEXPORT GridLensInversionGenomeBase :
public LensInversionGenomeBase
48 GridLensInversionGenomeBase(GridLensInversionGAFactoryBase *f,
int nummasses,
bool useGenomeSheet);
50 GridLensInversionGenomeBase(GridLensInversionGAFactoryBase *f,
const std::vector<float> &masses,
const std::vector<float> &fractions,
float sheetValue);
52 GridLensInversionGenomeBase(GridLensInversionGAFactoryBase *f,
const std::vector<float> &masses,
float sheetValue);
53 #endif // AUTODISTFRAC
54 ~GridLensInversionGenomeBase();
56 void setActiveFitnessComponent(
int i) { m_fitnessComp = i; }
57 bool calculateFitness();
58 bool isFitterThan(
const mogal::Genome *g)
const {
const GridLensInversionGenomeBase *g2 = (
const GridLensInversionGenomeBase *)g;
if (fitnessvalues[m_fitnessComp] < g2->getFitnessValues()[m_fitnessComp])
return true;
return false; }
59 mogal::Genome *reproduce(
const mogal::Genome *g)
const;
60 Genome *clone()
const;
62 std::string getFitnessDescription()
const;
64 const float *getFitnessValues()
const {
return fitnessvalues; }
65 float getScaleFactor()
const {
return scalefactor; }
66 float getSheetFactor()
const {
return m_sheetFactor; }
67 void setFitnessValues(
const float *f) {
for (
int i = 0 ; i < GRIDLENSINVERSIONGENOMEBASE_MAXFITNESSCOMP ; i++) fitnessvalues[i] = f[i]; }
68 void setScaleFactor(
float s) { scalefactor = s; }
69 void setSheetFactor(
float s) { m_sheetFactor = s; }
71 const std::vector<float> &getMasses()
const {
return m_masses; }
72 float getSheetValue()
const {
return m_sheetValue; }
74 const std::vector<float> &getDistanceFractions()
const {
return m_distanceFractions; }
75 #endif // AUTODISTFRAC
77 GravitationalLens *createLens(
double *totalmass, std::string &errstr)
const;
78 void copyFitnessValuesTo(
float *pDestination,
int amount)
const { memcpy(pDestination, fitnessvalues,
sizeof(
float)*amount); }
80 virtual void getCalculationParameters(
float &startfactor,
float &stopfactor,
int &numiterationsteps,
int &numiterations)
const
84 numiterationsteps = 20;
87 virtual void getSheetCalculationParameters(
float &startfactor,
float &stopfactor)
const
93 GridLensInversionGAFactoryBase *getFactory()
const {
return factory; }
95 void initializeNewCalculation();
96 float calculateMassScaleFitness(
float scalefactor,
float sheetScale);
97 void calculateTotalFitness(
float scalefactor,
float sheetScale,
float *fitnessvalues);
101 float fitnessvalues[GRIDLENSINVERSIONGENOMEBASE_MAXFITNESSCOMP];
103 std::vector<float> m_masses;
105 std::vector<float> m_distanceFractions;
106 #endif // AUTODISTFRAC
110 GridLensInversionGAFactoryBase *factory;
115 #endif // GRALE_GRIDLENSINVERSIONGENOMEBASE_H