21i '통조림 공장' / 시애틀, 샌디에고 /
22j 'markets' / 뉴욕, 시카고, 토피카 /;
40f '1,000마일당 케이스당 달러 단위의 화물' / 90 /
43매개변수 c(i,j) '케이스당 수천 달러의 운송 비용';
44c(i,j) = f*d(i,j)/1000;
54supply(i) '공장 i의 공급 제한을 준수하세요'
55demand(j) '시장 j의 수요를 충족';
57비용.. z =e= sum((i,j), c(i,j)*x(i,j));
59공급(i).. 합계(j, x(i,j)) =l= a(i);
61수요(j).. sum(i, x(i,j)) =g= bmult*b(j);
68defguss_call(scenario_dict, mi,solv_statement, opt=없음, mi_opt=없음, 출력=없음):
69 ifscenario_dict.dimension != 3:
70 올림GamsException(
"시나리오 사전은 3차원이어야 합니다")
72scen_name = 시나리오_dict.first_record((
" ",
"시나리오",
" ")).key(0)
73scen_symbol = 시나리오_dict.database[scen_name]
76 ifrec.key(1).lower() ==
"시나리오":
78 ifrec.key(1).lower() ==
"매개변수":
80scenario_dict.database[rec.key(2)].dimension - scen_symbol.dimension
83 올림GamsException(
"크기"+ Rec.key(2) +
"너무 작습니다")
87mi.sync_db.add_parameter(rec.key(0), modifier_dim,
"")
89scenario_dict.database[rec.key(2)],
92 엘리프rec.key(1).lower()
in[
"낮은",
"상단",
"고정됨"]:
94scenario_dict.database[rec.key(2)].dimension - scen_symbol.dimension
97 올림GamsException(
"크기"+ Rec.key(2) +
"너무 작습니다")
100modifier_var = 시나리오_dict.database[rec.key(0)]
102modifier_var = mi.sync_db.add_variable(
103rec.key(0), modifier_dim, VarType.Free,
""
105 ifrec.key(1).lower() ==
"낮은":
106update_action = UpdateAction.Lower
107 엘리프rec.key(1).lower() ==
"상단":
108update_action = UpdateAction.Upper
110update_action = UpdateAction.Fixed
116mi.sync_db.add_parameter(rec.key(2), modifier_dim,
""),
118scenario_dict.database[rec.key(2)],
121 엘리프rec.key(1).lower()
in[
"레벨",
"한계"]:
123scenario_dict.database[rec.key(2)]
125 올림GamsException(
"UpdateAction을 처리할 수 없습니다"+ Rec.key(1))
127ml = [m[0]
form
in수정자_목록]
128mi.instantiate(solve_statement, ml, opt)
132p = m.gams_symbol
ifm.data_symbol
is 없음 그밖에m.data_symbol
136필터 = [
""] * p_scen.dimension
137 fori
in범위(scen_symbol.dimension):
139 fori
in범위(scen_symbol.dimension, p_scen.dimension):
142rec = p_scen.first_record(필터)
148rec.key(scen_symbol.dimension + i)
fori
in범위(p.dimension)
150p.add_record(my_keys).value = Rec.value
151 if 아님rec.move_next():
154mi.solve(SymbolUpdateType.BaseCase, 출력, mi_opt)
156 forrec
에scenario_dict:
157 ifrec.key(1).lower()
in[
"레벨",
"한계"]:
160mi.sync_db[rec.key(0)],
161scenario_dict.database[rec.key(2)],
167my_keys = [
""] * (scen_symbol.dimension + len(tup[0].first_record().keys))
168 fori
에범위(scen_symbol.dimension):
171 ifisinstance(tup[0], (GamsVariable, GamsEquation)):
172 if트업[2]
in[
"레벨",
"한계"]:
174 fori
에범위(len(rec.keys)):
175my_keys[scen_symbol.dimension + i] = s.key(i)
176tup[1].add_record(my_keys).value = (
177rec.level
iftup[2] ==
"레벨" 그밖에rec.marginal
181if__name__ ==
"__main__":
182sys_dir = sys.argv[1]
iflen(sys.argv) > 1
그밖에 없음
183work_dir = sys.argv[2]
iflen(sys.argv) > 2
그밖에 없음
184ws = GamsWorkspace(system_directory=sys_dir, Working_directory=work_dir)
186cp = ws.add_checkpoint()
189작업 = ws.add_job_from_string(GAMS_MODEL)
193mi = cp.add_modelinstance()
194bmult_list = [0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3]
195db = ws.add_database()
196슬롯 커뮤니티 = db.add_set(
"장면", 1,
"")
197bmult = db.add_parameter_dc(
"b다중 목록", [장면])
198zscen = db.add_parameter_dc(
"zscen", [장면])
200 fori, b
in열거(bmult_list):
201bmult.add_record(f
"si").값 = b
202슬롯 커뮤니티add_record(f
"si")
204scenario_dict = db.add_set(
"scenario_dict", 3,
"")
205scenario_dict.add_record((슬롯 커뮤니티name,
"시나리오",
""))
206scenario_dict.add_record((
"bmult",
"매개변수", bmult.name))
207scenario_dict.add_record((
"z",
"레벨", zscen.name))
209guss_call(scenario_dict, mi,
"운송은 lp min z를 사용합니다")
211 forrec
에db[zscen.name]:
212인쇄(f
"rec.key(0) obj: rec.value")
214mi2 = cp.add_modelinstance()
215db2 = ws.add_database()
217scen2 = db2.add_set(
"장면", 1,
"")
218zscen2 = db2.add_parameter_dc(
"zscen", [scen2])
219xup = db2.add_parameter(
"xup", 3,
"")
222 forrec_i
injob.out_db[
"나"]:
223 forrec_j
에job.out_db[
"j"]:
224xup.add_record((f
"sj", rec_i.key(0), rec_j.key(0))).value = j + 1
225scen2.add_record(f
"sj")
227scenario_dict2 = db2.add_set(
"scenario_dict", 3,
"")
228scenario_dict2.add_record((scen2.name,
"시나리오",
""))
229scenario_dict2.add_record((
"x",
"낮은", xup.name))
230scenario_dict2.add_record((
"z",
"레벨", zscen2.name))
232guss_call(scenario_dict2, mi2,
"운송은 lp min z를 사용합니다", 출력=sys.stdout)
234 forrec
indb2[zscen2.name]:
235인쇄(f
"rec.key(0) obj: rec.value")