00001 #ifndef SchedulingEvalOp_h
00002 #define SchedulingEvalOp_h
00003
00004 #include <string>
00005 #include <vector>
00006 #include "readpar.h"
00007 #include "matrice.h"
00008 #include "rpn.h"
00009
00010
00011 class SchedulingEvalOp : public EvaluateOp
00012 {
00013 public:
00014 SchedulingEvalOp();
00015 FitnessP evaluate(IndividualP individual);
00016 void registerParameters(StateP);
00017 bool initialize(StateP);
00018 ~SchedulingEvalOp();
00019
00020 StateP state_;
00021
00022 unsigned int edited,total,nItems;
00023 RPN Evaluator;
00024 void write(std::string &output);
00025 void ReadTerminals(TreeP);
00026 void ReadTerminals(StateP);
00027 void DefineNodeNames(void);
00028 void ReadConstraints(Matrica &Constraints, int set, int jobs, Matrica &Precedence);
00029 void MakeSetup(Matrica &Duration, int set, int jobs, double faktor, Matrica &Setup);
00030 double NodeLevel(int set, int node);
00031
00032
00033
00034 void ReadIndividual(IndividualP individual);
00035 void CalcTimedTerminals(uint &nNiz, uint &nPoslova, uint &nJob, double &dClock, uint nMachine=0, uint nMachines=1);
00036 void EvaluateSingle(double &dRawFitness);
00037 void EvaluateUniform(double &dRawFitness);
00038 void EvaluateUnrelated(double &dRawFitness);
00039 void EvaluateUnrelatedFP(FloatingPointP fp, double &dRawFitness);
00040 void EvaluateJobShop(double &dRawFitness);
00041 int Before(const void *arg1, const void *arg2);
00042 std::string in_file;
00043
00044 protected:
00045
00046 enum environment
00047 { SINGLE,
00048 UNIFORM,
00049 UNRELATED,
00050 JOBSHOP
00051 };
00052
00053 unsigned int sets,max_jobs,total_jobs,max_machines,max_length;
00054 unsigned int m_fitness;
00055 unsigned int m_genotip;
00056 unsigned int m_primjer;
00057 unsigned int m_BestSubset;
00058 unsigned int m_SubsetSize;
00059 unsigned int m_InSubset;
00060 unsigned int m_WorstInSubset;
00061 double m_WorstSubsetFitness;
00062 double m_BestSubsetFitness;
00063 environment m_Environment;
00064 unsigned int m_SortSet;
00065 unsigned int m_PopSize;
00066
00067 bool m_Normalized;
00068 bool m_Evaluation;
00069 bool m_TermUsage;
00070 bool m_editing;
00071 bool m_LEF;
00072 double m_LEFVal;
00073 bool m_setup;
00074 double m_setup_faktor;
00075 bool m_dynamic;
00076 bool m_constrained;
00077 bool m_stsampling;
00078 double m_sampling;
00079 bool *pSamples;
00080 bool m_Idleness;
00081 bool *pRasporedjen;
00082 double *pVrijednosti, *pArray, *pSlack, *pSlackSpeed, *pArrival, *pLevel, *pSetupAvg;
00083 double *pOperationReady, *pJobReady, *pTotalWorkRemaining, *pTotalWorkDone, *pTotalMachineWork;
00084 double *pMachineWorkRemaining, *pMachineValues;
00085 unsigned int *pIndex, *pUsed, *pLastJob, *pPTimeMinMachine, *pMachineScheduled, *pOperationsScheduled;
00086 unsigned int *pOperationsWaiting;
00087 Matrica N,Duration,Deadline,WeightT,WeightF,WeightE,WeightN,Ready,Constraints,Machines,Speed;
00088 Matrica SP,SD,Fitness,Schedule,Precedence,Level,Setup,Terminals,MachineReady,PTimeAvg,PTimeMinMachine;
00089 Matrica SortedReady, Values, Durations, MachineIndex;
00090 };
00091 typedef boost::shared_ptr<SchedulingEvalOp> SchedulingEvalOpP;
00092
00093 #endif // SchedulingEvalOp_h