Loading...
Searching...
No Matches
Transport11.java
1package com.gams.examples.transport;
2
3import java.io.File;
4import java.util.Arrays;
5import java.util.HashMap;
6import java.util.List;
7import java.util.Map;
8import java.util.Vector;
9
12import com.gams.api.GAMSJob;
13import com.gams.api.GAMSOptions;
15import com.gams.api.GAMSSet;
19
24public class Transport11 {
25
26 public static void main(String[] args) {
27 // check workspace info from command line arguments
29 if (args.length > 0) {
30 wsInfo.setSystemDirectory( args[0] );
31 }
32 // create a directory
33 File workingDirectory = new File(System.getProperty("user.dir"), "Transport11");
34 workingDirectory.mkdir();
35 wsInfo.setWorkingDirectory(workingDirectory.getAbsolutePath());
36 // create a workspace
37 GAMSWorkspace ws = new GAMSWorkspace(wsInfo);
38
39 // Create a save/restart file usually supplied by an application provider
40 // We create it for demonstration purpose
41 CreateSaveRestart( ws, "tbase" );
42
43 // define some data by using Java data structures
44 List<String> plants = Arrays.asList("Seattle", "San-Diego");
45 List<String> markets = Arrays.asList("New-York", "Chicago", "Topeka");
46
47 Map<String, Double> capacity = new HashMap<String, Double>();
48 {
49 capacity.put("Seattle", Double.valueOf(350.0));
50 capacity.put("San-Diego", Double.valueOf(600.0));
51 }
52
53 Map<String, Double> demand = new HashMap<String, Double>();
54 {
55 demand.put("New-York", Double.valueOf(325.0));
56 demand.put("Chicago", Double.valueOf(300.0));
57 demand.put("Topeka", Double.valueOf(275.0));
58 }
59
60 Map<Vector<String>, Double> distance = new HashMap<Vector<String>, Double>();
61 {
62 distance.put( new Vector<String>( Arrays.asList(new String[]{"Seattle", "New-York"}) ), Double.valueOf(2.5));
63 distance.put( new Vector<String>( Arrays.asList(new String[]{"Seattle", "Chicago"}) ), Double.valueOf(1.7));
64 distance.put( new Vector<String>( Arrays.asList(new String[]{"Seattle", "Topeka"}) ), Double.valueOf(1.8));
65 distance.put( new Vector<String>( Arrays.asList(new String[]{"San-Diego", "New-York"}) ), Double.valueOf(2.5));
66 distance.put( new Vector<String>( Arrays.asList(new String[]{"San-Diego", "Chicago"}) ), Double.valueOf(1.8));
67 distance.put( new Vector<String>( Arrays.asList(new String[]{"San-Diego", "Topeka"}) ), Double.valueOf(1.4));
68 }
69
70 ws = new GAMSWorkspace(wsInfo);
71
72 // prepare a GAMSDatabase with data from the Java data structures
73 GAMSDatabase db = ws.addDatabase();
74
75 GAMSSet i = db.addSet("i", 1, "canning plants");
76 for (String p : plants)
77 i.addRecord(p);
78
79 GAMSSet j = db.addSet("j", 1, "markets");
80 for (String m : markets)
81 j.addRecord(m);
82
83 GAMSParameter a = db.addParameter("a", "capacity of plant i in cases", i);
84 for (String p : plants)
85 a.addRecord(p).setValue( capacity.get(p) );
86
87 GAMSParameter b = db.addParameter("b", "demand at market j in cases", j);
88 for (String m : markets)
89 b.addRecord(m).setValue( demand.get(m) );
90
91 GAMSParameter d = db.addParameter("d", "distance in thousands of miles", i, j);
92 for(Vector<String> vd : distance.keySet())
93 d.addRecord(vd).setValue( distance.get(vd).doubleValue() );
94
95 GAMSParameter f = db.addParameter("f", "freight in dollars per case per thousand miles");
96 f.addRecord().setValue( 90 );
97
98 // run a job using data from the created GAMSDatabase
99 GAMSCheckpoint cpBase = ws.addCheckpoint("tbase");
100
101 GAMSOptions opt = ws.addOptions();
102 GAMSJob t11 = ws.addJobFromString(model, cpBase);
103 opt.defines("gdxincname", db.getName());
104 opt.setAllModelTypes("xpress");
105 t11.run(opt, db);
106
107 for (GAMSVariableRecord rec : t11.OutDB().getVariable("x"))
108 System.out.println("x(" + rec.getKey(0) + "," + rec.getKey(1) + "): level=" + rec.getLevel() + " marginal=" + rec.getMarginal());
109 }
110
111 static void CreateSaveRestart(GAMSWorkspace ws, String cpFileName) {
112 //GAMSWorkspaceInfo wsInfo = new GAMSWorkspaceInfo();
113 //wsInfo.setWorkingDirectory(workingDirectory);
114 //GAMSWorkspace ws = new GAMSWorkspace(wsInfo);
115
116 GAMSJob j1 = ws.addJobFromString(baseModel);
117 GAMSOptions opt = ws.addOptions();
118
119 opt.setAction( GAMSOptions.EAction.CompileOnly );
120
121 GAMSCheckpoint cp = ws.addCheckpoint(cpFileName);
122 j1.run(opt, cp);
123
124 opt.dispose();
125 }
126
127 static String baseModel =
128 "$onempty \n"+
129 " Sets \n"+
130 " i(*) canning plants / / \n"+
131 " j(*) markets / / \n"+
132 " \n"+
133 " Parameters \n"+
134 " a(i) capacity of plant i in cases / / \n"+
135 " b(j) demand at market j in cases / / \n"+
136 " d(i,j) distance in thousands of miles / / \n"+
137 " Scalar f freight in dollars per case per thousand miles /0/; \n"+
138 " \n"+
139 " Parameter c(i,j) transport cost in thousands of dollars per case ;\n"+
140 " \n"+
141 " c(i,j) = f * d(i,j) / 1000 ; \n"+
142 " \n"+
143 " Variables \n"+
144 " x(i,j) shipment quantities in cases \n"+
145 " z total transportation costs in thousands of dollars ; \n"+
146 " \n"+
147 " Positive Variable x ; \n"+
148 " \n"+
149 " Equations \n"+
150 " cost define objective function \n"+
151 " supply(i) observe supply limit at plant i \n"+
152 " demand(j) satisfy demand at market j ; \n"+
153 " \n"+
154 " cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ; \n"+
155 " \n"+
156 " supply(i) .. sum(j, x(i,j)) =l= a(i) ; \n"+
157 " \n"+
158 " demand(j) .. sum(i, x(i,j)) =g= b(j) ; \n"+
159 " \n"+
160 " Model transport /all/ ; \n"+
161 " \n"+
162 " Solve transport using lp minimizing z ; \n"+
163 " \n";
164
165 static String model =
166 "$if not set gdxincname $abort 'no include file name for data file provided' \n"+
167 "$gdxin %gdxincname% \n"+
168 "$onMulti \n"+
169 "$load i j a b d f \n"+
170 "$gdxin \n"+
171 " \n"+
172 "Display x.l, x.m ; \n"+
173 " \n";
174}
GAMSSet addSet(String identifier, int dimension)
GAMSParameter addParameter(String identifier, int dimension)
GAMSVariable getVariable(String identifier)
GAMSDatabase OutDB()
void setAction(GAMSOptions.EAction x)
void setSystemDirectory(String directory)
void setWorkingDirectory(String directory)
GAMSJob addJobFromString(String source)
GAMSCheckpoint addCheckpoint()
This example shows how to create and use save/restart file.
Provides package namespace for Java interface and examples to General Algebraic Model System (GAMS).