로드 중...
검색 중...
일치하는 항목 없음
transport9.py
이 파일의 문서로 이동하세요.
1
7
8가져오기sys
9가져오기pyodbc
10from게임가져오기GamsWorkspace
11
12GAMS_MODEL ="""
13설정
14i '통조림 식물'
15j '시장';
16
17매개변수
18a(i) '경우에 따른 식물 i의 용량'
19b(j) '경우에 따라 시장 j의 수요'
20d(i,j) '거리(천 마일)';
21
22스칼라 f '1,000마일당 케이스당 달러 단위의 화물' / 90 /;
23
24$if 설정되지 않음 gdxincname $abort '제공된 데이터 파일에 대한 포함 파일 이름 없음'
25$gdxIn %gdxincname%
26$load i j a b d
27$gdxIn
28
29매개변수 c(i,j) '케이스당 수천 달러의 운송 비용';
30c(i,j) = f*d(i,j)/1000;
31
32변수
33x(i,j) '케이스의 배송 수량'
34z '총 운송 비용(수천 달러)';
35
36양수 변수 x;
37
38수식
39비용 '목적 함수 정의'
40supply(i) '공장 i의 공급 제한을 준수하세요'
41demand(j) '시장 j의 수요를 충족';
42
43비용.. z =e= sum((i,j), c(i,j)*x(i,j));
44
45공급(i).. 합계(j, x(i,j)) =l= a(i);
46
47수요(j).. 합계(i, x(i,j)) =g= b(j);
48
49모델 수송 /all/;
50
51z를 최소화하는 lp를 사용하여 전송을 해결합니다.
52
53x.l, x.m 표시;
54"""
55
56
57defread_set(connection, db, query_string, set_name, set_dim, set_exp=""):
58 시도해 보세요:
59커서 = 연결.cursor()
60cursor.execute(query_string)
61데이터 = 커서.fetchall()
62
63 iflen(데이터[0]) != set_dim:
64 올림예외(
65 "select 문의 필드 수가 setDim과 일치하지 않습니다"
66 )
67
68i = db.add_set(set_name, set_dim, set_exp)
69
70 forin데이터:
71키 = []
72 for행:
73keys.append(str(key))
74i.add_record(키)
75
76 제외예외as예:
77 올림예외(
78 "오류: 데이터베이스에서 필요한 데이터를 검색하는 데 실패했습니다.\n0".format(
79
80 )
81 )
82 마지막으로:
83cursor.close()
84
85
86defread_parameter(connection, db, query_string, par_name, par_dim, par_exp=""):
87 시도해 보세요:
88커서 = 연결.cursor()
89cursor.execute(query_string)
90데이터 = 커서.fetchall()
91
92 iflen(데이터[0]) != par_dim + 1:
93 올림예외(
94 "select 문의 필드 수가 par_dim+1과 일치하지 않습니다."
95 )
96
97a = db.add_parameter(par_name, par_dim, par_exp)
98
99 forin데이터:
100키 = []
101 foridxin범위(len(행) - 1):
102keys.append(str(row[idx]))
103a.add_record(keys).value = 행[par_dim]
104
105 제외예외as예:
106 올림예외(
107 "오류: 데이터베이스에서 필요한 데이터를 검색하는 데 실패했습니다.\n0".format(
108
109 )
110 )
111 마지막으로:
112cursor.close()
113
114
115defwrite_variable(연결, db, var_name, 열_이름):
116 시도해 보세요:
117var = db.get_variable(var_name)
118 iflen(column_names) != var.dimension:
119 올림예외(
120 "열 이름의 수가 변수의 차원과 일치하지 않습니다"
121 )
122
123커서 = 연결.커서()
124 시도해 보세요:
125cursor.execute("드롭 테이블 "+ var_name)
126connection.commit()
127 제외:
128 통과
129쿼리 ="테이블 생성"+ var_name +"("
130 forin열_이름:
131쿼리 += 열 +" varchar(64), "
132쿼리 +="레벨 더블)"
133cursor.execute(쿼리)
134connection.commit()
135
136 recvar:
137쿼리 =""에 삽입하세요+ var_name +"("
138 열_이름:
139쿼리 += 열 +", "
140쿼리 +="lvl) 값 ("
141 forrec.keys:
142질의 +="'"+ 키 +"', "
143쿼리 += str(rec.level) +")"
144cursor.execute(쿼리)
145connection.commit()
146
147 제외예외으로예:
148 올림예외(
149 "오류: 데이터베이스에 변수를 쓰는 데 실패했습니다.\n0".format(ex)
150 )
151 마지막으로:
152cursor.close()
153
154
155defwrite_results(db):
156str_access_conn =r"DRIVER=Microsoft Access Driver(*.mdb, *.accdb);DBQ=..\..\..\..\apifiles\Data\transport.accdb"
157 시도해 보세요:
158연결 = pyodbc.connect(str_access_conn)
159 제외예외as예:
160 올림예외(
161 "오류: 데이터베이스 연결 생성에 실패했습니다. \n0".format(ex)
162 )
163 # 변수 x의 레벨 쓰기
164write_variable(연결, db,"x", ["나", "j"])
165connection.close()
166
167
168defread_from_access(ws):
169db = ws.add_database()
170
171 # 데이터베이스에 연결
172str_access_conn =r"DRIVER=Microsoft Access Driver(*.mdb, *.accdb);DBQ=..\..\..\..\apifiles\Data\transport.accdb"
173
174 시도:
175연결 = pyodbc.connect(str_access_conn)
176 제외예외ase:
177 올림예외(f"오류: 데이터베이스 연결 생성에 실패했습니다.\ne")
178
179 # 슬롯 세트 읽기
180read_set(연결, db,"식물에서 식물 선택", "나", 1,"통조림 공장")
181read_set(연결, db,"시장에서 시장 선택", "j", 1,"시장")
182
183 # 슬롯 매개변수 읽기
184read_parameter(
185연결,
186db,
187 "공장 선택,공장에서 생산 능력",
188 "a",
189 1,
190 "케이스에 있는 식물 i의 용량",
191 )
192read_parameter(
193연결,
194db,
195 "시장 선택,시장에서 수요",
196 "b",
197 1,
198 "경우에 따라 시장 j의 수요",
199 )
200read_parameter(
201연결,
202db,
203 "공장,시장,거리 FROM 거리 선택",
204 "d",
205 2,
206 "수천 마일 단위의 거리",
207 )
208
209connection.close()
210 반환db
211
212
213if__name__ =="__main__":
214sys_dir = sys.argv[1]iflen(sys.argv) > 1그밖에 없음
215work_dir = sys.argv[2]iflen(sys.argv) > 2그밖에 없음
216ws = GamsWorkspace(system_directory=sys_dir, Working_directory=work_dir)
217
218 # Access에서 읽어 GamsDatabase를 채웁니다.
219db = read_from_access(ws)
220
221 # 작업 실행
222작업 = ws.add_job_from_string(GAMS_MODEL)
223opt = ws.add_options()
224opt.defines["gdxincname"] = db.name
225opt.all_model_types ="익스프레스"
226job.run(옵션, 데이터베이스=db)
227
228 # 결과를 액세스 파일에 기록
229write_results(job.out_db)