36 public static void main(String[] args)
43 File workingDirectory =
new File(System.getProperty(
"user.dir"),
"Transport12");
44 workingDirectory.mkdir();
58 double[] bmultlist =
new double[] { 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3 };
67 for (
double b : bmultlist)
69 bmult.addRecord(
"s" + i).setValue(b);
70 scen1.addRecord(
"s" + i);
75 dict.addRecord(
new String[]{ scen1.getName(),
"scenario",
"" } );
76 dict.addRecord(
new String[]{
"bmult",
"param", bmult.getName() } );
77 dict.addRecord(
new String[]{
"z",
"level", zscen1.getName()} );
79 GUSSCall(dict, mi,
"transport use lp min z",
null,
null,
null);
82 System.out.println(rec.getKey(0) +
" obj: " + rec.getValue());
93 for (
int j = 0; j < 4; j++) {
97 String[] keys =
new String[] {
"s" + j, irec.getKey(0), jrec.getKey(0) };
98 xup.addRecord(keys).setValue(j+1);
100 scen2.addRecord(
"s" + j);
104 dict2.addRecord(
new String[] {scen2.getName(),
"scenario",
""} );
105 dict2.addRecord(
new String[] {
"x",
"lower", xup.getName()} );
106 dict2.addRecord(
new String[] {
"z",
"level", zscen2.getName()} );
108 GUSSCall(dict2, mi2,
"transport use lp min z",
null,
null, System.out);
111 System.out.println(rec.getKey(0) +
" obj: " + rec.getValue());
117 List<Object[]> modifierList = Collections.synchronizedList(
new ArrayList<Object[]>() );
119 if (dict.getDimension() != 3)
122 String scenName = dict.getFirstRecord(
new String[] {
" ",
"scenario",
" " }).getKey(0);
123 GAMSSet scenSymbol = dict.getDatabase().getSet(scenName);
128 if (rec.getKey(1).toLowerCase().equals(
"scenario"))
130 if (rec.getKey(1).toLowerCase().equals(
"param"))
132 int modifierDim = dict.getDatabase().getParameter(rec.getKey(2)).getDimension() - scenSymbol.getDimension();
134 throw new GAMSException(
"Dimension of " + rec.getKey(2) +
" too small");
136 GAMSParameter param = dict.getDatabase().getParameter( rec.getKey(2));
138 new Object[] { mod, param }
141 else if ((rec.getKey(1).toLowerCase().equals(
"lower")) ||
142 (rec.getKey(1).toLowerCase().equals(
"upper")) ||
143 (rec.getKey(1).toLowerCase().equals(
"fixed")))
145 int modifierDim = (int) (dict.getDatabase().getParameter(rec.getKey(2)).getDimension() - scenSymbol.getDimension());
147 throw new GAMSException(
"Dimension of " + rec.getKey(2) +
" too small");
150 modifierVar = dict.getDatabase().getVariable(rec.getKey(0));
152 catch (Exception e) {
153 modifierVar = mi.
SyncDB().
addVariable(rec.getKey(0),modifierDim, GAMSGlobals.VarType.FREE,
"");
155 if (rec.getKey(1).toLowerCase().equals(
"lower"))
158 GAMSParameter param = dict.getDatabase().getParameter(rec.getKey(2));
160 new Object[] { mod , param }
163 else if (rec.getKey(1).toLowerCase().equals(
"upper"))
166 GAMSParameter param = dict.getDatabase().getParameter(rec.getKey(2));
168 new Object[] { mod , param }
173 GAMSParameter param = dict.getDatabase().getParameter(rec.getKey(2));
175 new Object[] { mod , param }
179 else if ((rec.getKey(1).toLowerCase().equals(
"level")) || (rec.getKey(1).toLowerCase().equals(
"marginal")))
182 @SuppressWarnings(
"unused")
183 GAMSParameter x = dict.getDatabase().getParameter(rec.getKey(2));
186 throw new GAMSException(
"Cannot handle UpdateAction " + rec.getKey(1));
189 List<GAMSModifier> mL = Collections.synchronizedList(
new ArrayList<GAMSModifier>() );
190 for (Object[] tuple : modifierList) {
198 List<Object[]> outList = Collections.synchronizedList(
new ArrayList<Object[]>() );
202 for (Object[] tuple : modifierList)
217 String[] filter =
new String[pscen.getDimension()];
218 for (
int i = 0; i < scenSymbol.getDimension(); i++)
219 filter[i] = s.getKey(i);
220 for (
int i = scenSymbol.getDimension(); i < pscen.getDimension(); i++)
225 rec = pscen.getFirstRecord(filter);
230 { String[] myKeys =
new String[p.getDimension()];
231 for (
int i = 0; i < p.getDimension(); i++)
232 myKeys[i] = rec.getKey(scenSymbol.getDimension()+i);
233 p.addRecord(myKeys).setValue( rec.
getValue() );
234 }
while (rec.moveNext());
238 if (outList.size() == 0)
242 if ((rec.getKey(1).toLowerCase().equals(
"level")) || (rec.getKey(1).toLowerCase().equals(
"marginal")))
245 GAMSParameter param = dict.getDatabase().getParameter(rec.getKey(2));
246 String str = rec.getKey(1).toLowerCase();
248 new Object[] { sym, param, str }
253 for (Object[] tuple : outList)
257 String str = (String)tuple[2];
258 String[] myKeys =
new String[scenSymbol.getDimension() + symbol.
getFirstRecord().getKeys().length];
259 for (
int i = 0; i < scenSymbol.getDimension(); i++)
260 myKeys[i] = s.getKey(i);
262 if ((str.equals(
"level")) && (symbol instanceof
GAMSVariable))
267 for (
int i = 0; i < rec.getKeys().length; i++)
268 myKeys[scenSymbol.getDimension() + i] = s.getKey(i);
269 param.addRecord(myKeys).setValue( rec.getLevel() );
272 else if ((str.equals(
"level")) && (symbol instanceof
GAMSEquation))
277 for (
int i = 0; i < rec.getKeys().length; i++)
278 myKeys[scenSymbol.getDimension() + i] = s.getKey(i);
279 param.addRecord(myKeys).setValue( rec.getLevel() );
282 else if ((str.equals(
"marginal")) && (symbol instanceof
GAMSVariable))
287 for (
int i = 0; i < rec.getKeys().length; i++)
288 myKeys[scenSymbol.getDimension() + i] = s.getKey(i);
289 param.addRecord(myKeys).setValue( rec.getMarginal() );
292 else if ((str.equals(
"marginal")) && (symbol instanceof
GAMSEquation))
297 for (
int i = 0; i < rec.getKeys().length; i++)
298 myKeys[scenSymbol.getDimension() + i] = s.getKey(i);
299 param.addRecord(myKeys).setValue( rec.getMarginal() );
306 static String model =
308 " i canning plants / seattle, san-diego / \n" +
309 " j markets / new-york, chicago, topeka / ; \n" +
313 " a(i) capacity of plant i in cases \n" +
314 " / seattle 350 \n" +
315 " san-diego 600 / \n" +
317 " b(j) demand at market j in cases \n" +
318 " / new-york 325 \n" +
320 " topeka 275 / ; \n" +
322 "Table d(i,j) distance in thousands of miles \n" +
323 " new-york chicago topeka \n" +
324 " seattle 2.5 1.7 1.8 \n" +
325 " san-diego 2.5 1.8 1.4 ; \n" +
327 "Scalar f freight in dollars per case per thousand miles /90/ ;\n" +
328 "Scalar bmult demand multiplier /1/; \n" +
330 "Parameter c(i,j) transport cost in thousands of dollars per case ; \n" +
332 " c(i,j) = f * d(i,j) / 1000 ; \n" +
335 " x(i,j) shipment quantities in cases \n" +
336 " z total transportation costs in thousands of dollars ; \n" +
338 "Positive Variable x ; \n" +
341 " cost define objective function \n" +
342 " supply(i) observe supply limit at plant i \n" +
343 " demand(j) satisfy demand at market j ; \n" +
345 "cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ; \n" +
347 "supply(i) .. sum(j, x(i,j)) =l= a(i) ; \n" +
349 "demand(j) .. sum(i, x(i,j)) =g= bmult*b(j) ; \n" +
351 "Model transport /all/ ; \n" +