14에서게임
가져오기GamsWorkspace, GamsException, GamsExceptionExecution, GamsExitCode
18$SetDDList 창고 저장소 고정 분리 // 허용되는 정의
19$창고를 설정하지 않은 경우 $창고를 설정함 10
20$스토어가 설정되지 않은 경우 $set 스토어 50
21$설정되지 않은 경우 고정됨 $설정됨 고정됨 20
22$if set not set disaggregate $set disaggregate 1 // 더 엄격한 bigM 제약에 대한 표시
24$ife %store%<=%피망 슬롯% $abort 매장 수 증가 (>%피망 슬롯)
40스칼라 고정 '창고 개설 고정 비용' / %fixed% /;
46$eval storeDIVwarehouse trunc(카드(스토어)/카드(창고))
48용량(w) = %storeDIVwarehouse% + mod(ord(w), %storeDIVwarehouse%);
49supplyCost(s,w) = 1 + mod(ord(s) + 10*ord(w), 100);
63defobj.. obj =e= sum(w,fixed*open(w)) + sum((w,s), SupplyCost(s,w)*supply(s,w));
65한 창고.. 합계(w, 공급(들,w)) =e= 1;
67defopen(w).. sum(s, 공급(s,w)) =l= open(w)*capacity(w);
69$ifthen %disaggregate%==1
71defopen2(s,w).. 공급(s,w) =l= 개방(w);
75mip를 사용하여 distrib min obj를 해결합니다.
77$macro setResult(n) 옵션clear=ares; 아레스(n) = 예;
79if (distrib.modelstat=%ModelStat.LicensingProblem% 또는
80distrib.solvestat=%Solvestat.LicensingProblems%,
85if (distrib.solvestat<>%SolveStat.NormalCompletion% 또는
86distrib.modelstat<>%ModelStat.Optimal% 및
87distrib.modelstat<>%ModelStat.IntegerSolution%,
96defsolve_warehouse(작업 공간, nr_warehouses, 결과, 잠금):
101opt = 작업 공간.add_options()
102opt.all_model_types =
"복합체"
103opt.defines[
"창고"] = str(nr_warehouses)
104opt.defines[
"상점"] =
"65"
105opt.defines[
"고정됨"] =
"22"
106opt.defines[
"분리"] =
"0"
110작업 = 작업 공간.add_job_from_string(GAMS_MODEL)
115결과[
"objrep"].add_record(str(nr_warehouses)).value = (
116job.out_db[
"obj"].first_record().level
119 for공급_rec
에job.out_db[
"공급"]:
120 ifsupply_rec.level > 0.5:
122결과[
"공급 지도"].add_record(
123(str(nr_warehouses), 공급_rec.key(0), 공급_rec.key(1))
128 ifisinstance(e, GamsExceptionExecution):
130 ife.rc == GamsExitCode.ExecutionError:
133.find_record(job.out_db[
"아레스"].first_record().key(0))
139상태 = -1
ifisinstance(e, GamsException)
그밖에 -2
143if__name__ ==
"__main__":
144sys_dir = sys.argv[1]
iflen(sys.argv) > 1
그밖에 없음
145work_dir = sys.argv[2]
iflen(sys.argv) > 2
그밖에 없음
146ws = GamsWorkspace(system_directory=sys_dir, Working_directory=work_dir)
149result_db = ws.add_database()
150result_db.add_parameter(
"objrep", 1,
"목표 값")
151result_db.add_set(
"공급지도", 3,
"레벨에 따른 공급 연결")
160t = 스레드(대상=solve_warehouse, args=(ws, i, result_db, lock))
166 올림GamsExceptionExecution(
167f
"GamsException이 발생했습니다: 피망 슬롯 실행 중 오류: status status_string",
172 올림GamsException(
"GamsException 발생: 피망 슬롯 API 오류", ws)
177result_db.export(os.path.join(os.getcwd(),
"result.gdx"))