CaDesigner.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2009 Kamil Dudka <xdudka00@stud.fit.vutbr.cz>
00003  *
00004  * This file is part of nucad (Non-Uniform CA Designer).
00005  *
00006  * nucad is free software: you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation, either version 3 of the License, or
00009  * any later version.
00010  *
00011  * nucad is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with nucad.  If not, see <http://www.gnu.org/licenses/>.
00018  */
00019 
00025 #ifndef CA_DESIGNER_H
00026 #define CA_DESIGNER_H
00027 
00028 #include "Ca.h"
00029 
00030 class GABinaryString;
00031 class GAStatistics;
00032 
00039 class IObserver {
00040     public:
00041         virtual ~IObserver() { }
00042 
00048         virtual void notify() = 0;
00049 };
00050 
00057 class ISubject {
00058     public:
00059         virtual ~ISubject() { }
00060 
00068         virtual void addObserver(IObserver *observer) = 0;
00069 };
00070 
00071 
00077 class AbstractSubject: public ISubject {
00078     public:
00079         virtual ~AbstractSubject();
00080 
00081         // see ISubject dox
00082         virtual void addObserver(IObserver *);
00083     protected:
00084         AbstractSubject();
00085 
00091         void notify();
00092     private:
00093         struct Private;
00094         Private *d;
00095 };
00096 
00102 class AbstractProcess: public AbstractSubject {
00103     public:
00104         virtual ~AbstractProcess();
00105 
00110         virtual void start();
00111 
00115         virtual void stop();
00116 
00121         virtual void reset();
00122 
00127         virtual int getStepsCount();
00128 
00129     protected:
00130         AbstractProcess();
00131 
00136         virtual void initialize() = 0;
00137 
00142         virtual void doStep() = 0;
00143 
00144     private:
00145         struct Private;
00146         Private *d;
00147 };
00148 
00154 class AbstractProcessWatched: public AbstractProcess {
00155     public:
00156         virtual ~AbstractProcessWatched();
00157         virtual void start();
00158         virtual void stop();
00159         virtual void reset();
00160 
00165         virtual long getTimeElapsed();
00166 
00167     protected:
00168         AbstractProcessWatched();
00169 
00170     private:
00171         struct Private;
00172         Private *d;
00173 };
00174 
00180 class GaCaRules: public ICaRules {
00181     public:
00185         GaCaRules(const std::string &);
00186 
00192         GaCaRules(size_t size, const GABinaryString &bs);
00193         virtual ~GaCaRules();
00194         virtual GaCaRules* clone() const;
00195         virtual void getRuleAtPos(Pos, TRule5N &) const;
00196 
00200         size_t size() const;
00201 
00206         bool operator[] (unsigned index) const;
00207 
00208     protected:
00209         GaCaRules();
00210         GaCaRules(const GaCaRules &);
00211 
00212     private:
00213         struct Private;
00214         Private *d;
00215 };
00216 
00222 std::ostream& operator<< (std::ostream &str, const GaCaRules &rules);
00223 
00229 class GaCaRulesSet {
00230     public:
00231         GaCaRulesSet();
00232         ~GaCaRulesSet();
00233 
00237         size_t size() const;
00238 
00246         void add(GaCaRules *rules);
00247 
00248         //GaCaRulesVector* createVector();
00249 
00253         void clear();
00254 
00255     private:
00256         struct Private;
00257         Private *d;
00258 };
00259 
00265 class CaDesigner: public AbstractProcessWatched
00266 {
00267     public:
00268         virtual ~CaDesigner();
00269 
00276         static CaDesigner* create(CaEvaluator *evaluator);
00277 
00281         const GAStatistics& getStatistics() const;
00282 
00286         int getSolutionsCount();
00287 
00291         int stopAtGeneration() const;
00292 
00293         float minFitness();
00294         float avgFitness();
00295         float maxFitness();
00296 
00297     protected:
00301         CaDesigner (CaEvaluator *evaluator);
00302 
00303         virtual void initialize();
00304         virtual void doStep();
00305 
00306     private:
00307         struct Private;
00308         Private *d;
00309 };
00310 
00315 class TimedStop: public IObserver {
00316     public:
00321         TimedStop(AbstractProcessWatched *process, long msec);
00322         virtual ~TimedStop();
00323         virtual void notify();
00324 
00325     private:
00326         struct Private;
00327         Private *d;
00328 };
00329 
00334 class ProgressWatch: public IObserver {
00335     public:
00341         ProgressWatch(
00342                 AbstractProcess   *process,
00343                 int               stepsTotal,
00344                 std::ostream      &streamTo);
00345 
00346         virtual ~ProgressWatch();
00347         virtual void notify();
00348 
00349     private:
00350         struct Private;
00351         Private *d;
00352 };
00353 
00359 class SolutionsCountStop: public IObserver {
00360     public:
00365         SolutionsCountStop(CaDesigner *solver, int minCountOfSolutions);
00366         virtual ~SolutionsCountStop();
00367         virtual void notify();
00368 
00369     private:
00370         struct Private;
00371         Private *d;
00372 };
00373 
00378 class FitnessWatch: public IObserver {
00379     public:
00384         FitnessWatch(CaDesigner *solver, std::ostream &streamTo);
00385         virtual ~FitnessWatch();
00386         virtual void notify();
00387         void reset();
00388 
00389     private:
00390         struct Private;
00391         Private *d;
00392 };
00393 
00398 class ResultsWatch: public IObserver {
00399     public:
00404         ResultsWatch(CaDesigner *solver, std::ostream &streamTo);
00405         virtual ~ResultsWatch();
00406         virtual void notify();
00407 
00408     private:
00409         struct Private;
00410         Private *d;
00411 };
00412 
00413 #endif // CA_DESIGNER_H
00414 

Generated on Sat May 2 16:39:31 2009 for nucad by  doxygen 1.5.4