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

AgentUserAssociation.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:       AgentUserAssociation.h (formerly part of sector9.h)
00012 //
00013 //  Contents:   Agent user association manages the access to land resources, 
00014 //              provides irrigation infrastructure to its member farm agents,
00015 //              assigns water quotas and distributes irrigation water
00016 //
00017 //------------------------------------------------------------------------------
00018 
00019 
00020 #ifndef _AgentUserAssociation_h
00021 #define _AgentUserAssociation_h
00022 
00023 #include "Agent.h"
00024 #include "AgentParcel.h"
00025 #include "MatrixDouble.h"
00026 #include "BasicDefines.h"
00027 #include "FinancialMathFunctions.h"
00028 #include "MarketNonTradablesHandler.h"
00029 
00030 
00031 
00033 class AgentWaterRight
00034 {  //auxiliary class, everthing public
00035    public:
00036 
00038 
00039 
00040    int AgentFstdID;     
00041 
00043    MatrixDouble shares;         
00044    MatrixDouble inflows;
00046 
00048    AgentWaterRight(int numInflows)
00049         {       AgentFstdID = -1;        
00050                 shares.allocate(numInflows, 1);
00051                 inflows.allocate(numInflows, 1);      
00052         }
00053 
00055    virtual ~AgentWaterRight()
00056         {       shares.deallocate();
00057                 inflows.deallocate();
00058         }
00059    
00060         //virtual  void deallocate();
00061 };
00062 
00063 
00065 class InfrastructureProject
00066 {  //auxiliary class, everthing public
00067    public:
00068 
00070 
00071 
00072    int yearImplemented;
00073 
00075         int investObjectID;
00076 
00078         double sizeInHa;
00079 
00081         double totalCost;
00082 
00084         double shareSubsidies;
00085 
00087         int numParticipants;
00088 
00090    MatrixDouble AgentFstdIDs;   
00092 
00094    InfrastructureProject()
00095         {       //empty
00096         }
00097    
00099    virtual ~InfrastructureProject()
00100         {       AgentFstdIDs.deallocate();
00101         }
00102 };
00103 
00104 
00105 
00107 
00114 class AgentUserAssociation : public agent
00115 {
00116 public:
00117 
00118         // --------------------------------------------------------------------------
00120    // --------------------------------------------------------------------------
00121 
00123 
00124 
00125         virtual int getNumLotteryValues();
00126         
00128         virtual void assignWaterRightsPerRandomData(FILE* rndWaterRightsStrm, FILE* dbgWaterRightsStrm);
00129         virtual void readLotteryDataFromStream(FILE* stream);
00130         virtual void writeLotteryDataToStream(FILE* stream);
00131         virtual void initializeWaterLottery(int numLotteryValues_);
00132         virtual double drawRandomWaterRight(int inflow_);
00133 
00135         virtual void assignWaterRightsPerActualData(FILE* actWaterRightsStrm, FILE* dbgWaterRightsStrm, int& catchmID_, int& sectorID_);
00136         virtual void readWaterRightsFromStream(FILE* stream, int& catchmID_, int& sectorID_);
00137         virtual void writeWaterRightsToStream(FILE* stream);
00138         
00139         virtual void assignNumberOfMembers(int numMembers_);
00140         virtual void createWaterRightsRegistry();
00141         virtual double getWaterRightForAgent(int agFstdID_, int inflowID_);
00142         virtual void setWaterRightForAgent(int agFstdID_, int inflowID_, double share_);
00144 
00145 
00146         // --------------------------------------------------------------------------
00148    // --------------------------------------------------------------------------
00149 
00151 
00152 
00153         virtual void assignInfrastructureProjectsPerActualData(FILE* infrastructureProjectsStrm, int& catchmID_, int& sectorID_);
00154         virtual void readInfrastructureProjectsFromStream(FILE* stream, int& catchmID_, int& sectorID_);
00155         virtual void writeInfrastructureProjectsToStream(FILE* stream);
00156         
00157         virtual void createInfrastructureProjectRegistry();
00158         virtual int checkIfAgentHasProjects(int agFstdID, int year,
00159                 MatrixDouble& objectIDs, MatrixDouble& sizes, MatrixDouble& purchasePrices, MatrixDouble& sharesEC, MatrixDouble& ratesDC);
00160         virtual void reportImplementationResult(int agFstdID, int year, int objectID, double size, double purchasePrice, int implemented);
00161         
00163 
00164 
00165         // --------------------------------------------------------------------------
00167    // --------------------------------------------------------------------------
00168         
00169         //die naechsten Funktionen liefern die Sektor-Schattenpreise je Ha. bzw. je
00170    //l/s/Monat bzw. die Parzellenzahl und das gesamte monatliche Netto-Water
00171    //zurueck
00172 
00174 
00175 
00176         virtual double get_Q_B(int stype);   
00177    virtual double get_Q_W(int month);   
00178    virtual double get_volB(int month); 
00179         virtual int getNumAgents(void);
00180         virtual int getNumParcels(void);
00182         
00183         //----------------------------------------------------------------------------------
00184         
00186 
00187 
00188    virtual void addQ_B(int stype, double q_b);
00189    virtual void addQ_W(int month, double q_w);
00190    virtual void addVolB(int month, double v_B);
00191         virtual void addNumAgents(int numberOfAgentsInMarket_);
00192         virtual void addNumParcels(int numberOfParcelsInMarket_);
00193    virtual void calcSectorAverages(void);
00195 
00196         //----------------------------------------------------------------------------------
00197 
00199 
00200 
00201         virtual void makeBidForRentingOut(gebot* bid);
00202         virtual void makeBidForRentingIn(gebot* bid);
00203 
00204         virtual void boden_wasser_transferieren();
00205    virtual int get_interesse(int*);
00206    virtual void transferRentalWater(int month);//renamed from <receiveNetInflows>
00207    virtual void pachtmarkt_zuruecksetzen();
00208         virtual void schattenpreise_zuruecksetzen();
00209 
00211         virtual double eigentum_uebertragen(parzelle*, w_rechte*, double);
00212    virtual double kaufpreis_berechnen(int, w_jahr*, double);
00213 
00215    virtual void writeYearlyLandRental(); // stream "aStrm_Lrm"
00216    virtual void writeAllMonthlyWaterRental(int shift);   // ARNOLD 2005,
00217    virtual void P_in_datei_schreiben(); //schreibt Pachtmarktdaten in stream
00218       // Expected values - not shifted
00219    virtual void P_in_datei_schreiben(bool isExpected);  //schreibt Pachtmarktdaten in stream
00220       // not used any more! split up now to
00222 
00223         // --------------------------------------------------------------------------
00225    // --------------------------------------------------------------------------
00226 
00228 
00229 
00230         AgentUserAssociation(int agentID_, int catchmentID_, int sectorID_);
00231 
00233         //AgentUserAssociation(const AgentUserAssociation& association_);
00234 
00236         //AgentUserAssociation& operator=(const AgentUserAssociation& association_);
00237 
00239         virtual ~AgentUserAssociation();
00241         
00242         
00243 protected:
00245 
00246 
00247         int catchmentID;
00248         int sectorID;
00249 
00251         int agType;
00252 
00254         int agentID;
00255         
00257         int numMembers;
00258         
00260         int numLotteryValues;
00261 
00263         AgentWaterRight** waterRightsRegistry;
00264 
00266         MatrixDouble wlotto;
00267 
00269    bwmarkt pachtmarkt;
00270 
00272         int numberOfAgentsInMarket;
00273         int numberOfParcelsInMarket;
00274 
00276    MatrixDouble  Q_B;
00277    MatrixDouble  Q_W; 
00278 
00280    MatrixDouble  volB;
00281 
00283         int numInfrastructureProjects;
00284 
00286         InfrastructureProject* infrastructureProjectRegistry;
00287 
00289 
00290 };
00291 
00292 
00293 
00294 
00295 #endif /* _AgentUserAssociation_h */

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