1function transport5(varargin)
3 % check workspace info from arguments
5 wsInfo = gams.control.WorkspaceInfo();
6 wsInfo.systemDirectory = varargin{1};
7 ws = gams.control.Workspace(wsInfo);
9 ws = gams.control.Workspace();
14 ' i canning plants / seattle, san-diego / '
15 ' j markets / new-york, chicago, topeka / ; '
18 ' a(i) capacity of plant i in cases '
22 ' b(j) demand at market j in cases '
27 'Table d(i,j) distance in thousands of miles '
28 ' new-york chicago topeka '
29 ' seattle 2.5 1.7 1.8 '
30 ' san-diego 2.5 1.8 1.4 ; '
32 'Scalar f freight in dollars per case per thousand miles /90/ ;'
33 'Scalar bmult demand multiplier /1/; '
35 'Parameter c(i,j) transport cost in thousands of dollars per case ; '
37 ' c(i,j) = f * d(i,j) / 1000 ; '
40 ' x(i,j) shipment quantities in cases '
41 ' z total transportation costs in thousands of dollars ; '
43 'Positive Variable x ; '
46 ' cost define objective function '
47 ' supply(i) observe supply limit at plant i '
48 ' demand(j) satisfy demand at market j ; '
50 'cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ; '
52 'supply(i) .. sum(j, x(i,j)) =l= a(i) ; '
54 'demand(j) .. sum(i, x(i,j)) =g= bmult*b(j) ; '
56 'Model transport /all/ ; '
57 'Scalar ms ''model status'', ss ''solve status''; '};
58 model = sprintf(
'%s\n', model{:});
61 cp = ws.addCheckpoint();
63 % initialize a checkpoint by running a job
64 t5 = ws.addJobFromString(model);
70 bmultlist = [0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3];
72 % create a
new Job that is initialized from the Checkpoint
73 for i = 1:numel(bmultlist)
74 job = sprintf(
'bmult=%f; solve transport min z use lp; ms=transport.modelstat; ss=transport.solvestat;', bmultlist(i));
75 t5 = ws.addJobFromString(job, cp);
78 fprintf(
'Scenario bmult=%f:\n', bmultlist(i));
79 fprintf(
' Modelstatus: %s\n', gams.control.globals.ModelStat(t5.outDB.getParameter(
'ms').record.value).select);
80 fprintf(
' Solvestatus: %s\n', gams.control.globals.SolveStat(t5.outDB.getParameter(
'ss').record.value).select);
81 fprintf(
' Obj: %f\n', t5.outDB.getVariable(
'z').record.level);
87 %
remove working directory
88 rmdir(ws.workingDirectory,
's');