From 72ec5c16ac44419dfffbd182b5c931c11e314d92 Mon Sep 17 00:00:00 2001 From: Peter Alexander <peter@blackhillock.co.uk> Date: Wed, 27 Mar 2019 21:33:41 +0000 Subject: [PATCH] Price markup at country level --- data/consumerprices.csv | 715 ++++++++++++++++++ src/ac/ed/lurg/ModelConfig.java | 1 + .../ed/lurg/country/AbstractCountryAgent.java | 15 +- .../ed/lurg/demand/ElasticDemandManager.java | 24 +- src/ac/ed/lurg/demand/PriceMarkUps.java | 97 +++ src/ac/ed/lurg/types/CommodityType.java | 19 +- 6 files changed, 842 insertions(+), 29 deletions(-) create mode 100644 data/consumerprices.csv create mode 100644 src/ac/ed/lurg/demand/PriceMarkUps.java diff --git a/data/consumerprices.csv b/data/consumerprices.csv new file mode 100644 index 00000000..1e678890 --- /dev/null +++ b/data/consumerprices.csv @@ -0,0 +1,715 @@ +Item,country,price2010 +cereals,Albania,92.61620875 +cereals,Algeria,79.12604798 +cereals,Argentina,58.98091008 +cereals,Armenia,66.4059083 +cereals,Australia,85.4311693 +cereals,Austria,81.70934596 +cereals,Bangladesh,57.44643753 +cereals,Belarus,79.37254981 +cereals,Belgium,89.60145604 +cereals,Benin,57.23949638 +cereals,Bolivia,88.19542403 +cereals,Bosnia and Herzegovina,66.07764316 +cereals,Botswana,87.978832 +cereals,Brazil,76.86212031 +cereals,Bulgaria,58.95348637 +cereals,Burkina Faso,77.32890568 +cereals,Cambodia,142.183393740106 +cereals,Cameroon,142.183393740106 +cereals,Canada,58.96490274 +cereals,Chile,71.8228135 +cereals,China mainland,142.183393740106 +cereals,Colombia,105.1776711 +cereals,Costa Rica,124.7361464 +cereals,Cote d'Ivoire,95.86913838 +cereals,Croatia,67.85754699 +cereals,Cyprus,105.2886898 +cereals,Czech Republic,63.18340316 +cereals,Denmark,89.10245816 +cereals,Dominican Republic,110.5084739 +cereals,Ecuador,108.4455234 +cereals,Egypt,81.95117295 +cereals,El Salvador,80.59380658 +cereals,Estonia,63.3315266 +cereals,Finland,70.8782459 +cereals,France,72.61920513 +cereals,Gabon,133.697322 +cereals,Georgia,64.29716556 +cereals,Germany,72.25236978 +cereals,Ghana,142.183393740106 +cereals,Greece,89.67746739 +cereals,Honduras,85.45743913 +cereals,Hungary,65.24211288 +cereals,India,140.2908587 +cereals,Indonesia,102.2681274 +cereals,Iran,93.4662057 +cereals,Ireland,73.49546335 +cereals,Israel,87.24472743 +cereals,Italy,92.39489174 +cereals,Jamaica,100.232425 +cereals,Japan,142.183393740106 +cereals,Jordan,87.8739542 +cereals,Kazakhstan,55.61665767 +cereals,Laos,90.15108507 +cereals,Latvia,64.49261477 +cereals,Lebanon,75.23512148 +cereals,Libya,126.7891998 +cereals,Lithuania,60.13754357 +cereals,Macedonia,81.9077207 +cereals,Malaysia,124.471823 +cereals,Mauritius,112.0463784 +cereals,Mexico,61.98573728 +cereals,Moldova,55.18331126 +cereals,Morocco,90.68941315 +cereals,Namibia,117.4142724 +cereals,Nepal,62.40567158 +cereals,Netherlands,75.23257758 +cereals,New Zealand,109.8161212 +cereals,Nicaragua,123.3380281 +cereals,Norway,142.183393740106 +cereals,Panama,142.183393740106 +cereals,Paraguay,50.14889118 +cereals,Peru,96.45455947 +cereals,Philippines,142.183393740106 +cereals,Poland,56.87382273 +cereals,Portugal,87.64143454 +cereals,Republic of Korea,142.183393740106 +cereals,Romania,63.91594393 +cereals,Russian Federation,54.89645733 +cereals,Saudi Arabia,101.3911153 +cereals,Senegal,92.29068908 +cereals,Slovakia,86.13123539 +cereals,Slovenia,61.2582105 +cereals,South Africa,75.00786796 +cereals,Spain,84.25024918 +cereals,Sri Lanka,142.183393740106 +cereals,Sweden,81.90087767 +cereals,Switzerland,142.183393740106 +cereals,Tajikistan,100.114447 +cereals,Tanzania,142.183393740106 +cereals,Thailand,112.4957682 +cereals,Togo,79.9804073 +cereals,Trinidad and Tobago,132.7981335 +cereals,Tunisia,135.6437251 +cereals,Turkey,124.0774798 +cereals,Ukraine,51.08451345 +cereals,United Kingdom,75.39661882 +cereals,United States,79.97711495 +cereals,Uruguay,76.49946823 +cereals,Venezuela,90.4800469 +cereals,Vietnam,97.4612592 +cereals,Yemen,80.02762914 +cereals,Zambia,85.9706484 +starchyRoots,Albania,622.9962558 +starchyRoots,Algeria,782.886153 +starchyRoots,Argentina,271.0116567 +starchyRoots,Armenia,726.6671603 +starchyRoots,Australia,745.3858866 +starchyRoots,Austria,337.7671679 +starchyRoots,Bangladesh,136.5161832 +starchyRoots,Belarus,325.7656344 +starchyRoots,Belgium,197.0185213 +starchyRoots,Benin,203.1122055 +starchyRoots,Bolivia,133.2559006 +starchyRoots,Bosnia and Herzegovina,625.8903706 +starchyRoots,Botswana,919.68106364012 +starchyRoots,Brazil,350.9443858 +starchyRoots,Bulgaria,436.4655731 +starchyRoots,Burkina Faso,618.8751853 +starchyRoots,Cambodia,106.1909012 +starchyRoots,Cameroon,249.2970788 +starchyRoots,Canada,495.7045827 +starchyRoots,Chile,919.68106364012 +starchyRoots,China mainland,388.2665783 +starchyRoots,Colombia,919.68106364012 +starchyRoots,Costa Rica,822.2068221 +starchyRoots,Cote d'Ivoire,217.8099367 +starchyRoots,Croatia,777.6662593 +starchyRoots,Cyprus,919.68106364012 +starchyRoots,Czech Republic,405.0082088 +starchyRoots,Denmark,563.5610367 +starchyRoots,Dominican Republic,532.7203458 +starchyRoots,Ecuador,659.943294 +starchyRoots,Egypt,535.2783697 +starchyRoots,El Salvador,533.8232392 +starchyRoots,Estonia,408.4608298 +starchyRoots,Finland,443.3302231 +starchyRoots,France,333.9407742 +starchyRoots,Gabon,398.4977587 +starchyRoots,Georgia,287.5522802 +starchyRoots,Germany,409.0332197 +starchyRoots,Ghana,370.7503798 +starchyRoots,Greece,680.7103 +starchyRoots,Honduras,838.1913939 +starchyRoots,Hungary,377.5415201 +starchyRoots,India,323.2752148 +starchyRoots,Indonesia,253.8105169 +starchyRoots,Iran,389.5170366 +starchyRoots,Ireland,664.7867577 +starchyRoots,Israel,544.400913 +starchyRoots,Italy,528.3055646 +starchyRoots,Jamaica,919.68106364012 +starchyRoots,Japan,748.7709181 +starchyRoots,Jordan,500.136201 +starchyRoots,Kazakhstan,217.1865539 +starchyRoots,Laos,244.6692567 +starchyRoots,Latvia,390.3187509 +starchyRoots,Lebanon,414.1337364 +starchyRoots,Libya,739.8821445 +starchyRoots,Lithuania,524.4879805 +starchyRoots,Macedonia,523.0153499 +starchyRoots,Malaysia,409.3995811 +starchyRoots,Mauritius,466.7338251 +starchyRoots,Mexico,520.2257729 +starchyRoots,Moldova,194.3873448 +starchyRoots,Morocco,690.7035896 +starchyRoots,Namibia,919.68106364012 +starchyRoots,Nepal,179.5248421 +starchyRoots,Netherlands,545.0073395 +starchyRoots,New Zealand,520.1286859 +starchyRoots,Nicaragua,554.2914179 +starchyRoots,Norway,919.68106364012 +starchyRoots,Panama,758.505947 +starchyRoots,Paraguay,78.01532538 +starchyRoots,Peru,560.6292518 +starchyRoots,Philippines,396.8085101 +starchyRoots,Poland,310.5156149 +starchyRoots,Portugal,370.8689719 +starchyRoots,Republic of Korea,919.68106364012 +starchyRoots,Romania,325.8326679 +starchyRoots,Russian Federation,482.6984344 +starchyRoots,Saudi Arabia,409.1088357 +starchyRoots,Senegal,275.3043133 +starchyRoots,Slovakia,735.1691855 +starchyRoots,Slovenia,787.2295991 +starchyRoots,South Africa,464.5582686 +starchyRoots,Spain,458.3163834 +starchyRoots,Sri Lanka,319.1937544 +starchyRoots,Sweden,454.1228027 +starchyRoots,Switzerland,919.68106364012 +starchyRoots,Tajikistan,454.6921669 +starchyRoots,Tanzania,313.9428676 +starchyRoots,Thailand,401.1825951 +starchyRoots,Togo,255.069219 +starchyRoots,Trinidad and Tobago,400.299443 +starchyRoots,Tunisia,905.0758923 +starchyRoots,Turkey,529.2720359 +starchyRoots,Ukraine,597.5390536 +starchyRoots,United Kingdom,607.2211771 +starchyRoots,United States,537.1597878 +starchyRoots,Uruguay,638.3695014 +starchyRoots,Venezuela,889.1777957 +starchyRoots,Vietnam,177.9572154 +starchyRoots,Yemen,566.8015755 +starchyRoots,Zambia,147.8989971 +oilcropspulses,Albania,221.11562397506 +oilcropspulses,Algeria,145.8093979 +oilcropspulses,Argentina,82.3070334 +oilcropspulses,Armenia,182.7207961 +oilcropspulses,Australia,140.3072536 +oilcropspulses,Austria,145.7522215 +oilcropspulses,Bangladesh,101.5271305 +oilcropspulses,Belarus,94.14274185 +oilcropspulses,Belgium,140.332698 +oilcropspulses,Benin,117.6262068 +oilcropspulses,Bolivia,108.4379793 +oilcropspulses,Bosnia and Herzegovina,140.5182958 +oilcropspulses,Botswana,153.4150045 +oilcropspulses,Brazil,181.1258838 +oilcropspulses,Bulgaria,140.719032 +oilcropspulses,Burkina Faso,85.22097221 +oilcropspulses,Cambodia,95.92683321 +oilcropspulses,Cameroon,161.5329208 +oilcropspulses,Canada,115.8679587 +oilcropspulses,Chile,190.863536 +oilcropspulses,China mainland,116.8049131 +oilcropspulses,Colombia,103.386879 +oilcropspulses,Costa Rica,128.2583717 +oilcropspulses,Cote d'Ivoire,122.67404 +oilcropspulses,Croatia,221.11562397506 +oilcropspulses,Cyprus,179.2516342 +oilcropspulses,Czech Republic,108.8181612 +oilcropspulses,Denmark,192.7868181 +oilcropspulses,Dominican Republic,125.9164063 +oilcropspulses,Ecuador,103.5061192 +oilcropspulses,Egypt,208.4295237 +oilcropspulses,El Salvador,173.612863 +oilcropspulses,Estonia,199.7107904 +oilcropspulses,Finland,184.9555137 +oilcropspulses,France,145.2572793 +oilcropspulses,Gabon,110.2365308 +oilcropspulses,Georgia,123.3067165 +oilcropspulses,Germany,136.1872161 +oilcropspulses,Ghana,156.301424 +oilcropspulses,Greece,221.11562397506 +oilcropspulses,Honduras,146.2751856 +oilcropspulses,Hungary,121.9977354 +oilcropspulses,India,131.6808514 +oilcropspulses,Indonesia,111.8359023 +oilcropspulses,Iran,126.729151 +oilcropspulses,Ireland,172.1020695 +oilcropspulses,Israel,159.0836661 +oilcropspulses,Italy,177.6525637 +oilcropspulses,Jamaica,221.11562397506 +oilcropspulses,Japan,135.4152914 +oilcropspulses,Jordan,207.4869201 +oilcropspulses,Kazakhstan,84.9754705 +oilcropspulses,Laos,140.999568 +oilcropspulses,Latvia,138.426695 +oilcropspulses,Lebanon,164.9569679 +oilcropspulses,Libya,147.9341942 +oilcropspulses,Lithuania,120.3215783 +oilcropspulses,Macedonia,122.9376001 +oilcropspulses,Malaysia,92.11793634 +oilcropspulses,Mauritius,112.0849862 +oilcropspulses,Mexico,124.4810853 +oilcropspulses,Moldova,73.08763274 +oilcropspulses,Morocco,138.5174005 +oilcropspulses,Namibia,202.0058409 +oilcropspulses,Nepal,107.8396696 +oilcropspulses,Netherlands,121.7922946 +oilcropspulses,New Zealand,196.878751 +oilcropspulses,Nicaragua,169.883605 +oilcropspulses,Norway,152.9177454 +oilcropspulses,Panama,148.7703405 +oilcropspulses,Paraguay,119.3338585 +oilcropspulses,Peru,169.3421389 +oilcropspulses,Philippines,92.43642626 +oilcropspulses,Poland,106.0225394 +oilcropspulses,Portugal,166.7619242 +oilcropspulses,Republic of Korea,221.11562397506 +oilcropspulses,Romania,112.7105918 +oilcropspulses,Russian Federation,94.34128055 +oilcropspulses,Saudi Arabia,115.2571582 +oilcropspulses,Senegal,131.8838072 +oilcropspulses,Slovakia,140.9620058 +oilcropspulses,Slovenia,145.523001 +oilcropspulses,South Africa,108.248423 +oilcropspulses,Spain,167.2065099 +oilcropspulses,Sri Lanka,192.1423149 +oilcropspulses,Sweden,138.2433855 +oilcropspulses,Switzerland,221.11562397506 +oilcropspulses,Tajikistan,144.6866249 +oilcropspulses,Tanzania,148.7252875 +oilcropspulses,Thailand,177.2312846 +oilcropspulses,Togo,109.1875469 +oilcropspulses,Trinidad and Tobago,174.3187867 +oilcropspulses,Tunisia,143.0447591 +oilcropspulses,Turkey,171.2320848 +oilcropspulses,Ukraine,81.75135656 +oilcropspulses,United Kingdom,124.8175039 +oilcropspulses,United States,111.8854923 +oilcropspulses,Uruguay,144.0381733 +oilcropspulses,Venezuela,118.5787589 +oilcropspulses,Vietnam,147.6662518 +oilcropspulses,Yemen,78.3068284 +oilcropspulses,Zambia,113.556785 +sugar,Albania,243.41563812338 +sugar,Algeria,162.7225544 +sugar,Argentina,98.49701797 +sugar,Armenia,93.76946208 +sugar,Australia,183.3358626 +sugar,Austria,174.175117 +sugar,Bangladesh,160.6460709 +sugar,Belarus,169.3088349 +sugar,Belgium,153.8338815 +sugar,Benin,101.9497456 +sugar,Bolivia,106.7758592 +sugar,Bosnia and Herzegovina,213.7561662 +sugar,Botswana,243.41563812338 +sugar,Brazil,97.3271165 +sugar,Bulgaria,181.281842 +sugar,Burkina Faso,135.1917402 +sugar,Cambodia,208.6447322 +sugar,Cameroon,165.7052506 +sugar,Canada,183.2204301 +sugar,Chile,130.4245185 +sugar,China mainland,188.9751258 +sugar,Colombia,119.0241462 +sugar,Costa Rica,154.7559642 +sugar,Cote d'Ivoire,149.5856568 +sugar,Croatia,184.7468693 +sugar,Cyprus,234.3436092 +sugar,Czech Republic,151.8394397 +sugar,Denmark,183.71 +sugar,Dominican Republic,92.67859002 +sugar,Ecuador,133.5909145 +sugar,Egypt,142.119034 +sugar,El Salvador,109.3940966 +sugar,Estonia,176.2179059 +sugar,Finland,170.6087355 +sugar,France,164.35895 +sugar,Gabon,223.6012599 +sugar,Georgia,188.2683326 +sugar,Germany,160.9435692 +sugar,Ghana,107.8657524 +sugar,Greece,228.0770701 +sugar,Honduras,132.8160403 +sugar,Hungary,139.1784734 +sugar,India,133.6704135 +sugar,Indonesia,144.2674492 +sugar,Iran,148.3373256 +sugar,Ireland,221.041738 +sugar,Israel,154.7864933 +sugar,Italy,158.5384916 +sugar,Jamaica,145.1489451 +sugar,Japan,243.41563812338 +sugar,Jordan,148.0204367 +sugar,Kazakhstan,132.1824922 +sugar,Laos,222.3385277 +sugar,Latvia,176.9408183 +sugar,Lebanon,188.1214814 +sugar,Libya,107.9961537 +sugar,Lithuania,183.8728701 +sugar,Macedonia,155.2953263 +sugar,Malaysia,137.3472938 +sugar,Mauritius,132.2308204 +sugar,Mexico,153.7907688 +sugar,Moldova,161.6624437 +sugar,Morocco,100.9084271 +sugar,Namibia,217.0628669 +sugar,Nepal,111.2535617 +sugar,Netherlands,178.0225022 +sugar,New Zealand,200.3001822 +sugar,Nicaragua,99.24066664 +sugar,Norway,243.41563812338 +sugar,Panama,243.41563812338 +sugar,Paraguay,225.9575192 +sugar,Peru,121.1703157 +sugar,Philippines,163.0857925 +sugar,Poland,147.7054355 +sugar,Portugal,212.9937452 +sugar,Republic of Korea,243.41563812338 +sugar,Romania,193.1893549 +sugar,Russian Federation,204.5276825 +sugar,Saudi Arabia,127.8241823 +sugar,Senegal,175.0588543 +sugar,Slovakia,239.1976022 +sugar,Slovenia,231.275137 +sugar,South Africa,122.592289 +sugar,Spain,174.4329848 +sugar,Sri Lanka,131.1277754 +sugar,Sweden,174.2968704 +sugar,Switzerland,180.3225964 +sugar,Tajikistan,168.2572359 +sugar,Tanzania,235.8783932 +sugar,Thailand,99.598198 +sugar,Togo,79.19037477662 +sugar,Trinidad and Tobago,79.19037477662 +sugar,Tunisia,163.004311 +sugar,Turkey,150.5763826 +sugar,Ukraine,201.0693249 +sugar,United Kingdom,171.537862 +sugar,United States,197.7838808 +sugar,Uruguay,135.5747425 +sugar,Venezuela,87.11431924 +sugar,Vietnam,159.8005345 +sugar,Yemen,117.7933137 +sugar,Zambia,140.9802926 +fruitveg,Albania,2372.19619 +fruitveg,Algeria,2491.103486 +fruitveg,Argentina,1691.389343 +fruitveg,Armenia,4574.06158445 +fruitveg,Australia,4227.438375 +fruitveg,Austria,3071.050618 +fruitveg,Bangladesh,2223.798275 +fruitveg,Belarus,2976.009494 +fruitveg,Belgium,2788.137866 +fruitveg,Benin,3059.040142 +fruitveg,Bolivia,1029.790401 +fruitveg,Bosnia and Herzegovina,2504.159861 +fruitveg,Botswana,4574.06158445 +fruitveg,Brazil,1858.600925 +fruitveg,Bulgaria,2716.082942 +fruitveg,Burkina Faso,2872.764816 +fruitveg,Cambodia,1305.682513 +fruitveg,Cameroon,1428.739068 +fruitveg,Canada,3087.84287 +fruitveg,Chile,2874.664805 +fruitveg,China mainland,2761.06552 +fruitveg,Colombia,1669.240015 +fruitveg,Costa Rica,1627.526919 +fruitveg,Cote d'Ivoire,1472.258859 +fruitveg,Croatia,2463.582996 +fruitveg,Cyprus,3161.260304 +fruitveg,Czech Republic,2771.193634 +fruitveg,Denmark,3604.620207 +fruitveg,Dominican Republic,1335.264577 +fruitveg,Ecuador,983.1969798 +fruitveg,Egypt,1885.542058 +fruitveg,El Salvador,1515.336965 +fruitveg,Estonia,3225.462161 +fruitveg,Finland,4574.06158445 +fruitveg,France,3361.60158 +fruitveg,Gabon,2595.430771 +fruitveg,Georgia,2047.198738 +fruitveg,Germany,3227.35053 +fruitveg,Ghana,645.0674399 +fruitveg,Greece,3257.76451 +fruitveg,Honduras,1444.863219 +fruitveg,Hungary,2196.759321 +fruitveg,India,1603.281272 +fruitveg,Indonesia,1635.308944 +fruitveg,Iran,2123.699881 +fruitveg,Ireland,4179.123552 +fruitveg,Israel,4574.06158445 +fruitveg,Italy,3646.703559 +fruitveg,Jamaica,3299.269589 +fruitveg,Japan,4574.06158445 +fruitveg,Jordan,2356.963338 +fruitveg,Kazakhstan,2991.873368 +fruitveg,Laos,3503.532017 +fruitveg,Latvia,3547.795985 +fruitveg,Lebanon,1945.031105 +fruitveg,Libya,1864.948853 +fruitveg,Lithuania,3815.60173 +fruitveg,Macedonia,1884.801427 +fruitveg,Malaysia,1386.048222 +fruitveg,Mauritius,3921.798973 +fruitveg,Mexico,2269.315685 +fruitveg,Moldova,2132.050718 +fruitveg,Morocco,2742.101007 +fruitveg,Namibia,4259.796793 +fruitveg,Nepal,1785.334633 +fruitveg,Netherlands,3033.496051 +fruitveg,New Zealand,3217.144551 +fruitveg,Nicaragua,2097.38638 +fruitveg,Norway,4574.06158445 +fruitveg,Panama,1595.621299 +fruitveg,Paraguay,1691.053395 +fruitveg,Peru,1562.806433 +fruitveg,Philippines,1586.860539 +fruitveg,Poland,3004.828134 +fruitveg,Portugal,2496.12111 +fruitveg,Republic of Korea,4073.955215 +fruitveg,Romania,2779.307327 +fruitveg,Russian Federation,2290.961391 +fruitveg,Saudi Arabia,996.6641017 +fruitveg,Senegal,2037.333455 +fruitveg,Slovakia,3831.162214 +fruitveg,Slovenia,2483.183254 +fruitveg,South Africa,1874.031865 +fruitveg,Spain,2795.831381 +fruitveg,Sri Lanka,1387.466196 +fruitveg,Sweden,3520.262095 +fruitveg,Switzerland,4574.06158445 +fruitveg,Tajikistan,2671.742929 +fruitveg,Tanzania,1442.945586 +fruitveg,Thailand,3213.469106 +fruitveg,Togo,2128.099838 +fruitveg,Trinidad and Tobago,2433.225931 +fruitveg,Tunisia,4574.06158445 +fruitveg,Turkey,2522.289638 +fruitveg,Ukraine,2113.083896 +fruitveg,United Kingdom,3146.658808 +fruitveg,United States,2803.108364 +fruitveg,Uruguay,2250.469367 +fruitveg,Venezuela,2525.508269 +fruitveg,Vietnam,3197.6771 +fruitveg,Yemen,982.6973265 +fruitveg,Zambia,4574.06158445 +ruminants,Albania,471.7523856 +ruminants,Algeria,721.603892 +ruminants,Argentina,1275.519189 +ruminants,Armenia,644.8414074 +ruminants,Australia,973.5864388 +ruminants,Austria,815.0342992 +ruminants,Bangladesh,1045.400534 +ruminants,Belarus,792.3386163 +ruminants,Belgium,741.3649117 +ruminants,Benin,581.2460453 +ruminants,Bolivia,690.769975 +ruminants,Bosnia and Herzegovina,754.4064957 +ruminants,Botswana,1342.357639 +ruminants,Brazil,833.0336289 +ruminants,Bulgaria,379.4725829 +ruminants,Burkina Faso,1445.76882554432 +ruminants,Cambodia,1445.76882554432 +ruminants,Cameroon,1445.76882554432 +ruminants,Canada,991.0792445 +ruminants,Chile,1006.860106 +ruminants,China mainland,719.3683338 +ruminants,Colombia,1181.604304 +ruminants,Costa Rica,636.6212808 +ruminants,Cote d'Ivoire,1445.76882554432 +ruminants,Croatia,590.2332763 +ruminants,Cyprus,1162.143196 +ruminants,Czech Republic,691.3716059 +ruminants,Denmark,996.4753797 +ruminants,Dominican Republic,736.0337837 +ruminants,Ecuador,1153.270091 +ruminants,Egypt,961.0147546 +ruminants,El Salvador,680.7250171 +ruminants,Estonia,584.1463866 +ruminants,Finland,846.3917806 +ruminants,France,1162.459929 +ruminants,Gabon,1445.76882554432 +ruminants,Georgia,561.1973124 +ruminants,Germany,790.7009367 +ruminants,Ghana,936.4111094 +ruminants,Greece,945.7522948 +ruminants,Honduras,691.9648457 +ruminants,Hungary,450.5923083 +ruminants,India,660.7409701 +ruminants,Indonesia,825.6028816 +ruminants,Iran,1445.76882554432 +ruminants,Ireland,792.9994557 +ruminants,Israel,1445.76882554432 +ruminants,Italy,1309.123501 +ruminants,Jamaica,871.6951648 +ruminants,Japan,1445.76882554432 +ruminants,Jordan,788.29226 +ruminants,Kazakhstan,689.616268 +ruminants,Laos,1445.76882554432 +ruminants,Latvia,435.9150061 +ruminants,Lebanon,1445.76882554432 +ruminants,Libya,325.6716682 +ruminants,Lithuania,550.3116751 +ruminants,Macedonia,715.1734737 +ruminants,Malaysia,547.8845888 +ruminants,Mauritius,921.9835373 +ruminants,Mexico,959.846144 +ruminants,Moldova,267.473278 +ruminants,Morocco,1445.76882554432 +ruminants,Namibia,1445.76882554432 +ruminants,Nepal,631.0101377 +ruminants,Netherlands,939.3559685 +ruminants,New Zealand,1185.303735 +ruminants,Nicaragua,596.4130339 +ruminants,Norway,1445.76882554432 +ruminants,Panama,882.5259455 +ruminants,Paraguay,787.7863734 +ruminants,Peru,1089.297203 +ruminants,Philippines,479.6470013 +ruminants,Poland,454.7938433 +ruminants,Portugal,802.9249405 +ruminants,Republic of Korea,1445.76882554432 +ruminants,Romania,650.8369133 +ruminants,Russian Federation,745.8693985 +ruminants,Saudi Arabia,792.9884603 +ruminants,Senegal,946.5475605 +ruminants,Slovakia,473.6952864 +ruminants,Slovenia,986.0373941 +ruminants,South Africa,1057.892862 +ruminants,Spain,1014.836825 +ruminants,Sri Lanka,867.3935138 +ruminants,Sweden,887.9397178 +ruminants,Switzerland,1445.76882554432 +ruminants,Tajikistan,997.7770931 +ruminants,Tanzania,681.5113153 +ruminants,Thailand,459.1178988 +ruminants,Togo,513.3686663 +ruminants,Trinidad and Tobago,732.3204339 +ruminants,Tunisia,1445.76882554432 +ruminants,Turkey,1445.76882554432 +ruminants,Ukraine,581.0564832 +ruminants,United Kingdom,904.8860692 +ruminants,United States,797.7844668 +ruminants,Uruguay,1032.953949 +ruminants,Venezuela,1445.76882554432 +ruminants,Vietnam,723.3069675 +ruminants,Yemen,449.9112561 +ruminants,Zambia,1445.76882554432 +monogastrics,Albania,775.8964451 +monogastrics,Algeria,2096.96704 +monogastrics,Argentina,1232.054534 +monogastrics,Armenia,899.8191686 +monogastrics,Australia,1208.110077 +monogastrics,Austria,1590.192637 +monogastrics,Bangladesh,1214.338793 +monogastrics,Belarus,1279.849134 +monogastrics,Belgium,1560.570322 +monogastrics,Benin,1064.422535 +monogastrics,Bolivia,1368.326375 +monogastrics,Bosnia and Herzegovina,1341.227045 +monogastrics,Botswana,1977.864785 +monogastrics,Brazil,1091.12286 +monogastrics,Bulgaria,1177.268875 +monogastrics,Burkina Faso,1934.485374 +monogastrics,Cambodia,901.0135671 +monogastrics,Cameroon,1634.934993 +monogastrics,Canada,1931.48315 +monogastrics,Chile,1174.115475 +monogastrics,China mainland,580.1221573 +monogastrics,Colombia,1408.737158 +monogastrics,Costa Rica,1610.709601 +monogastrics,Cote d'Ivoire,2146.974805 +monogastrics,Croatia,1834.555853 +monogastrics,Cyprus,1541.706691 +monogastrics,Czech Republic,1495.428542 +monogastrics,Denmark,1330.454803 +monogastrics,Dominican Republic,1029.945783 +monogastrics,Ecuador,1447.394132 +monogastrics,Egypt,1900.630393 +monogastrics,El Salvador,1452.687615 +monogastrics,Estonia,1168.417649 +monogastrics,Finland,774.9745283 +monogastrics,France,1090.136511 +monogastrics,Gabon,1005.842516 +monogastrics,Georgia,1223.023411 +monogastrics,Germany,1433.781933 +monogastrics,Ghana,1359.577618 +monogastrics,Greece,1536.997663 +monogastrics,Honduras,876.8733212 +monogastrics,Hungary,1395.367813 +monogastrics,India,1496.406606 +monogastrics,Indonesia,946.2689629 +monogastrics,Iran,1833.172895 +monogastrics,Ireland,1415.886153 +monogastrics,Israel,2164.9992973776 +monogastrics,Italy,1672.386644 +monogastrics,Jamaica,1003.138399 +monogastrics,Japan,2164.9992973776 +monogastrics,Jordan,1191.862848 +monogastrics,Kazakhstan,814.8992383 +monogastrics,Laos,1039.381184 +monogastrics,Latvia,1080.68315 +monogastrics,Lebanon,1759.76048 +monogastrics,Libya,1110.918013 +monogastrics,Lithuania,1051.214808 +monogastrics,Macedonia,1407.656961 +monogastrics,Malaysia,1188.726783 +monogastrics,Mauritius,2164.9992973776 +monogastrics,Mexico,872.9418119 +monogastrics,Moldova,848.9258778 +monogastrics,Morocco,2164.9992973776 +monogastrics,Namibia,1608.141046 +monogastrics,Nepal,996.825767 +monogastrics,Netherlands,1039.644087 +monogastrics,New Zealand,2164.9992973776 +monogastrics,Nicaragua,1226.598716 +monogastrics,Norway,2164.9992973776 +monogastrics,Panama,1419.304041 +monogastrics,Paraguay,1520.559137 +monogastrics,Peru,1092.120054 +monogastrics,Philippines,758.606493 +monogastrics,Poland,1091.327922 +monogastrics,Portugal,1602.382769 +monogastrics,Republic of Korea,1377.156553 +monogastrics,Romania,1296.728705 +monogastrics,Russian Federation,2069.436075 +monogastrics,Saudi Arabia,1244.265143 +monogastrics,Senegal,2164.9992973776 +monogastrics,Slovakia,1363.610467 +monogastrics,Slovenia,1709.625846 +monogastrics,South Africa,816.0837532 +monogastrics,Spain,1603.767929 +monogastrics,Sri Lanka,1677.169832 +monogastrics,Sweden,1887.15737 +monogastrics,Switzerland,1929.199911 +monogastrics,Tajikistan,1502.166663 +monogastrics,Tanzania,794.2390127 +monogastrics,Thailand,739.3409538 +monogastrics,Togo,531.1234636224 +monogastrics,Trinidad and Tobago,1127.936245 +monogastrics,Tunisia,1753.388795 +monogastrics,Turkey,1308.068828 +monogastrics,Ukraine,1545.779083 +monogastrics,United Kingdom,1299.952635 +monogastrics,United States,1006.221832 +monogastrics,Uruguay,1354.895716 +monogastrics,Venezuela,1931.368557 +monogastrics,Vietnam,794.1845411 +monogastrics,Yemen,1295.510318 +monogastrics,Zambia,1023.744932 diff --git a/src/ac/ed/lurg/ModelConfig.java b/src/ac/ed/lurg/ModelConfig.java index 203e288d..6eba4495 100755 --- a/src/ac/ed/lurg/ModelConfig.java +++ b/src/ac/ed/lurg/ModelConfig.java @@ -174,6 +174,7 @@ public class ModelConfig { public static final String SUBSIDY_RATE_FILENAME = getProperty("SUBSIDY_RATE_FILENAME", "subsidyrates.csv"); public static final String SUBSIDY_RATE_FILE = getProperty("SUBSIDY_RATE_FILE", DATA_DIR + File.separator + SUBSIDY_RATE_FILENAME); public static final String ANIMAL_RATES_FILE = DATA_DIR + File.separator + "animal_numbers.csv";; + public static final String INITIAL_CONSUMER_PRICE_FILE = DATA_DIR + File.separator + "consumerprices.csv";; // yield data public static final String YIELD_DIR_BASE = getProperty("YIELD_DIR_BASE"); diff --git a/src/ac/ed/lurg/country/AbstractCountryAgent.java b/src/ac/ed/lurg/country/AbstractCountryAgent.java index 22ef64ec..733a888a 100644 --- a/src/ac/ed/lurg/country/AbstractCountryAgent.java +++ b/src/ac/ed/lurg/country/AbstractCountryAgent.java @@ -48,13 +48,13 @@ public abstract class AbstractCountryAgent { } protected Map<CommodityType, Double> calculateDemand(Timestep timestep) { - Map<CommodityType, Double> prices = getCommodityPrices(timestep); + Map<CommodityType, Double> producerPrices = getProducerCommodityPrices(timestep); - currentProjectedDemand = demandManager.getDemand(country, timestep.getYear(), prices); + currentProjectedDemand = demandManager.getDemand(country, timestep.getYear(), producerPrices); return currentProjectedDemand; } - public Map<CommodityType, Double> getCommodityPrices(Timestep timestep) { + private Map<CommodityType, Double> getProducerCommodityPrices(Timestep timestep) { if (!ModelConfig.PRICE_ELASTIC_DEMAND) return null; @@ -62,11 +62,8 @@ public abstract class AbstractCountryAgent { for (CommodityType commodity : CommodityType.getAllFoodItems()) { double commPricePlum = getCommPriceFromCropPrice(commodity); - double commPrice = commPricePlum * commodity.getPlumPriceToKcalPriceConversion(); //price per person per year commodity x per year assuming 2000 kcal a day - commPrice *= commodity.getPriceMarkupFactor(); // * priceMarkupFactor to rebase prices to those provide by G&G - - prices.put(commodity, commPrice); - LogWriter.println("Price for " + commodity.getGamsName() + " is " + commPrice); + prices.put(commodity, commPricePlum); + LogWriter.println("Producer price for " + commodity.getGamsName() + " is " + commPricePlum); } return prices; @@ -75,8 +72,6 @@ public abstract class AbstractCountryAgent { private double getCommPriceFromCropPrice(CommodityType commodity) { double commPricePlum = 0; Map<CropType, Double> demandFract = baseDemandFact.get(commodity); - if (commodity.equals(CommodityType.OILCROPSPULSES) || commodity.equals(CommodityType.CEREALS)) - LogWriter.println("Got one to debug"); for (CropType crop : commodity.getCropTypes()) { commPricePlum += currentCountryPrices.get(crop).getImportPrice() * demandFract.get(crop); // weight price by base demand of each cereal crop diff --git a/src/ac/ed/lurg/demand/ElasticDemandManager.java b/src/ac/ed/lurg/demand/ElasticDemandManager.java index 7e93525e..e444f9c1 100755 --- a/src/ac/ed/lurg/demand/ElasticDemandManager.java +++ b/src/ac/ed/lurg/demand/ElasticDemandManager.java @@ -21,10 +21,11 @@ public class ElasticDemandManager extends AbstractSSPDemandManager { private Map<SingleCountry, Map<CommodityType, Double>> baseCpcCache = new HashMap<SingleCountry, Map<CommodityType, Double>>(); private Map<SingleCountry, GamsDemandOutput> previousGamsDemands = new HashMap<SingleCountry, GamsDemandOutput>(); private BufferedWriter outputFile; - + private PriceMarkUps priceMarkups; public ElasticDemandManager(String ssp_scenario, BaseConsumpManager baseConsumpManager, CompositeCountryManager compositeCountryManager) { super(ssp_scenario, baseConsumpManager, compositeCountryManager); + priceMarkups = new PriceMarkUps(); try { outputFile = FileWriterHelper.getFileWriter(true, true, ModelConfig.DEMAND_OPTIMISATION_OUTPUT_FILE, getDamsDemandOutputsHeader()); @@ -34,12 +35,23 @@ public class ElasticDemandManager extends AbstractSSPDemandManager { } @Override - Map<CommodityType, Double> getFoodDemandMap(SingleCountry c, int year, double gdpPc, double population, Map<CommodityType, Double> prices, double usaGdpPc) { - + Map<CommodityType, Double> getFoodDemandMap(SingleCountry c, int year, double gdpPc, double population, Map<CommodityType, Double> producerPrices, double usaGdpPc) { + Map<CommodityType, Double> consumerPrices = new HashMap<CommodityType, Double>(); + double nonfoodPrice = 45.376+53.036*gdpPc/usaGdpPc; - prices.put(CommodityType.NONFOOD, nonfoodPrice); + consumerPrices.put(CommodityType.NONFOOD, nonfoodPrice); + + // convert from producer to consumer prices + for (CommodityType commodity : CommodityType.getAllFoodItems()) { + double producerPricePlum = producerPrices.get(commodity); + double producerPrice = producerPricePlum * commodity.getPlumPriceToKcalPriceConversion(); //price per person per year commodity x per year assuming 2000 kcal a day + double consumerPrice = priceMarkups.markedupPrice(c, commodity, producerPrice); + + consumerPrices.put(commodity, consumerPrice); + LogWriter.println("Consumer price for " + commodity.getGamsName() + " is " + consumerPrice); + } - GamsDemandInput inputData = new GamsDemandInput(c, year, gdpPc, prices, usaGdpPc, previousGamsDemands.get(c)); + GamsDemandInput inputData = new GamsDemandInput(c, year, gdpPc, consumerPrices, usaGdpPc, previousGamsDemands.get(c)); // Do the projection GamsDemandOutput gamsOutput = null; @@ -50,7 +62,7 @@ public class ElasticDemandManager extends AbstractSSPDemandManager { else { LogWriter.printlnError(i + ": Problem solving " + c + ", " + year + " got " + gamsOutput.getStatus()); gamsOutput.resetForNewAttempt(); - inputData = new GamsDemandInput(c, year, gdpPc, prices, usaGdpPc, gamsOutput); + inputData = new GamsDemandInput(c, year, gdpPc, consumerPrices, usaGdpPc, gamsOutput); } } diff --git a/src/ac/ed/lurg/demand/PriceMarkUps.java b/src/ac/ed/lurg/demand/PriceMarkUps.java new file mode 100644 index 00000000..17b2a4b0 --- /dev/null +++ b/src/ac/ed/lurg/demand/PriceMarkUps.java @@ -0,0 +1,97 @@ +package ac.ed.lurg.demand; + +import java.util.HashMap; +import java.util.Map; + +import ac.ed.lurg.ModelConfig; +import ac.ed.lurg.country.SingleCountry; +import ac.ed.lurg.types.CommodityType; +import ac.ed.lurg.utils.LogWriter; +import ac.ed.lurg.utils.StringTabularReader; + +public class PriceMarkUps { + private StringTabularReader intialConsumerPrices; + private Map<CountryCommodityKey, Double> priceMarkupFactors = new HashMap<CountryCommodityKey, Double>(); + + public PriceMarkUps() { + // could read priceMarkupFactors from file here in some cases + + intialConsumerPrices = new StringTabularReader(",", new String[]{"Item", "country", "price2010"}); + intialConsumerPrices.read(ModelConfig.INITIAL_CONSUMER_PRICE_FILE); + } + + public double markedupPrice(SingleCountry c, CommodityType commodity, double producerPrice) { + CountryCommodityKey cc = new CountryCommodityKey(c, commodity); + Double priceMarkupFactor = priceMarkupFactors.get(cc); + + if (priceMarkupFactor == null) { + double consumerPrice = getInitialConsumerPrice(c, commodity); + priceMarkupFactor = consumerPrice / producerPrice; + LogWriter.println("priceMarkupFactor for " + c + ", " + commodity.getGamsName() + " is " + priceMarkupFactor); + priceMarkupFactors.put(cc, priceMarkupFactor); + } + + double adjustedPrice = producerPrice * priceMarkupFactor; + return adjustedPrice; + } + + private double getInitialConsumerPrice(SingleCountry country, CommodityType commodity) { + + double initialPrice; + Map<String, String> queryMap = new HashMap<String, String>(); + queryMap.put("country", country.getCountryName()); + queryMap.put("Item", commodity.getGamsName()); + + try { + Map<String, String> row = intialConsumerPrices.querySingle(queryMap); + String priceS = row.get("price2010"); + initialPrice = Double.valueOf(priceS); + } catch (Exception e) { + LogWriter.println("Problem finding initial consumer price " + commodity.getGamsName() + ", " + commodity.getGamsName() + ", " + country.getCountryName()); + initialPrice=commodity.getDefaultInitialPrice(); + } + + return initialPrice; + } + + private class CountryCommodityKey { + private SingleCountry country; + private CommodityType commodity; + CountryCommodityKey (SingleCountry country, CommodityType commodity) { + this.country = country; + this.commodity = commodity; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + getOuterType().hashCode(); + result = prime * result + ((commodity == null) ? 0 : commodity.hashCode()); + result = prime * result + ((country == null) ? 0 : country.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + CountryCommodityKey other = (CountryCommodityKey) obj; + if (!getOuterType().equals(other.getOuterType())) + return false; + if (commodity != other.commodity) + return false; + if (country == null) { + if (other.country != null) + return false; + } else if (!country.equals(other.country)) + return false; + return true; + } + private PriceMarkUps getOuterType() { + return PriceMarkUps.this; + } + } +} diff --git a/src/ac/ed/lurg/types/CommodityType.java b/src/ac/ed/lurg/types/CommodityType.java index 1a4860c6..ae3eb9a6 100644 --- a/src/ac/ed/lurg/types/CommodityType.java +++ b/src/ac/ed/lurg/types/CommodityType.java @@ -7,7 +7,6 @@ import java.util.HashSet; import java.util.Map; import ac.ed.lurg.ModelConfig; -import ac.ed.lurg.utils.LogWriter; public enum CommodityType { @@ -28,7 +27,7 @@ public enum CommodityType { private Collection<CropType> cropTypes; private double kcalPerT; //in feed equivalent for animal types private double meatSubstitutionProportion; - private double priceMarkupFactor; + private double initialPrice; CommodityType (String faoName, String gamsName, boolean isAnimalProduct, CropType[] cropTypeMapping, Double[] defaultDemandFract, double kcalPerGram, double meatSubstitutionProportion, double initialPrice) { @@ -38,13 +37,7 @@ public enum CommodityType { this.cropTypes = Arrays.asList(cropTypeMapping); this.kcalPerT = kcalPerGram * 1000000; this.meatSubstitutionProportion = meatSubstitutionProportion; - - double prodPrice = 0; - for (int i=0; i<cropTypeMapping.length; i++) - prodPrice += cropTypeMapping[i].getInitialPrice() * defaultDemandFract[i]; - - priceMarkupFactor = initialPrice * 0.6 / (prodPrice * getPlumPriceToKcalPriceConversion()); // the 0.6 is a temporary hack until we have updated tariff free prices for commodities - LogWriter.println("priceMarkupFactor for " + gamsName + " is " + priceMarkupFactor); + this.initialPrice = initialPrice; } private static final Map<String, CommodityType> faoNameCache = new HashMap<String, CommodityType>(); @@ -106,11 +99,11 @@ public enum CommodityType { return cropTypes; } - public double getPriceMarkupFactor() { - return priceMarkupFactor; - } - public double getPlumPriceToKcalPriceConversion() { return 1000 / getkcalPerT() * 2000 * 365; } + + public double getDefaultInitialPrice() { + return initialPrice; + } } \ No newline at end of file -- GitLab