00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _AgentFarmHousehold_h
00021 #define _AgentFarmHousehold_h
00022
00023 #include "Agent.h"
00024
00025 #ifdef LP_OLD
00026 #include "simplx9.h"
00027 #else
00028
00029
00030 #include "MipHandler.h"
00031 #endif
00032
00033 #include "MatrixDouble.h"
00034 #include "AgentParcelList.h"
00035 #include "AgentHouseholdList.h"
00036 #include "AgentLivestockList.h"
00037 #include "PopulationNetworkSegment.h"
00038 #include "AgentParcelGridCellInterface.h"
00039 #include "TimeHandlerClass.h"
00040
00041 class IrrigationMethodSector;
00042
00043
00044 class agentF : public agent
00045 { public:
00046
00047
00049
00050 virtual void setSegPtr(segment*);
00051
00052 virtual int getNumberOfParcels();
00053 virtual void setNumberOfParcels(int);
00054 virtual int getNumberOfIrrigableParcels();
00055 virtual int get_segment();
00056 virtual void set_segment(int);
00057 virtual int get_innov();
00058 virtual int get_erwart();
00059 virtual void set_erwart(int);
00060 virtual int getCluNum();
00061 virtual int getPopNum();
00062 virtual int getFstID();
00063 virtual int get_farbe();
00064 virtual void set_farbe(int clr56);
00065
00066 virtual int getFirstInflowID();
00067
00068 virtual double get_b_wert();
00069 virtual int getSolvedLP();
00070
00071 virtual int get_FamAK();
00072 virtual void set_FamAK(int);
00073 virtual int get_FrAK();
00074 virtual void set_FrAK(int);
00075 virtual double get_EK();
00076 virtual void set_EK(double);
00077 virtual double get_liq();
00078 virtual void set_liq(double);
00079 virtual double get_akt();
00080 virtual void set_akt(double);
00081 virtual double get_FK();
00082 virtual void set_FK(double);
00083 virtual double get_entfk();
00084 virtual void set_entfk(double);
00085 virtual double get_werts();
00086 virtual double get_durchsDB();
00087 virtual int get_migr();
00088
00089 virtual int checkNumPlots();
00090 virtual int getNumPlotsInClass(int);
00091 virtual int getNumPlotsInSoilType(int soilType);
00092 virtual int get_parzellen(int);
00093 virtual void set_parzellen(int, int);
00094 virtual int get_hof_x();
00095 virtual void set_hof_x(int);
00096 virtual int get_hof_y();
00097 virtual void set_hof_y(int);
00098 virtual void set_bflaech_verpachtet(int, int);
00099 virtual void make_bflaech(int c, int r, int typ, int fst, double dst);
00100 virtual int get_bflaech_anzahl();
00101 virtual void bflaechen_printOnScreen();
00102 virtual void bflaech_einfuegen(parzelle*);
00103
00104 virtual double getEtaOfAgent(){return etaOfAgent;}
00105 virtual double getTotalIrrigationWaterApplied() {return totalIrrigationWaterApplied;};
00106
00107
00108
00113
00114 virtual int get_sym_obj(int);
00115 virtual void set_sym_obj(int, int);
00116 virtual void makeSymObj(int oID);
00117 virtual int lookSymObj(int oID);
00118 virtual void copyCoeffSymObjMILP();
00119 virtual void printSymObjsOnScreen();
00120
00122 virtual int get_binv_size();
00123 virtual int get_binv_anz_obj();
00124 virtual char* get_binv_acc(int i);
00125 virtual void set_binv_acc(int i, char* chr);
00126 virtual int get_binv_code(int i);
00127 virtual double get_binv_ask(int i);
00128 virtual double get_binv_anz(int i);
00129 virtual int get_binv_age(int i);
00130 virtual void set_binv_age(int i, int age);
00131 virtual double get_binv_shareEC(int i);
00132 virtual void set_binv_shareEC(int i, double shr);
00133 virtual double get_binv_rateDC(int i);
00134 virtual void set_binv_rateDC(int i, double rat);
00135 virtual void binvest_vergroessern();
00136 virtual void inventarisieren(char* acc, int oID, double pPr, double siz, double ssf, double iDC, int age);
00137 virtual void deinventarisieren(int);
00138 virtual void binvest_ausschreiben();
00139 virtual void binvest_writeToStream(FILE* strm);
00140 virtual int getObjRowForCol(int cLP);
00141 virtual int getObjCodeForCol(int cLP);
00142 virtual int getObjRowForCode(int code);
00143 virtual int getCapRowForCode(int code);
00144 virtual int get_n_dauer(int code);
00145 virtual int getRegRowForCode(int code);
00146
00148 virtual void checkIfAgentHasInfrastructureProjects();
00149
00150
00151 virtual int getSoilType(int objID);
00152
00153 virtual double get_lohn();
00155 virtual nutz get_nutz_info(int);
00156
00158 virtual void updatePerennialsRegistry();
00159 virtual int makeEntryInPerennialsRegistry(int objID, int colLP);
00160 virtual void computeIndividualObjectCoefficients(int objectID, double sizeHa, int age, int idxPermCrops, double interest);
00161
00162 virtual void dauerkultur_austragen(int soilType, double sizeHa);
00163 virtual double get_fruehe_produktionskosten(int);
00164 virtual double getHectaresOfPermanentCropsOnSoilType(int soilType, int);
00165
00166
00167
00168 virtual void bflaech_obst_belegen(double, double);
00169
00170 virtual void blockParcelsWithPermanentCrops(int soilType, double existingHa, double deltaHa, string outputStr);
00171
00172
00173 virtual void bflaech_forst_belegen(double, double);
00174 virtual void forst_zaehlen();
00175
00176
00177
00182
00183 virtual void makePriceExpectation();
00184 virtual void makeWaterSupplyExpectationYearly();
00185 virtual void makeWaterSupplyExpectationInMonth(int m);
00186 virtual void makeWaterDemandExpectationYearly();
00187
00188
00189
00190
00191 virtual void makeWaterDemandExpectationInMonth(int m);
00192 virtual void makeYieldExpectationsForCropWat();
00193 virtual void initializeYieldExpectationsForCropWat();
00194
00195
00196
00197 virtual void estimateEffectivePrecipitationForFullYear(TimeHandler& th_notChanged, MatrixDouble& vectorPrecipitation, MatrixDouble& agentsEffectivePrecipitation );
00198
00199 virtual void copyEffectivePrecipitationInMonth(int m, const MatrixDouble& vectorOfMonthlyCropEffectivePrecipitation, MatrixDouble& agentsEffectivePrecipitation);
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212 virtual void makeYieldExpectationsForTspc();
00213 virtual void initializeYieldExpectationsForTspc();
00214 virtual void initPlotsInNRUs();
00215
00217 virtual int pacht_ueberlegen();
00218 virtual double hole_q_B(int);
00219 virtual double hole_q_W(int);
00220 virtual double hole_volB(int);
00221 virtual void forderung_speichern(int, p_gebot* f);
00222 virtual void forderung_holen(int typ, p_gebot* f);
00223 virtual void forderung_loeschen(int typ);
00224 virtual void matrix_forderung_loeschen();
00225 virtual double get_zus_TK();
00226 virtual void set_zus_TK(double);
00227
00228
00229
00234
00235 virtual double investPlanOSL();
00236 virtual double producPlanOSL();
00237 virtual double consumPlanOSL();
00238
00240
00241 virtual int getNNrowsInternal();
00242 virtual int getNNcolsInternal();
00243 virtual int getNumColsInternal();
00244 virtual double getActualTotalGrossMargin();
00245
00246
00247 virtual void inv_leistungen();
00248 virtual void rhs_Runden();
00249
00250 virtual double get_kapazitaeten(int);
00251 virtual void set_kapazitaeten(int, double);
00252 virtual double get_schattenpreise(int);
00253 virtual void schattenpreise_speichern();
00254 virtual void schattenpreise_wiederherstellen();
00255
00256 virtual void updateAgentZRow();
00257 virtual void updateStartPeriodRHS();
00258 virtual void updateEndOfPeriodRHS();
00259 virtual void copyInvPCropsRHS();
00260
00261 virtual int copyLPdataInvMode(int);
00262 virtual int copyLpDataInInvestmentMode(int isIntegerProblem);
00263
00264 virtual void copyAvailablePermanentCropsInInvestmentMode(int availPCropsIdx);
00265 virtual void copyExistingPermanentCropsInInvestmentMode(int agentRegistryIdx, int lpCol, int lpRow);
00266 virtual void copyAllOtherAvailableObjectsInInvestmentMode(int invObjIdx);
00267 virtual void copyNewLivestockInInvestmentMode(int invObjIdx);
00268 virtual void copyExistingLivestockInInvestmentMode(int objectID);
00269
00270 virtual int copyLPdataPrdMode(int);
00271 virtual int copyLpDataInProductionMode(int isIntegerProblem);
00272
00273 virtual void copyExistingPermanentCropsInProductionMode(int agentRegistryIdx, int lpCol, int lpRow);
00274 virtual void copyExistingLivestockInProductionMode(int objectID);
00275
00276 virtual void copyExpectedWaterDemandsIntoMILP();
00277 virtual void copyExpectedYieldsOfAnnualCropsIntoMILP();
00278
00279 virtual int copyLPdataConMode(int ipr);
00280 virtual void copyConsCoeff(double hhEgy);
00281 virtual void modifyProductionSolution(int num, int*& cols, double*& values);
00282 virtual void setProductionSolutionColumn(double va, int colLP);
00283
00284 #ifdef LP_OLD
00285
00286 virtual double solveLinPrbOSL(int savePrim, int saveDual);
00287 virtual double solveIntPrbOSL(int savePrim, int saveDual, int& forSol);
00288
00289 virtual void makeNewPrbOSL();
00290 virtual void freeNewPrbOSL();
00291 #else
00292
00293 virtual void changeObjFunc(double*& objF, int oSta, int oEnd);
00294 virtual void fixLaborBinar(double femLab, double malLab);
00295 virtual void fixProducVars();
00296 virtual void changeElemMtx(int num, int*& rows, int*& cols, double*& elms);
00297 virtual void setToEEConstr(int rLP, double value);
00298 virtual void switchOffFineTune();
00299 virtual void switchOnFineTune();
00300
00301
00302 virtual int identCrAcForCol(int colLP, int& aID, int& nru);
00303 #endif
00304
00305
00306
00310
00311
00312 virtual void set_IPGvec(void);
00313
00314 virtual double computeAverageOnFieldIrrigationEfficiency(IrrigationMethodSector* sectorPointerToIrrigationMethods);
00315
00316
00317 virtual double irrigateCropsByPriorityGroups(int month);
00318
00319
00320 virtual void computeCropWaterYields();
00321
00322
00323
00324 virtual void setOutputOfAllCropsToZero();
00325
00326
00327 virtual void applyYieldReductionFactorsAndUpdateLpSolution();
00328
00330 virtual double get_N_i(int);
00331 virtual double get_WPa_i(int);
00332 virtual void set_WPa_i(int, double);
00333 virtual void waterrights_eintragen(int, double);
00334 virtual void hole_durchs_waterrights(w_rechte*);
00335 virtual void waterrights_austragen(w_rechte*);
00336
00338
00339
00340 virtual void createDataForCropWaterModule();
00341
00342
00343 virtual double aggregateIrrigationWaterDemandsByIrrigationMethod(int month);
00344
00345 virtual double receiveNetInflows(int month, int = true);
00346
00347 virtual double receivePlantWaterDemandsSatisfied(int month);
00348 virtual double receivePlantWaterDemandsSatisfied(int month, double Ueb_j_tmp);
00349
00350
00351
00356
00357 virtual void makePlantYields();
00358
00360 virtual double bodenvermoegen_bestimmen();
00361 virtual void computeIncome();
00362 virtual double computeCashConsumption();
00363 virtual double vermoegen_umschichten(w_rechte*);
00364 virtual int betriebsaufgabe_pruefen(double);
00365 virtual double abandonAllWaterAndLandResources(w_rechte*);
00366 virtual double abs_tilg_berechnen(double&);
00367 virtual double computeTransportCosts();
00368 virtual double computeFarmFixCosts();
00369
00371 virtual void addHHmember(int age, int sex, int head, int career);
00372 virtual void makeHeadOfHH(int sex);
00373 virtual void updateAgeOfMembers();
00374
00375 virtual void addUnitLstck(int type, int age);
00376 virtual void updateOffspOfLstck();
00377 virtual void updateAgeOfLstck();
00378
00379 virtual void updateSalesOfLivestock();
00380 virtual void updateAges();
00381 virtual double updateIdleLsInBinvest(MatrixDouble& lsIdle);
00382 virtual double updateSoldLsInBinvest(MatrixDouble& lsSold);
00383 virtual void incrLiqStartPeriod(double amount);
00384 virtual void incrLiqEndOfPeriod(double amount);
00385
00386
00387
00392
00393 virtual void writeAgtLandData(FILE* stream0);
00394 virtual void writeAgtWaterData(int m);
00395
00397 virtual void writeExpectedMarketPriceData(FILE* strm);
00398 virtual void writeExpectedWaterSupplyData(FILE* strm);
00399 virtual void writeExpectedCropWaterData(FILE* strm);
00400
00401
00403 virtual void writeAgtIdEntry(FILE* stream);
00404 virtual void writePfmPrdData(FILE* stream0, FILE* stream1);
00405 virtual void writeCapRHSData(FILE* stream);
00406
00407 virtual void printOnScreenHH();
00408 virtual void printOnScreenWaterRights();
00409 virtual void bnummer_anpassen(int);
00410
00412 virtual void printOnScreen_crpMixClass();
00413
00415 virtual void printOnScreen_crpMixClass(int cnt);
00416 virtual void printOnScreen_crpMixWater();
00417 virtual void printOnScreen_crpMixWater(int cnt);
00418
00419 virtual void printOnScreenProduction();
00420 virtual void writeToFileProduction(ofstream& out);
00421 virtual void printOnScreen_AllInfo(int soilC, int cnt);
00422 virtual void printOnScreen_bflaech(void);
00423 virtual void printSymbolicObjects();
00424
00425 virtual void printOnScreenLv();
00426 virtual void printOnScreen2();
00427
00428 virtual void printOnScreenWater();
00429 virtual void printOnScreenCropMatrix();
00430
00431
00432 virtual void writeAllCropWaterDataToFile();
00433
00434
00435 virtual void writeAllParcelsToFile(ofstream& out);
00436
00437 virtual void writeWaterInfoToFile(ofstream& out);
00438
00439
00440
00445
00446 virtual int checkCropsInClass(int i);
00447
00448
00449
00450 virtual void allocateActivitiesInSpace(void);
00451
00452 virtual void allocateSpatiallyIrrigationWaterToCropMixClass(int thisMonth);
00453
00454
00455
00456
00457
00458 virtual void updateIrrigWaterCropMixClass2Parcels(int mTot);
00459
00460
00461 virtual void copyContent_Water2Parcels(int mTot);
00462
00463 virtual void copyContent_Landscape2Parcels(Content cont);
00464 virtual void copyContent_Landscape2Parcels(Content cont, bool flag_fixCopyToCell);
00465 virtual void copyContent_Landscape2Parcels_monthly(Content cont, int m);
00466 virtual void copyContent_ParcelToLandscape(Content cont);
00467 virtual void copyContent_ParcelToLandscape_monthly(Content cont, int month);
00468
00469
00470 virtual double getMeanOfAllParcels(Content cont);
00471
00472
00473
00474 virtual void resetAllParcels_toNotUsed(void);
00475
00476
00477
00478 virtual void checkIfTrue(bool isTrue);
00479 virtual void addLanduseToColumnOfMatrix(MatrixDouble& matrixOfCatchmentLandUses, int uaID);
00480
00481 virtual void checkActivityIDconsistent(int a, string functionName);
00482 virtual double getActivityArea(int a);
00483
00484
00485
00487
00488
00489 investart* investmeth;
00490 int* inv_anz_ptr;
00491 double* rateLC_ptr;
00492 double* rateSC_ptr;
00493 double* rateSD_ptr;
00494 double* shareEC_ptr;
00495 double* bonus_ptr;
00496 double* sunkcost_ptr;
00497 double* sog_ptr;
00498 double* opp_ptr;
00499 MatrixDouble* dkulturen_ptr;
00500
00502 #ifdef LP_OLD
00503 agentF(int agid, int scid, int skid, int ppid, int clid, int nwid, int fstd, int numP, int seg, int erw);
00504 #else
00505
00506
00507
00508
00509
00511 agentF(int agid, int scid, int skid, int ppid, int clid, int nwid, int fstd, int numP, int seg, int erw, MipHandler* globalProblemHandler_);
00512 #endif
00513
00515 virtual ~agentF();
00516 virtual void deallocYieldExp();
00518
00519
00520
00521 #ifndef LP_OLD
00522 private:
00524
00525 MipHandler* globalProblemHandler;
00526 ProblemDescription* specialMipIndices;
00527 AgentProblem* specificProblem;
00528 AgentSolution investmentSolution;
00529 AgentSolution productionSolution;
00530 AgentSolution consumptionSolution;
00532
00533
00534 virtual void upateMipHandlerAgentParam();
00536 #endif
00537
00538 protected:
00540
00541
00542 int seg_nr;
00543 int innov;
00544 int erwart;
00545 int popID;
00546 int cluID;
00547 int fstID;
00548 int farbe;
00549
00550
00551
00555
00556 int fl_anzahl;
00558 int* parzellen;
00560 coord hofflaeche;
00562 p_liste bflaech;
00564 ls_list herd;
00566 hh_list household;
00567 int famAK_anzahl;
00568 int frAK_anzahl;
00569
00571 MatrixDouble wr;
00572
00573
00574
00575
00577 investdef* binvest;
00578 int binv_anz;
00579 int binv_size;
00580 MatrixDouble dkult_reg;
00581 segment* segPtr;
00582 int** sym_obj;
00583
00584
00585
00590
00591 double afa;
00592 double aktiva;
00593 double arbeitseinsatz;
00594 double bodenentlohnung;
00595 double cashflow;
00596 double durchsDB;
00597 double eigenkapital;
00598 double einkommen;
00599 double entfernungskosten;
00600 double entnahmen;
00601 double fremdkapital;
00602 double tilgung;
00603
00604 double totalIrrigatedArea;
00605 double kapitaleinsatz;
00606 double shortTermDeposits;
00607 double liqMeans;
00608 double liqMeansPreviousPeriod;
00609 double liqMeansUsedForInvestment;
00610 double equityCapitalPreviousPeriod;
00611 double debtCapitalPreviousPeriod;
00612 double pacht;
00613 double relEntl;
00614 double wertschoepfung;
00615 double zinskosten;
00616 double zusaetzlicheTK;
00617
00619 double inCashEarn;
00620 double inKindEarn;
00621 double apprAssets;
00622 double savingOfHH;
00623 double extraConHH;
00624
00625
00626
00630
00631
00632
00633
00634
00636 MatrixDouble cropWaterData;
00637
00638
00639
00640
00641 MatrixDouble waterDeficitsOfCropsAsMonthlyKR;
00642
00643
00644
00645 MatrixDouble irrigationWaterDemandsPerPriorityGroup;
00646
00647
00648
00649 MatrixDouble percentageIrrigatedPerPriorityGroup;
00650
00651
00652
00653 MatrixDouble irrigationWaterSuppliedToCrops;
00654
00655 double etaOfAgent;
00656 double totalIrrigationWaterApplied;
00657
00658
00659
00660
00661
00662
00663
00664
00665 crpMixClass* cropMixAgent;
00666
00667
00668
00672
00673 double* D_i;
00675 double* D_sat;
00676
00677 double* erw_N_i;
00679 double* N_i;
00681 double* erw_Ext_i;
00683 double* Ext_i;
00685 double* WPa_i;
00687 double* S_i;
00688
00690 MatrixDouble expCropWaterYields;
00692 MatrixDouble actCropWaterYields;
00693
00695 MatrixDouble expCropWaterIrrDmds;
00696
00697
00698
00702
00703 caYld** expYlds;
00705 caYld** actYlds;
00706
00707
00708
00712 double* erw_preise;
00713 double* varsRHS;
00714 double* varsLHS;
00715 double* schattenpreise;
00716 double* alte_spreise;
00717 MatrixDouble ford_bak;
00718 int lock;
00719 int migr;
00720
00721 int solvedLP;
00723 MatrixDouble mEntries;
00724
00725 #ifdef LP_OLD
00726 l_vektor bprod;
00727 #endif
00728
00730 int numChangedElems;
00732 int* idxRow;
00734 int* idxCol;
00736 double* matEls;
00737
00738
00739
00740 };
00741
00742
00743
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796 #endif
00797