00001
00002
00003
00004
00005
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
00070
00071
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
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
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