로드 중...
검색 중...
일치하는 항목 없음
Transport9.cs
1사용 중시스템;
2사용 중System.Collections.Generic;
3사용 중시스템.텍스트;
4사용 중시스템.IO;
5사용 중피망 슬롯;
6사용 중System.Data.OleDb;
7
8
9네임스페이스TransportSeq
10{
19 클래스운송9
20{
21 정적 무효메인(문자열[] 인수)
22{
24 if(Environment.GetCommandLineArgs().Length > 1)
25ws =신규 피망 슬롯작업공간(systemDirectory: Environment.GetCommandLineArgs()[1]);
26 그밖에
27ws =신규 피망 슬롯작업공간();
28 // Access에서 읽어 GAMSDatabase를 채웁니다.
29 피망 슬롯데이터베이스db = ReadFromAccess(ws);
30
31 // 작업 실행
32 사용 중 (피망 슬롯옵션opt = ws.추가옵션())
33{
34 GAMSJobt9 = ws.AddJobFromString(GetModelText());
35선택.정의.추가("gdxincname", DB.이름);
36opt.AllModelTypes ="익스프레스";
37t9.실행(선택, DB);
38 foreach (GAMSVariableRecordrect9.OutDB.GetVariable("x"))
39Console.WriteLine("x("+ Rec.Key(0) +","+ Rec.Key(1) +"): 레벨="+ 추천레벨 + " 한계="+ 녹음.한계);
40 // 결과를 Access 파일에 기록
41WriteToAccess(ws, t9.OutDB);
42}
43
44}
45
46 정적 무효ReadSet(OleDbConnection 연결,피망 슬롯데이터베이스db,문자열strAccessSelect,문자열세트이름,intsetDim,문자열setExp ="")
47{
48 시도해 보세요
49{
50OleDbCommand 명령 =신규OleDbCommand(strAccessSelect, 연결);
51연결.열기();
52
53OleDbDataReader 리더 = cmd.ExecuteReader();
54
55 if(reader.FieldCount != setDim)
56{
57Console.WriteLine("select 문의 필드 수가 setDim과 일치하지 않습니다.");
58환경.종료(1);
59}
60
61 GAMSSeti = db.AddSet(setName, setDim, setExp);
62
63 문자열[] 키 =신규 문자열[setDim];
64 그동안(reader.Read())
65{
66 for (intidx = 0; idx < setDim; idx++)
67키[idx] = reader.GetString(idx);
68
69i.AddRecord(키);
70}
71}
72 잡기(예외예외)
73{
74Console.WriteLine("오류: 데이터베이스에서 필요한 데이터를 검색하는 데 실패했습니다.\n0", 예: 메시지);
75환경.종료(1);
76}
77 마지막으로
78{
79연결.닫기();
80}
81}
82
83 정적 공허ReadParameter(OleDbConnection 연결,피망 슬롯데이터베이스db,문자열strAccessSelect,문자열par이름,intparDim,문자열parExp ="")
84{
85 시도해 보세요
86{
87OleDbCommand cmd =신규OleDbCommand(strAccessSelect, 연결);
88연결.열기();
89
90OleDbDataReader 리더 = cmd.ExecuteReader();
91
92 if(reader.FieldCount != parDim+1)
93{
94Console.WriteLine("select 문의 필드 수가 parDim+1과 일치하지 않습니다.");
95환경.종료(1);
96}
97
98 피망 슬롯매개변수a = DB.매개변수 추가(parName, parDim, parExp);
99
100 문자열[] 키 =신규 문자열[parDim];
101 그동안(reader.Read())
102{
103 for (intidx = 0; idx < parDim; idx++)
104키[idx] = reader.GetString(idx);
105
106a.AddRecord(키).= Convert.ToDouble(reader.GetValue(parDim));
107}
108}
109 잡기(예외 예)
110{
111Console.WriteLine("오류: 데이터베이스에서 필요한 데이터를 검색하는 데 실패했습니다.\n0", 예: 메시지);
112환경.종료(1);
113}
114 마지막으로
115{
116연결.닫기();
117}
118}
119
121{
122
124
125 // 데이터베이스에 연결
126 문자열strAccessConn =@"공급자=Microsoft.ACE.OLEDB.12.0;데이터 소스="+ Path.Combine(ws.시스템 디렉토리, @"apifiles/Data/transport.accdb");
127OleDbConnection 연결 =;
128 시도해 보세요
129{
130연결 =신규OleDbConnection(strAccessConn);
131}
132 잡기(예외 예)
133{
134Console.WriteLine("오류: 데이터베이스 연결 생성에 실패했습니다. \n0", 예:메시지);
135환경.종료(1);
136}
137
138 // 피망 슬롯 세트 읽기
139ReadSet(연결, db,"식물에서 식물을 선택하세요", "나", 1,"통조림 공장");
140ReadSet(연결, db,"시장에서 시장 선택", "j", 1,"시장");
141
142 // 피망 슬롯 매개변수 읽기
143ReadParameter(연결, db,"공장 선택,공장에서 생산 능력", "a", 1,"케이스에 있는 식물 i의 용량");
144ReadParameter(연결, db,"시장 선택,시장에서 수요", "b", 1,"경우에 따라 시장 j의 수요");
145ReadParameter(연결, db,"공장,시장,거리 FROM 거리 선택", "d", 2,"수천 마일 단위의 거리");
146
147 반환db;
148}
149
150 정적 공허WriteVariable(OleDbConnection 연결,피망 슬롯데이터베이스db,문자열varName, 매개변수문자열[] 도메인)
151{
152 시도해 보세요
153{
154 피망 슬롯변수var = db.GetVariable(varName);
155 if(도메인.길이 != var.Dim)
156{
157Console.WriteLine("열 이름의 수가 변수의 차원과 일치하지 않습니다.");
158환경.종료(1);
159}
160
161연결.열기();
162
163 // 이미 존재하는 경우 varName 테이블 삭제
164OleDbCommand cmd =신규OleDbCommand("드롭 테이블 "+ varName, 연결);
165 시도해 보세요
166{
167cmd.ExecuteNonQuery();
168}
169 잡기
170{
171}
172
173문자열 쿼리 ="테이블 생성"+ varName +"(";
174 foreach (문자열도메인)
175쿼리 += dom +" varchar(64), ";
176쿼리 +="레벨 두 배)";
177
178cmd.CommandText = 쿼리;
179cmd.ExecuteNonQuery();
180
181 foreach (GAMSVariableRecordrecinvar)
182{
183쿼리 =""에 삽입+ varName +"(";
184 foreach (문자열in도메인)
185쿼리 += dom +", ";
186쿼리 +="lvl) 값 (";
187 foreach (문자열inrec.키)
188쿼리 +="'"+ 키 +"', ";
189쿼리 += Rec.레벨 +")";
190cmd.CommandText = 쿼리;
191cmd.ExecuteNonQuery();
192}
193}
194 잡기(예외 예)
195{
196Console.WriteLine("오류: 데이터베이스에 변수를 쓰는 데 실패했습니다.\n0", 예: 메시지);
197환경.종료(1);
198}
199 마지막으로
200{
201연결.닫기();
202}
203}
204
205 정적 무효WriteToAccess(피망 슬롯작업공간ws,피망 슬롯데이터베이스db)
206{
207 // 데이터베이스에 연결
208 문자열strAccessConn =@"Provider=Microsoft.ACE.OLEDB.12.0;데이터 소스="+ Path.Combine(ws.시스템 디렉터리, @"apifiles/Data/transport.accdb");
209OleDbConnection 연결 =;
210 시도해 보세요
211{
212연결 =신규OleDbConnection(strAccessConn);
213}
214 잡기(예외 예)
215{
216Console.WriteLine("오류: 데이터베이스 연결 생성에 실패했습니다. \n0", 예: 메시지);
217환경.종료(1);
218}
219
220 // 변수 x의 레벨 쓰기
221쓰기변수(연결, db,"x", "나", "j");
222}
223
224
225 정적문자열 GetModelText()
226{
227문자열 모델 =@"
228세트
229나는 통조림 공장
230j 시장
231
232매개변수
233a(i) 경우에 따라 공장 i의 용량
234b(j) 경우에 따라 시장 j의 수요
235d(i,j) 거리(천 마일)
236천 마일당 케이스당 달러 단위의 스칼라 f 화물 /90/;
237
238$if 설정되지 않음 gdxincname $abort '제공된 데이터 파일에 대한 포함 파일 이름 없음'
239$gdxin %gdxincname%
240$load i j a b d
241$gdxin
242
243매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;
244
245c(i,j) = f * d(i,j) / 1000 ;
246
247변수
248x(i,j) 케이스의 배송 수량
249z 총 운송 비용(수천 달러) ;
250
251양수 변수 x ;
252
253수식
254비용 정의 목적 함수
255공급(i) 공장 i의 공급 제한을 준수합니다.
256수요(j)는 시장 j의 수요를 충족합니다. ;
257
258비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
259
260공급(i) .. 합계(j, x(i,j)) =l= a(i) ;
261
262수요(j) .. 합계(i, x(i,j)) =g= b(j) ;
263
264모델 전송 /all/ ;
265
266z를 최소화하는 lp를 사용하여 전송을 해결합니다.
267
268x.l, x.m 표시 ;
269";
270
271 반환모델;
272}
273
274}
275}
GAMSVariable GetVariable(문자열 변수 식별자)
GAMSSet AddSet(문자열 식별자, int 차원, 문자열 설명텍스트="", SetType setType=SetType.multi)
GAMSParameter AddParameter(문자열 식별자, 정수 차원, 문자열 설명텍스트="")
void Run(GAMSOptions gamsOptions=null, GAMSCheckpoint 체크포인트=null, TextWriter 출력=null, Boolean createOutDB=true)
사전< 문자열, 문자열 > 정의
새 GAMSParameterRecord AddRecord(params 문자열[] 키)
새 GAMSSetRecord AddRecord(params 문자열[] 키)
GAMSJob AddJobFromString(문자열 gamsSource, GAMSCheckpoint 체크포인트=null, 문자열 jobName=null)
GAMSDatabase AddDatabase(문자열 데이터베이스 이름=null, 문자열 inModelName=null)
GAMSOptions AddOptions(GAMSOptions optFrom=null)
이것은 일련의 튜토리얼 예제 중 9번째 모델입니다. 여기에서는 다음을 보여줍니다. r로 GAMSDatabase를 채우는 방법...