lemon-project-template-glpk

comparison deps/glpk/examples/dbf/ForestMgt_Model_I_GIS_dbf.mod @ 10:5545663ca997

Configure GLPK build
author Alpar Juttner <alpar@cs.elte.hu>
date Sun, 06 Nov 2011 21:42:23 +0100 (2011-11-06)
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:ab386d7cc2c8
1 # Model I Forest Estate Modelling using GLPK/MathProg
2 # Reading and writing dbf files
3
4 # by Noli Sicad --- nsicad@gmail.com
5 # 18 December 2009
6
7 # Forest Management 4th Edition
8 # by Lawrence Davis, K. Norman Johnson, Pete Bettinger, Theodore Howard
9 # Chapter 11 - Daniel Pickett
10 # http://warnell.forestry.uga.edu/Warnell/Bettinger/mgtbook/index.htm
11
12 # Model I Formulation
13
14 /* Note: This is not the full LP model mentioned in the book.
15 Some of the constraints are deliberately omitted in this model for the purpose of clarity.
16
17 The features of MathProg in this example are:
18 * reading and writing dbf from regular dbf files,
19 * reading dbf file (database of shapefile (stands.shp)) (e.g. area parameter),
20 * using the area data in the constraints and
21 * writing dbf file from result of LP model.
22
23 Model I - Harvest Scheduling formulation for Sustainable Forest Management (SFM)
24
25 Features are:
26 * Net Present Value for the objective function (Revenue - Cost)
27 * Harvest Constraints by period - Sustainable Yield per Period
28 * Even-Flow Constraint / Volume - Harvest Flow Constraint - Alpha (1-Apha)
29 * Even-Flow Constraint / Volume - Harvest Flow Constraint - Beta (1 +Beta)
30 * Forest / Land Constraint -- Total Area of the forest
31 * Forest Stand Constraint -- Individual stands
32
33 What is next? -- Forest Mgt Carbon Accounting for Climate Change
34
35 Note: The model file that the data containing in
36 the dbf files is public domain material (so it is compatible with the
37 GNU GPL) and data can be found in
38 http://warnell.forestry.uga.edu/Warnell/Bettinger/mgtbook/index.htm
39
40 # Noli Sicad --- nsicad@gmail.com
41
42 */
43
44 set G_STAND_TYPE; # A, B, C
45
46 set I_CULTURAL_PRES;
47 set J_MGT_YEAR;
48
49 param K_PERIOD;
50 param Forest_Cost{G_STAND_TYPE,I_CULTURAL_PRES, J_MGT_YEAR}; # cost
51
52 param Yield_Table_Vol{G_STAND_TYPE, I_CULTURAL_PRES, J_MGT_YEAR, 1..K_PERIOD} >= 0;
53
54
55 param Alpha >= 0;
56 param Beta >= 0;
57
58 param TCost_Table{G_STAND_TYPE, I_CULTURAL_PRES, J_MGT_YEAR, 1..K_PERIOD} >= 0;
59
60 param NetRev_Table{G_STAND_TYPE, I_CULTURAL_PRES, J_MGT_YEAR, 1..K_PERIOD};
61
62
63 var XForestLand{g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} >= 0;
64
65
66 #reading dbf tables
67 table tab IN "xBASE" "standtype.dbf": G_STAND_TYPE <- [STAND];
68 display G_STAND_TYPE;
69
70
71 table tab2 IN "xBASE" "cultural_pres.dbf": I_CULTURAL_PRES <- [CUL_PRES];
72 display I_CULTURAL_PRES;
73
74 table tab3 IN "xBASE" "mgt_year.dbf": J_MGT_YEAR <- [MGT_YEAR];
75 display J_MGT_YEAR;
76
77 /*
78 param Forest_Cost{G_STAND_TYPE,I_CULTURAL_PRES, J_MGT_YEAR} default 0; # cost
79 */
80
81 set S1, dimen 3;
82 table tab4 IN "xBASE" "Forest_Cost.dbf": S1 <- [STAND, CUL_PRES, MGT_YEAR],Forest_Cost ~FCOST;
83 display Forest_Cost;
84
85 set S2, dimen 4;
86 table tab5 IN "xBASE" "Yield_Table_Vol.dbf": S2 <- [STAND, CUL_PRES, MGT_YEAR, PERIOD],Yield_Table_Vol ~YIELD;
87 display Yield_Table_Vol;
88
89 set S3, dimen 4;
90 table tab5 IN "xBASE" "TCost_Table.dbf": S3 <- [STAND, CUL_PRES, MGT_YEAR, PERIOD],TCost_Table ~TCOST;
91 display TCost_Table;
92
93
94 set S4, dimen 4;
95 table tab5 IN "xBASE" "NetRev_Table.dbf": S4 <- [STAND, CUL_PRES, MGT_YEAR, PERIOD],NetRev_Table ~NETREV;
96 display NetRev_Table;
97
98
99 param MGT;
100
101 param Area_Stand_Indi{g in G_STAND_TYPE, m in 1..MGT} default 0;
102
103 set ST, dimen 2;
104 table tab5 IN "xBASE" "stands.dbf": ST <- [VEG_TYPE, MGT], Area_Stand_Indi ~ACRES;
105 display Area_Stand_Indi;
106
107 param Area_Stand_Type{g in G_STAND_TYPE}:= sum {m in 1..MGT } Area_Stand_Indi[g,m];
108 display Area_Stand_Type;
109
110
111 param Total_Area := sum {g in G_STAND_TYPE, m in 1..MGT } Area_Stand_Indi[g,m];
112 display Total_Area;
113
114 param Harvest_Min_Vol_Period;
115
116
117 var NetPresentValue;
118
119 # Objective function
120 maximize Net_Present_Value: NetPresentValue;
121
122 subject to NPV:
123 NetPresentValue = sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Forest_Cost[g,i,j] * XForestLand[g,i,j];
124
125 # Harvest Constraint by Period
126 subject to Harvest_Period_H {k in 1..K_PERIOD}:
127 sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j] >= Harvest_Min_Vol_Period;
128
129
130 #Even-Flow Constraint / Volume - Harvest Flow Constraint - Alpha
131 subject to Even_Flow_Constaints_Alpha {k in 6..K_PERIOD-1}:
132 (1 - Alpha) * sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j] -
133 sum {g in G_STAND_TYPE,i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k+1] * XForestLand[g,i,j] <= 0;
134
135 # Even-Flow Constraint / Volume - Harvest Flow Constraint - Beta
136 subject to Even_Flow_Constaints_Beta {k in 6..K_PERIOD-1}:
137 (1 + Beta) * sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j] -
138 sum {g in G_STAND_TYPE,i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k+1] * XForestLand[g,i,j] >= 0;
139
140 # Forest / Land Constraints
141 subject to Total_Area_Constraint:
142 sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} XForestLand[g,i,j] <= Total_Area;
143 display Total_Area;
144
145 # Forest / Land Constraints for A B C
146 subject to Area {g in G_STAND_TYPE}:
147 sum {i in I_CULTURAL_PRES,j in J_MGT_YEAR} XForestLand[g,i,j] = Area_Stand_Type[g];
148
149
150
151 solve;
152 #RESULT SECTION
153 printf '#################################\n';
154 printf 'Forest Management Model I - Noli Sicad\n';
155 printf '\n';
156 printf 'Net Present Value = %.2f\n', NetPresentValue;
157 printf '\n';
158
159 printf '\n';
160 printf 'Variables\n';
161 printf 'Stand_Type Age_Class Mgt_Presc Sign Value \n';
162 printf{g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR}:'%5s %10s %11s = %10.2f\n', g,i,j, XForestLand[g,i,j];
163 printf '\n';
164
165 printf 'Constraints\n';
166 printf 'Period Harvest Sign \n';
167 for {k in 1..K_PERIOD} {
168 printf '%5s %10.2f >= %.3f\n', k, sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j], Harvest_Min_Vol_Period;
169 }
170
171 # xbase (dbf) output
172 table Harvest{k in 1..K_PERIOD} OUT "xBASE" "HarvestArea1.dbf" "N(5)N(15,2)" : k ~ Period, (sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j]) ~ H_Area;
173
174 # xbase (dbf) read
175 set S, dimen 2;
176 table tab2 IN "xBASE" "HarvestArea1.dbf": S <- [Period, H_Area];
177 display S;
178
179
180
181
182 printf '\n';
183 printf 'Constraint\n';
184 printf 'Harvest Period\n';
185 printf 'Type AgeClass PrescMgt Period Value\n';
186 printf{g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR, k in 1..K_PERIOD}:'%5s %11s %11s %5s %10.2f\n', g,i,j, k, (Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j]);
187
188
189 printf 'Even_Flow_Constaint_Alpha (1-Alpha)\n';
190 printf 'Period Sign \n';
191 for {k in 6..K_PERIOD-1} {
192 printf "%s %10.2f <= %s\n", k, ((1 - Alpha) * sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j] - sum {g in G_STAND_TYPE,i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k+1] * XForestLand[g,i,j]),0;
193 }
194 printf '\n';
195
196
197 # Forest / Land Constraints
198 printf '\n';
199 printf 'Total Area Constraint\n';
200 printf 'Type AgeClass PrescMgt Value Sign Total_Area \n';
201 printf '%5s <= %.3f\n',sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} XForestLand[g,i,j], Total_Area;
202
203 printf 'Area\n';
204 printf 'Area Value Sign Areas_Stand\n';
205 for {g in G_STAND_TYPE} {
206 printf '%5s %10.2f <= %.3f\n', g, sum {i in I_CULTURAL_PRES,j in J_MGT_YEAR} XForestLand[g,i,j], Area_Stand_Type[g];
207 }
208
209
210 #DATA SECTION
211
212 data;
213
214 # Most of the data has been moved to dbf format
215
216 param MGT:=31;
217
218 param K_PERIOD:= 7;
219
220 param Alpha:= 0.20;
221 param Beta:= 0.20;
222
223 param Harvest_Min_Vol_Period:= 12000;
224
225 end;
226