Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

AgentPopulationHandler.h

Go to the documentation of this file.
00001 //----------------------------------------------------------------------------
00002 //
00003 //  Thomas Berger (main author), Pepijn Schreinemachers, and Thorsten Arnold
00004 //
00005 //
00006 //  Hohenheim University (490d)
00007 //  Professorship for Land Use Economics in the Tropics and Subtropics
00008 //
00009 //  May not be distributed without permission by main author
00010 //
00011 //  File:       AgentPopulationHandler.h (formerly bliste.h)
00012 //                                                                        
00013 //  Contents:   Manages linked list of all agents
00014 //
00015 //
00016 //
00017 //------------------------------------------------------------------------------
00018 
00019 #ifndef _AgentPopulationHandler_h
00020 #define _AgentPopulationHandler_h
00021 
00022 #include <string>
00023 #include "BasicEnums.h"
00024 #include "FinancialMathFunctions.h"
00025 #include "Agent.h"
00026 #include"MainAuxiliaryFunctions.h"
00027 
00028 class IrrigationMethodSector;
00029 class TimeHandler;
00030 #ifndef LP_OLD
00031         #include "MipHandler.h"
00032 #endif /*LP_OLD*/
00033 
00034 // Sektor-ID eines Betriebes in der Liste
00035 typedef struct {
00036         int sek;//Sector ID
00037         int sc; //Subcatchment ID
00038 } s_id;
00039 
00040 
00041 class b_liste
00042 {       private:
00043 
00044 #ifndef LP_OLD
00045         bool test;
00046         MipHandler* globalProblemHandler;
00047         SolverType solver;
00048         string solvername;
00049 #endif /*LP_OLD*/
00050 
00051         
00052         protected:
00053         int bl_nr;
00054         int banzahl;
00055         int letzte_b_nr;
00056         int* banzahl_NW;
00057 
00058         agent* firstBetrieb;
00059         agent* merkeBetrieb;//wird fuer suche_naechsten() gebraucht
00060 
00061         public:
00062         b_liste(int scID);//Uebergabe Betriebslisten bzw. Subcatchment-Nummer
00063         virtual ~b_liste();
00064 
00065 #ifndef LP_OLD
00066         virtual void setSolverType(SolverType solver);
00067         virtual void setTolerance(double eps);
00068         virtual bool readDatFile(char* filename);
00069         virtual bool writeDatFile();
00070 #endif /*LP_OLD*/
00071 
00072         //create agents
00073         virtual void makeAgentL(int scid, int skid, int numP);
00074         virtual void makeAgentF(int scid, int skid, int ppid, int clid, int nwid, int fstd, int numP);
00075 
00076         virtual void deallokieren(agent*);//deallokiert einen Betrieb
00077         virtual void betriebssortiert_einfuegen(agent*);//foegt einen Betrieb ein
00078 
00079         virtual agent* ersten_suchen(int);//uebergeben wird sek_nr
00080         virtual agent* imaginaeren_suchen(int s);//uebergeben wird sek_nr
00081         virtual agent* naechsten_suchen(int);//uebergeben wird sek_nr
00082         virtual agent* betrieb_suchen(int);//uebergeben wird b_nummer;
00083         virtual agent* betrieb_herausnehmen(int);//  "        "
00084         virtual s_id betrieb_SID(int);//uebergeben wird b_nummer
00085         virtual int farbe_ermitteln(int);//uebergeben wird b_nummer
00086 
00087         //liefert die Nutzerinformationen der Anwender eines Inv.objektes innerhalb
00088         //des Netzwerks
00089         virtual nutz ersten_nutzer_suchen(int, int);//bergabe: NW-Nr., ObjCode
00090         virtual nutz naechsten_nutzer_suchen(int, int);
00091 
00092 
00093         virtual int get_bl_nr(void);//liefert Nr. der Betriebsliste zuroeck
00094    virtual void set_bl_nr(int bl_nr_);
00095         virtual int get_anzahl_NW(int);//liefert Anzahl der Betriebe eines Netzwerks
00096         virtual int get_anzahl(void);//liefert Gesamtzahl der Betriebe der Subcatchment
00097         virtual int get_nummer(void);//liefert die zuletzt vergebene Betriebsnummer
00098 
00099         virtual void loeschen (int);//loescht einen Betrieb, dessen Nr. uebergeben wird
00100         virtual void betriebe_loeschen(int);//loescht alle Betriebe eines Sektors
00101         virtual agent* getFirst();//liefert Listenersten
00102         virtual agent* getSecond();//liefert Listenzweiten
00103 
00104         virtual void betriebe_ausstatten();//Betriebe mit Arbeit/Kapital ausstatten
00105    virtual void writeInitialEndowmentToFile();
00106 
00107         virtual void uebergang_periode();//Erwartungsbildung, Investitionsplanung
00108         
00109 #ifdef LP_OLD
00110         virtual void pacht_periode();
00111         virtual void hole_gebot(p_gebot* g, int bnr, int typ, int z, int s,
00112                                                                                                          w_jahr* vol, double pacht);//neu 2003
00113         virtual void hole_forderung(p_gebot* f, int bnr, int typ, int z, int s,
00114                                                                                                          w_jahr* vol);//neu 2003
00115 
00116         virtual void kopie_loeschen(int bnr, int typ);
00117         virtual void alle_kopien_loeschen(int bnr);
00118         virtual int kapaz_aktualisieren(int, int, int, int, w_jahr*, double);
00119         virtual void alte_schattenpreise(int);
00120         virtual void neu_planen(int bnr);
00121         virtual double verpachtung_korrigieren(int bnr, double volB, int m);
00122         virtual void zupachtung_korrigieren(int bnr, double volN, int m);
00123 #endif /*LP_OLD*/
00124 
00125    // ======================================================
00127    // ------------------------------------------------------
00128         virtual void wasser_periode(int);//assigns monthly water supply
00129                                                                                                 // to agents and saves sectoral data on water
00130                                                                                                 // and rental markets
00131 
00132 
00133         virtual void wasser_periode_refactured( TimeHandler& th_const );//assigns monthly water supply
00134                                                                                                 // to agents and saves sectoral data on water
00135                                                                                                 // and rental markets
00136 
00137 
00138    // Function called by <wasser_periode>
00139    // ... For all agents, compute irrigation water demand and report 
00140    // ... demand to sector, aggregated by method
00141    virtual agent* agentsComputeIrrigDemandAndReportToSector(agent* anker, int sk, int thisMonth);
00142    virtual void agentsReceiveNetInflowsFromCatchment(agent* betr, int sk, int thisMonth);
00143 
00144    // Function called by <wasser_periode>
00145    virtual double agentsReceivePlantWaterDemandsSatisfied (agent* anker, int sk, int sc, int thisMonth, IrrigationMethodSector* sectorPointerToIrrigationMethods, double Ueb_j_tmp);
00146 
00147    // New function that incorporate and distribute water
00148    virtual void agentsEstimatePlantWaterDemandsAndReportRest(agent* anker, int sk, int sc, int thisMonth, IrrigationMethodSector* sectorPointerToIrrigationMethods);
00149    virtual void agentsDistributeRestWater(agent* anker, int sk, int sc, int thisMonth, IrrigationMethodSector* sectorPointerToIrrigationMethods);
00150    virtual void agentsUpdatePlantWaterSupply(agent* anker, int sk, int sc, int thisMonth, IrrigationMethodSector* sectorPointerToIrrigationMethods);
00151 
00152 
00153    // Function called by <wasser_periode>
00154    // ... afp->irrigateCropsByPriorityGroups
00155    // ... afp->computeAverageOnFieldIrrigationEfficiency
00156    virtual double agentsIrrigateCropsByPriorityGroups        (agent* anker, int sk, int sc, int thisMonth, IrrigationMethodSector* sectorPointerToIrrigationMethods);
00157    virtual agent* computeTotIrrigAppliedInSectorAndEfficiency(agent* anker, int sk, int sc, int thisMonth, double irrigAmountSector, double& etaOfSectorAgents );
00158 
00159    //   virtual void water_month(int, FILE*, FILE*);//assigns monthly water supply
00160                                                                                                 // to agents and saves sectoral data on water
00161                                                                                                 // and rental markets
00162 
00163    // <-- end EDIC and Irrigation functions
00164    // ------------------------------------------------------
00165 
00166 
00167 
00168         //virtual void water_period_External(int mTot);
00169 
00170         //      virtual void water_month(int, FILE*, FILE*);//assigns monthly water supply
00171                                                                                                 // to agents and saves sectoral data on water
00172                                                                                                 // and rental markets
00173         virtual void produktion_periode();//WaterSuppy2 und Produktion
00174         virtual void einkommen_periode();//Betriebseinkommen und andere Kennziffern
00175 
00176         // Write to file 
00177         virtual void writeAgentLndData(FILE* stream0);//neu 2004
00178         virtual void writeAgentPfmData(FILE* stream0, FILE* stream1);//neu 2004
00179         virtual void kapazitaetsdaten_periode(FILE*);//in Outputfile schreiben
00180 
00181         // Debug Functions
00182         virtual void planungsfehler_melden(int nw, int seg);
00183         virtual void printToScreen(agent*);
00184         virtual void printOnScreen_list(void);
00185 
00186         virtual void betriebsaufgabe_periode();//loescht aufgeloeste Betriebe
00187         virtual void liste_loeschen(void);
00188         //Arnold2006_12
00189         virtual void writeAllParcelsToFile(void);
00190         //Arnold2006_62
00191         //virtual void writeAllAgentWaterDecToFile(void);//Tbe 080220
00192         virtual void writeAllCropWaterDataToFile(void);//Tbe 080220
00193 
00194         //Arnold2006_20
00195         //virtual void initializeEdicIrrigationModel(void);//Tbe 080220
00196         //virtual void doWaterAllocationIPG(int mTot);//Tbe 080220
00197         
00198         //Arnold2006_19
00199         //In EDIC model wuith WASIM coupling, attributes all crops to cropMixClass
00200         virtual void allocateSpatiallyExplicit_AllCrops();
00201    virtual void agentsAllocateSpatiallyIrrigationWaterToParcels(int thisMonth);
00202 
00203         //Arnold2008_08 SHOULD BE DISCARDED
00204         //Function updates the value "cont" from all parcells of agent to cell grid
00205         //This funciton used for time-dependent, monthly content
00206         //  --> switch-statement(cont) in "agentF::updateParcelToLandscape"
00207         //virtual void updateParcelToLandscape(Content cont, int mTot);    // --> virtual void copyContent_ParcelToLandscape(Content cont, int mTot);
00208         //virtual void    updateParcelToLandscape(Content cont);           // -->       virtual void copyContent_ParcelToLandscape(Content cont);
00209 
00210         //Arnold2008_08 NEW
00211         //Function updates the value "cont" from all parcells of agent to cell grid
00212         //This funciton used for time-dependent, monthly content
00213         //  --> switch-statement(cont) in "agentF::copyContent_ParcelToLandscape"
00214         virtual void copyContent_ParcelToLandscape_monthly(Content cont, int mTot);
00215         virtual void copyContent_ParcelToLandscape(Content cont);
00216 
00217    virtual void copyContent_Landscape2Parcels(Content cont);
00218    virtual void copyContent_Landscape2Parcels(Content cont, bool flag_fixCopyToCell);
00219         //Arnold2008_08 NEW
00220    virtual void testMeanPerAgent(Content cont);
00221 
00222         //Arnold2006_47
00223         virtual void agentsUpdateIrrigationWater2Landscape(int m);
00224 
00225         //Arnold2006_55
00226         // checks if all parcels in crpMixClass are set to "get_hasCrop() == isTrue"
00227         virtual void checkIfTrue(bool isTrue);
00228         virtual void printAllAgentsProductions();
00229         
00230         virtual void aggregateAndOutputLanduseBySector(int numberOfCroppingActivities, MatrixDouble& vectorOfIDs, string*& rowNames, string fn);
00231         virtual void aggregateLanduseBySector(MatrixDouble& matrixOfCatchmentLandUses);
00232         virtual void outputLanduseBySector(MatrixDouble& matrixOfCatchmentLandUses, MatrixDouble& vectorOfIDs, string*& rowNames, string fn);
00233         int getCatchID();
00234         virtual void writeToFile_AllAgentsProduction();
00235         void writeEdicHeaderToFile(ofstream& out);
00236 
00237    // For GHANA map correction
00238    virtual int  getFirstInflowForFarmsteadID(int _fstdID);
00239 };
00240 
00241 #endif
00242 
00243 
00244 

Generated on Thu Aug 28 12:38:44 2008 for MPMAS by  doxygen 1.3.9.1