00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
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 {
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
00061 };
00062
00063
00065 class InfrastructureProject
00066 {
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 {
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
00170
00171
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);
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();
00216 virtual void writeAllMonthlyWaterRental(int shift);
00217 virtual void P_in_datei_schreiben();
00218
00219 virtual void P_in_datei_schreiben(bool isExpected);
00220
00222
00223
00225
00226
00228
00229
00230 AgentUserAssociation(int agentID_, int catchmentID_, int sectorID_);
00231
00233
00234
00236
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