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