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