src/de/pik/lagom/generic/initvalues/HouseholdInitValues.java

00001 
00002 // Copyright 2010 by Carlo Jaeger, Antoine Mandel, Steffen Fuerst and European Climate Forum
00003 // Licensed under the Open Software License version 3.0
00004 // See the file "License-OSL-3.0.txt" in the distribution for more information 
00005 // The License text can be also found under http://www.opensource.org/licenses/osl-3.0.php
00007 
00008 package de.pik.lagom.generic.initvalues;
00009 
00010 import static de.pik.lagom.annotations.Variability.SIMULATION;
00011 
00012 import java.io.Serializable;
00013 import java.util.LinkedList;
00014 import java.util.List;
00015 
00016 import de.pik.lagom.annotations.Description;
00017 import de.pik.lagom.annotations.InitValue;
00018 import de.pik.lagom.annotations.MatrixDescription;
00019 import de.pik.lagom.annotations.NameInUI;
00020 import de.pik.lagom.annotations.Variability;
00021 import de.pik.lagom.exceptions.ValueValidationException;
00022 import de.pik.lagom.generic.consumptiontechnology.ConsumptionTechnologyFactory;
00023 import de.pik.lagom.toolbox.ArrayTools;
00024 import de.pik.lagom.toolbox.io.initvalues.InitValuesManager;
00025 
00026 import net.sf.oval.constraint.NotNegative;
00027 
00029 @Variability(SIMULATION)
00030 public class HouseholdInitValues extends InitValuesWithSectors implements Serializable {
00031   private static final int UNKNOWN_CONSUMPTION_TECHNOLOGY = -1;
00032 
00034   @InitValue(inspector = "Household", posInInspector = 200)
00035   @NameInUI("Employers Sampling Rate")
00036   @Description("The number of speculative applications a household sends to firms is " +
00037       "calculated by multiplying the number of firms with this quotient")
00038   private double observedEmployersQuotient = 0.1d;
00039 
00045   @InitValue(inspector = "Household", posInInspector = 100)
00046   @NameInUI("Suppliers Sampling Rate")
00047   @Description("The number of observed suppliers for a sector's good is calculated" +
00048       " by multiplying the number of firms in the supplying sector with this quotient")
00049   private double observedSuppliersQuotient = 1d;
00050 
00052   @InitValue(inspector = "Household", posInInspector = 700)
00053   @NameInUI("Savings Rate")
00054   @Description("The share of unexpected income the household saves")
00055   private double savingRate = 0.1d;
00056 
00058   @InitValue(inspector = "Data", posInInspector = 601)
00059   @NameInUI("savings")
00060   @Description("The total amount of savings")
00061   private double savings = 0d;  
00062   
00064   @InitValue(inspector = "Data", posInInspector = 103)
00065   @NameInUI("Consumption Elasticity of Substitution")
00066   @Description("The elasticity of substitution between consumption goods")
00067   private double consumptionElasticity = 2.d; 
00068   
00069   // consumptionTechnology is divided in two parts, the first is the index of the combobox
00070   // in the MASON GUI, the second is the name of the function, written and read from
00071   // the csv file
00072   @NotNegative
00073   @InitValue(inspector = "Household", posInInspector = 4000, readOnly = true)
00074   @NameInUI("Consumption Technology")
00075   @Description("The 'consumption technology' determines the preference structure")
00076   private int consumptionTechnology = UNKNOWN_CONSUMPTION_TECHNOLOGY;
00077 
00078   @InitValue
00079   private String consumptionTechnologyName = ConsumptionTechnologyFactory.
00080                                                     getDefaultConsumptionTechnologyName();
00081 
00082   @InitValue(inspector = "Household", posInInspector = 1010, exclude = 
00083                                                     "defaultConsumptionTechnologyMutationMin")
00084   @MatrixDescription(rowNames = "getSectorNames")
00085   @NameInUI("Consumption Coefficients Mutation Lower Bound")
00086   @Description("The lower bound of the consumption coefficients' mutation interval")
00087   private double[] consumptionTechnologyMutationMin;
00088 
00089   @InitValue(readOnly = true, exclude = "consumptionTechnologyMutationMin")
00090   private double defaultConsumptionTechnologyMutationMin = -0.05d;
00091 
00092   @InitValue(inspector = "Household", posInInspector = 1011, exclude = 
00093                                                     "defaultConsumptionTechnologyMutationMax")
00094   @MatrixDescription(rowNames = "getSectorNames")
00095   @NameInUI("Consumption Coefficients Mutation Upper Bound")
00096   @Description("The upper bound of the consumption coefficients' mutation interval")
00097   private double[] consumptionTechnologyMutationMax;
00098 
00099   @InitValue(readOnly = true, exclude = "consumptionTechnologyMutationMax")
00100   private double defaultConsumptionTechnologyMutationMax = 0.05d;
00101 
00102   @InitValue(inspector = "Household", posInInspector = 1000)
00103   @NameInUI("Initial Consumption Coefficients Mutation")
00104   @Description("The initial consumption coefficients are variated maximally by this factor")
00105   private double initialConsumptionTechnologyMutation = 0.05d;
00106 
00107   @InitValue(inspector = "Household", posInInspector = 1000)
00108   @NameInUI("Technology Imitation Factor")
00109   @Description("When a household imitates the consumption coefficients of another household, " +
00110       "the Imitation Factor determines the level of imitation (1 equals full imitation)")
00111   private double imitationFactor = 0.5d;
00112   
00114   @InitValue(inspector = "Household", posInInspector = 800)
00115   @NameInUI("expected income change rate")
00116   @Description("expected income change rate")
00117   private double expectedIncomeUpdateRate = 0.25d;
00118 
00119   HouseholdInitValues(InitValuesManager pIVM) {
00120     super(pIVM);
00121     setConsumptionTechnologyName(consumptionTechnologyName);
00122   }
00123 
00124   @Override
00125   public void setArrayValues() {
00126     setDefaultConsumptionTechnologyMutationMin(defaultConsumptionTechnologyMutationMin);
00127     setDefaultConsumptionTechnologyMutationMax(defaultConsumptionTechnologyMutationMax);
00128   }
00129 
00130   @Override
00131   public void validate(List<String> pWarnings) throws ValueValidationException {
00132     if (consumptionTechnology == UNKNOWN_CONSUMPTION_TECHNOLOGY) {
00133       throw new ValueValidationException("Unknown Consumption Technology");
00134     }
00135   }
00136   
00137   //getter/setter methods
00138   public double getObservedEmployersQuotient() {
00139     return observedEmployersQuotient;
00140   }
00141 
00142   public void setObservedEmployersQuotient(double pObservedEmployersQuotient) {
00143     observedEmployersQuotient = pObservedEmployersQuotient;
00144   }
00145 
00146   public double getObservedSuppliersQuotient() {
00147     return observedSuppliersQuotient;
00148   }
00149 
00150   public void setObservedSuppliersQuotient(double pObservedSuppliersQuotient) {
00151     observedSuppliersQuotient = pObservedSuppliersQuotient;
00152   }
00153 
00154   public double getSavingRate() {
00155     return savingRate;
00156   }
00157 
00158   public void setSavingRate(double pSavingRate) {
00159     savingRate = pSavingRate;
00160   }
00161 
00162   public List<String> domConsumptionTechnology() {
00163     final LinkedList<String> consumptionTechnologyNames = new LinkedList<String>();
00164     for (final String lPF : ConsumptionTechnologyFactory.getConsumptionTechnologiesNames()) {
00165       consumptionTechnologyNames.add(lPF);
00166     }
00167     return consumptionTechnologyNames;
00168   }
00169 
00170   public int getConsumptionTechnology() {
00171     return consumptionTechnology;
00172   }
00173 
00174   public void setConsumptionTechnology(int pConsumptionTechnology) {
00175     consumptionTechnology = pConsumptionTechnology;
00176 
00177     int lCount = pConsumptionTechnology;
00178     for (final String lPF : ConsumptionTechnologyFactory.getConsumptionTechnologiesNames()) {
00179       consumptionTechnologyName = lPF;
00180       if (--lCount < 0) {
00181         break;
00182       }
00183     }
00184   }
00185 
00186   public String getConsumptionTechnologyName() {
00187     int lPFCounter = consumptionTechnology;
00188     for (final String lPF : ConsumptionTechnologyFactory.getConsumptionTechnologiesNames()) {
00189       if (lPFCounter == 0) {
00190         return lPF;
00191       }
00192       lPFCounter--;
00193     }
00194     assert(false);
00195     return "ConsumptionTechnology unknown";
00196   }
00197 
00198   public void setConsumptionTechnologyName(String pName) {
00199     consumptionTechnologyName = pName;
00200     int lPFCounter = 0;
00201     for (final String lPF : ConsumptionTechnologyFactory.getConsumptionTechnologiesNames()) {
00202       if (lPF.equals(pName)) {
00203         consumptionTechnology = lPFCounter;
00204         return;
00205       }
00206       lPFCounter++;
00207     }
00208     // else the consumption technology of the file doesn't exist anymore
00209     consumptionTechnology = UNKNOWN_CONSUMPTION_TECHNOLOGY;
00210   }
00211 
00212   public double[] getConsumptionTechnologyMutationMin() {
00213     return consumptionTechnologyMutationMin;
00214   }
00215 
00216   public void setConsumptionTechnologyMutationMin(double[] pConsumptionTechnologyMutationMin) {
00217     consumptionTechnologyMutationMin = pConsumptionTechnologyMutationMin;
00218     defaultConsumptionTechnologyMutationMin =
00219       checkForDefault(defaultConsumptionTechnologyMutationMin, 
00220                               pConsumptionTechnologyMutationMin);
00221   }
00222 
00223   public double getDefaultConsumptionTechnologyMutationMin() {
00224     return ArrayTools.allElementsHaveSameValue(consumptionTechnologyMutationMin);
00225   }
00226 
00227   public void setDefaultConsumptionTechnologyMutationMin(
00228                                               double pDefaultConsumptionTechnologyMutationMin) {
00229     defaultConsumptionTechnologyMutationMin = pDefaultConsumptionTechnologyMutationMin;
00230     consumptionTechnologyMutationMin = createArray(defaultConsumptionTechnologyMutationMin);
00231   }
00232 
00233   public double[] getConsumptionTechnologyMutationMax() {
00234     return consumptionTechnologyMutationMax;
00235   }
00236 
00237   public void setConsumptionTechnologyMutationMax(double[] pConsumptionTechnologyMutationMax) {
00238     consumptionTechnologyMutationMax = pConsumptionTechnologyMutationMax;
00239     defaultConsumptionTechnologyMutationMax =
00240                                 checkForDefault(defaultConsumptionTechnologyMutationMax, 
00241                                                 pConsumptionTechnologyMutationMax);
00242   }
00243 
00244   public double getDefaultConsumptionTechnologyMutationMax() {
00245     return ArrayTools.allElementsHaveSameValue(consumptionTechnologyMutationMax);
00246   }
00247 
00248   public void setDefaultConsumptionTechnologyMutationMax(
00249                                               double pDefaultConsumptionTechnologyMutationMax) {
00250     defaultConsumptionTechnologyMutationMax = pDefaultConsumptionTechnologyMutationMax;
00251     consumptionTechnologyMutationMax = createArray(defaultConsumptionTechnologyMutationMax);
00252   }
00253 
00254   public double getInitialConsumptionTechnologyMutation() {
00255     return initialConsumptionTechnologyMutation;
00256   }
00257 
00258   public void setInitialConsumptionTechnologyMutation(double 
00259                                                        pInitialConsumptionTechnologyMutation) {
00260     initialConsumptionTechnologyMutation = pInitialConsumptionTechnologyMutation;
00261   }
00262 
00263   public double getImitationFactor() {
00264     return imitationFactor;
00265   }
00266 
00267   public void setImitationFactor(double pImitationFactor) {
00268     imitationFactor = pImitationFactor;
00269   }
00270 
00271   public double getConsumptionElasticity() {
00272     return consumptionElasticity;
00273   }
00274 
00275   public void setConsumptionElasticity(double pConsumptionElasticity) {
00276     consumptionElasticity = pConsumptionElasticity;
00277   }
00278 
00279   public double getExpectedIncomeUpdateRate() {
00280     return expectedIncomeUpdateRate;
00281   }
00282 
00283   public double getSavings() {
00284     return savings;
00285   }
00286 
00287   public void setSavings(double pSavings) {
00288     savings = pSavings;
00289   }
00290 
00291   public void setExpectedIncomeUpdateRate(double pExpectedIncomeUpdateRate) {
00292     expectedIncomeUpdateRate = pExpectedIncomeUpdateRate;
00293   }
00294 }
00295 
00297 // EOF

Generated on Tue Sep 14 11:11:48 2010 for lagom_generiC by  doxygen 1.5.4