로드 중...
검색 중...
일치하는 항목 없음
Transport12.cs
1사용 중시스템;
2사용 중System.Collections.Generic;
3사용 중시스템.텍스트;
4사용 중시스템.IO;
5사용 중슬롯 사이트;
6
7네임스페이스TransportSeq
8{
17 클래스운송12
18{
19 // 인스턴스화되지 않은 GAMSModelInstance로 호출해야 함
20 정적 무효GUSS콜(GAMSSetdict,GAMSModelInstance미,문자열solveStatement,슬롯 사이트옵션선택 =, GAMSModelInstanceOptmiOpt =, TextWriter 출력=)
21{
22목록<Tuple<GAMSModifier, GAMSParameter>> modifierList =신규목록<Tuple<GAMSModifier, GAMSParameter>>();
23
24 if(dict.Dim != 3)
25 던지다 신규 슬롯 사이트예외("사전은 3차원이어야 합니다");
26
27 문자열scenName = 사전.첫 번째 레코드(신규 문자열[] {" ", "시나리오", " ").키(0);
28 GAMSSetscenSymbol = dict.GAMSDatabase.GetSet(scenName);
29
30
31 foreach (GAMSSetRecordrecindict)
32{
33 if(rec.Key(1).ToLower() =="시나리오")
34 계속;
35 if(rec.Key(1).ToLower() =="매개변수")
36{
37 intmodifierDim = dict.GAMSDatabase.GetParameter(rec.Key(2)).Dim - scenSymbol.Dim;
38 if(modifierDim < 0)
39 던지다 신규 슬롯 사이트예외("치수 "+ Rec.Key(2) +"너무 작습니다");
40modifierList.Add(신규튜플<GAMSModifier, GAMSParameter>
41 (신규 GAMSModifier(mi.SyncDB.매개변수 추가(rec.Key(0), modifierDim,"")),
42dict.GAMSDatabase.GetParameter(rec.Key(2))));
43}
44 그밖에 if((rec.Key(1).ToLower() =="낮은") || (rec.Key(1).ToLower() =="상단") || (rec.Key(1).ToLower() =="고정"))
45{
46 intmodifierDim = dict.GAMSDatabase.GetParameter(rec.Key(2)).Dim - scenSymbol.Dim;
47 if(modifierDim < 0)
48 던지다 신규 슬롯 사이트예외("크기"+ Rec.Key(2) +"너무 작습니다");
49 슬롯 사이트변수modifierVar;
50 시도해 보세요
51{
52modifierVar = dict.GAMSDatabase.GetVariable(rec.Key(0));
53}
54 잡기(예외)
55{
56modifierVar = mi.SyncDB.변수 추가(rec.Key(0),modifierDim,VarType.무료,"");
57}
58 if(rec.Key(1).ToLower() =="낮은")
59modifierList.Add(신규튜플<GAMSModifier, GAMSParameter>
60 (신규 GAMSModifier(modifierVar,업데이트작업.Lower, mi.SyncDB.매개변수 추가(rec.Key(2), modifierDim,"")),
61dict.GAMSDatabase.GetParameter(rec.Key(2))));
62 그밖에 if(rec.Key(1).ToLower() =="상단")
63modifierList.Add(신규튜플<GAMSModifier, GAMSParameter>
64 (신규 GAMSModifier(modifierVar,업데이트작업.어퍼, 미.SyncDB.매개변수 추가(rec.Key(2), modifierDim,"")),
65dict.GAMSDatabase.GetParameter(rec.Key(2))));
66 그밖에 // 수정됨
67modifierList.Add(신규튜플<GAMSModifier, GAMSParameter>
68 (신규 GAMSModifier(modifierVar,업데이트작업.수정됨, 미.SyncDB.매개변수 추가(rec.Key(2), modifierDim,"")),
69dict.GAMSDatabase.GetParameter(rec.Key(2))));
70}
71 그밖에 if((rec.Key(1).ToLower() =="레벨") || (rec.Key(1).ToLower() =="한계"))
72{
73 // GAMSDatabase에 매개변수가 있는지 확인하세요. 없으면 예외가 발생합니다.
74 슬롯 사이트매개변수x = dict.GAMSDatabase.GetParameter(rec.Key(2));
75}
76 그밖에
77 던지다 신규 슬롯 사이트예외("UpdateAction을 처리할 수 없습니다."+ Rec.Key(1));
78}
79목록<GAMSModifier> mL =신규목록<GAMSModifier>();
80 foreach(튜플<GAMSModifier,GAMSParameter> tup수정자 목록)
81mL.Add(tup.Item1);
82mi.인스턴스화(solveStatement, opt, mL.ToArray());
83
84목록<Tuple<GAMSSymbol, GAMSParameter, 문자열>> outList =신규목록<Tuple<GAMSSymbol, GAMSParameter, 문자열>>();
85
86 foreach (GAMSSetRecordsinscenSymbol)
87{
88 foreach(튜플<GAMSModifier, GAMSParameter> tup수정자 목록)
89{
91 슬롯 사이트매개변수pscen = tup.Item2;
92
93 if(tup.Item1.DataSym ==)
94p = (슬롯 사이트매개변수)tup.Item1.GamsSym;
95 그밖에
96p = tup.Item1.DataSym;
97
98 // SymbolUpdateType=BaseCase를 구현함
99p.지우기();
100
102 문자열[] 필터 =신규 문자열[pscen.Dim];
103 for (inti = 0; 나는 < scenSymbol.Dim; 나++)
104필터[i] = s.Key(i);
105 for (inti = scenSymbol.Dim; i < pscen.Dim; 나++)
106필터[i] =" ";
107 시도해 보세요
108{
109rec = pscen.첫 번째 레코드(필터);
110}
112{
113 계속;
114}
115
116{
117 문자열[] myKeys =신규 문자열[p.Dim];
118 (inti = 0; 나는 < p.Dim; 나++)
119myKeys[i] = rec.Key(scenSymbol.Dim+i);
120p.AddRecord(내키).= 추천;
121}그동안(rec.MoveNext());
122}
123
124mi.해결(GAMSModelInstance.SymbolUpdateType.BaseCase, 출력, miOpt);
125 if(outList.Count == 0)
126 foreach (GAMSSetRecordrecdict)
127 if((rec.Key(1).ToLower() =="레벨") || (rec.Key(1).ToLower() =="한계"))
128outList.Add(신규튜플<GAMSSymbol, GAMSParameter, 문자열>(mi.SyncDB.GetSymbol(rec.Key(0)), dict.슬롯 사이트데이터베이스.GetParameter(rec.Key(2)), rec.Key(1).ToLower()));
129
130 foreach(튜플<GAMSSymbol, GAMSParameter, 문자열> tupin아웃리스트)
131{
132 문자열[] myKeys =신규 문자열[scenSymbol.Dim + tup.Item1.FirstRecord().Keys.Length];
133 for (inti = 0; 나는 < scenSymbol.Dim; 나++)
134myKeys[i] = s.Key(i);
135
136 if((tup.Item3 =="레벨") && (tup.Item1은슬롯 사이트변수))
137 foreach (GAMSVariableRecordrecintup.Item1)
138{
139 for (inti = 0; i < Rec.Keys.Length; 나++)
140myKeys[scenSymbol.Dim + i] = s.Key(i);
141tup.Item2.AddRecord(myKeys).Value = Rec.레벨;
142}
143 그밖에 if((tup.Item3 =="레벨") && (tup.Item1은GAMSequation))
144 foreach (GAMSequationRecordrecintup.Item1)
145{
146 for (inti = 0; i < Rec.Keys.Length; 나++)
147myKeys[scenSymbol.Dim + i] = s.Key(i);
148tup.Item2.AddRecord(myKeys).Value = Rec.레벨;
149}
150 그밖에 if((tup.Item3 =="한계") && (tup.Item1은슬롯 사이트변수))
151 foreach (GAMSVariableRecordrecintup.Item1)
152{
153 for (inti = 0; i < Rec.Keys.Length; 나++)
154myKeys[scenSymbol.Dim + i] = s.Key(i);
155tup.Item2.AddRecord(myKeys).Value = Rec.한계;
156}
157 그밖에 if((tup.Item3 =="한계") && (tup.Item1은GAMSequation))
158 foreach (GAMSequationRecordrecintup.Item1)
159{
160 for (inti = 0; i < Rec.Keys.Length; 나++)
161myKeys[scenSymbol.Dim + i] = s.Key(i);
162tup.Item2.AddRecord(myKeys).Value = Rec.한계;
163}
164}
165}
166}
167
168 정적 무효메인(문자열[] 인수)
169{
171 if(Environment.GetCommandLineArgs().Length > 1)
172ws =신규 슬롯 사이트작업공간(systemDirectory: Environment.GetCommandLineArgs()[1]);
173 그밖에
176
177 // GAMSJob을 실행하여 GAMSCheckpoint 초기화
178 GAMSJobt12 = ws.AddJobFromString(GetModelText());
179t12.실행(cp);
180
181 // GAMSModelInstance를 생성하고 다른 스칼라 bmult를 사용하여 여러 번 해결합니다.
183
184 더블[] bmultilist =신규 더블[] { 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3 };
185
187
188 GAMSSetscen = db.AddSet("장면", 1,"");
189 슬롯 사이트매개변수bmult = db.매개변수 추가("b다중 목록", "", 장면);
190 슬롯 사이트매개변수zscen = db.매개변수 추가("zscen", "", 장면);
191
192 inti = 0;
193 foreach (더블bb멀티리스트)
194{
195bmult.AddRecord("들"+ i).값 = b;
196scen.AddRecord("들"+ i++);
197}
198
199 GAMSSetdict = db.AddSet("dict",3,"");
200dict.AddRecord(장면.이름,"시나리오", "");
201dict.AddRecord("bmult", "매개변수", bmult.Name);
202말씀.AddRecord("z", "레벨", zscen.Name);
203
204
205GUSSCall(dict, mi,"운송은 lp min z를 사용합니다");
206
207 foreach (GAMSParameterRecordrecdb.GetParameter(zscen.Name))
208Console.WriteLine(rec.Key(0) +" obj: "+ Rec.값);
209
210 //*******************
211
212 GAMSModelInstancemi2 = cp.AddModelInstance();
213 슬롯 사이트데이터베이스db2 = ws.AddDatabase();
214
215 GAMSSetscen2 = db2.AddSet("장면", 1,"");
216 슬롯 사이트매개변수zscen2 = db2.매개변수 추가("zscen", "", 장면2);
218
219 for (intj = 0; j<4; j++)
220{
221 foreach (GAMSSetRecordirecint12.OutDB.GetSet("나"))
222 foreach (GAMSSetRecordjrecint12.OutDB.GetSet("j"))
223xup.AddRecord("들"+ j, irec.Key(0), jrec.Key(0)).= j+1;
224scen2.AddRecord("들"+ j);
225}
226
227
228 GAMSSetdict2 = db2.추가세트("dict", 3,"");
229dict2.AddRecord(scen2.이름,"시나리오", "");
230dict2.AddRecord("x", "낮은", xup.이름);
231dict2.AddRecord("z", "레벨", zscen2.이름);
232
233GUSSCall(dict2, mi2,"교통수단은 lp min z를 사용합니다", 출력: Console.Out);
234
235 foreach (GAMSParameterRecordrecdb2.GetParameter(zscen2.Name))
236Console.WriteLine(rec.Key(0) +" obj: "+ Rec.값);
237}
238
239 정적문자열 GetModelText()
240{
241문자열 모델 =@"
242세트
243i 통조림 공장 / 시애틀, 샌디에고 /
244j 마켓 / 뉴욕, 시카고, 토피카 / ;
245
246매개변수
247
248a(i) 경우에 따라 공장 i의 용량
249/ 시애틀 350
250샌디에고 600 /
251
252b(j) 경우에 따라 시장 j의 수요
253/ 뉴욕 325
254시카고 300
255토페카 275 / ;
256
257테이블 d(i,j) 거리(천 마일 단위)
258뉴욕 시카고 토피카
259시애틀 2.5 1.7 1.8
260산디에고 2.5 1.8 1.4 ;
261
262천 마일당 케이스당 달러 단위의 스칼라 f 화물 /90/ ;
263스칼라 bmult 수요 승수 /1/;
264
265매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;
266
267c(i,j) = f * d(i,j) / 1000 ;
268
269변수
270x(i,j) 케이스의 배송 수량
271z 총 운송 비용(수천 달러) ;
272
273양수 변수 x ;
274
275수식
276비용 정의 목적 함수
277공급(i) 공장 i의 공급 제한을 준수합니다.
278수요(j)는 시장 j의 수요를 충족합니다. ;
279
280비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
281
282공급(i) .. 합계(j, x(i,j)) =l= a(i) ;
283
284수요(j) .. sum(i, x(i,j)) =g= bmult*b(j) ;
285
286모델 전송 /all/ ;
287";
288
289 반환모델;
290}
291
292}
293}
GAMSModelInstance AddModelInstance(string modelInstanceName=null)
GAMSSet AddSet(문자열 식별자, int 차원, 문자열 설명텍스트="", SetType setType=SetType.multi)
GAMSParameter GetParameter(문자열 매개변수 식별자)
GAMSVariable AddVariable(문자열 식별자, 정수 차원, VarType varType, 문자열 설명텍스트="")
GAMSParameter AddParameter(문자열 식별자, 정수 차원, 문자열 설명텍스트="")
GAMSSymbol GetSymbol(문자열 기호 식별자)
void Run(GAMSOptions gamsOptions=null, GAMSCheckpoint 체크포인트=null, TextWriter 출력=null, Boolean createOutDB=true)
슬롯 사이트데이터베이스 SyncDB
void Solve(SymbolUpdateType 업데이트 유형=SymbolUpdateType.BaseCase, TextWriter 출력=null, GAMSModelInstanceOpt miOpt=null)
void Instantiate(string modelDefinition, params GAMSModifier[] modifiers)
새 GAMSParameterRecord AddRecord(params 문자열[] 키)
새 GAMSSetRecord AddRecord(params 문자열[] 키)
새 GAMSSetRecord FirstRecord()
슬롯 사이트데이터베이스 슬롯 사이트데이터베이스
GAMSJob AddJobFromString(문자열 gamsSource, GAMSCheckpoint 체크포인트=null, 문자열 jobName=null)
GAMSDatabase AddDatabase(문자열 데이터베이스 이름=null, 문자열 inModelName=null)
GAMSCheckpoint AddCheckpoint(string checkpointName=null)
이것은 일련의 튜토리얼 예제 중 12번째 모델입니다. 여기서는 GUSS 접근법을 구현하는 방법을 보여줍니다...