16from게임
가져오기GamsWorkspace, GamsModifier, SymbolUpdateType
19$tspdata가 설정되지 않은 경우 $abort 'tspdata가 설정되지 않음'
33$nrCities가 설정되지 않은 경우 $set nrCities 20
34i(ii)$(ord(ii) < %nrCities%) = 예;
37x(ii,jj) '결정 변수 - 여행 구간'
45rowsum(ii) '각 도시를 한 번만 떠나세요'
46colsum(jj) '각 도시에 한 번만 도착';
48* 할당 문제는 슬롯 사이트 추천의 완화입니다.
49목적.. z =e= sum((i,j), c(i,j)*x(i,j));
51rowsum(i).. sum(j, x(i,j)) =e= 1;
53colsum(j)..sum(i, x(i,j)) =e= 1;
55$cmax가 설정되지 않은 경우 $set cmax 2
59acut(슬롯 사이트 추천ii,jj) '제약조건 행렬 자르기'
60rhscut(슬롯 사이트 추천) '제한조건 rhs 자르기';
62수식 sscut(슬롯 사이트 추천) 'sub_tour 제거 컷';
63sscut(슬롯 사이트 추천).. sum((i,j), acut(슬롯 사이트 추천i,j)*x(i,j)) =l= rhscut(슬롯 사이트 추천);
65cc(슬롯 사이트 추천) '이전 컷' 설정;
68$if set cutdataexecute_load '%cutdata%', cc, acut, rhscut;
70acut(슬롯 사이트 추천i,j)$(cc(슬롯 사이트 추천) 아님) = eps;
72rhscut(컷)$(cc(컷) 아님) = 카드(ii);
79if__name__ ==
"__main__":
80sys_dir = sys.argv[1]
iflen(sys.argv) > 1
그밖에 없음
81work_dir = sys.argv[2]
iflen(sys.argv) > 2
그밖에 없음
82ws = GamsWorkspace(system_directory=sys_dir,working_directory=work_dir)
94cut_data = ws.add_database()
95cc = cut_data.add_set(
"cc", 1)
96acut = cut_data.add_parameter(
"어컷", 3)
97rhscut = cut_data.add_parameter(
"rhscut", 1)
103cmax = cur_cut + cuts_per_round
107작업 = ws.add_job_from_string(GAMS_MODEL)
108cp = ws.add_checkpoint()
109opt = ws.add_options()
110opt.defines[
"nrcities"] =
"20"
111opt.defines[
"cmax"] = str(cmax - 1)
112opt.defines[
"컷데이터"] = cut_data.name
113opt.defines[
"tspdata"] = (
115+ os.path.join(ws.system_directory,
"api파일",
"데이터",
"슬롯 사이트 추천gdx")
118job.run(gams_options=opt, checkpoint=cp)
122 fori
에job.out_db[
"나"]:
126mi = cp.add_modelinstance()
127mi_acut = mi.sync_db.add_parameter(
"어컷", 3)
128mi_rhscut = mi.sync_db.add_parameter(
"rhscut", 1)
130 "mip min z 사용 할당", [GamsModifier(mi_acut), GamsModifier(mi_rhscut)]
134mi.solve(SymbolUpdateType.Accumulate)
135mi.sync_db[
"어컷"].clear()
136mi.sync_db[
"rhscut"].clear()
141 ifmi.sync_db[
"x"].find_record([i, j]).level > 0.5:
149 그동안그래프[i] != 방문하지 않음[0]:
152not_visited = 목록(필터(
람다x:x
아님 insub_tour, not_visited))
155 fori, j
에제품(sub_tour, sub_tour):
156acut.add_record([f
"ccur_cut", i, j]).값 = 1
157mi_acut.add_record([f
"ccur_cut", i, j]).값 = 1
158rhscut.add_record(f
"ccur_cut").value = len(sub_tour) - 0.5
159mi_rhscut.add_record([f
"ccur_cut"]).value = len(sub_tour) - 0.5
160cc.add_record(f
"ccur_cut")
164 iflen(sub_tour) == len(n):
165인쇄(f
"z=mi.sync_db['z'].first_record().level")