11from게임
가져오기GamsWorkspace, GamsModifier
12from다중 처리
가져오기잠금, 프로세스, 대기열
17j 마켓 / 뉴욕, 시카고, 토피카 / ;
34스칼라 f 화물(1,000마일당 케이스당 달러) /90/ ;
37매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;
38c(i,j) = f * d(i,j) / 1000 ;
48공급(i) 공장 i의 공급 제한을 준수합니다.
49수요(j)는 시장 j의 수요를 충족합니다. ;
51비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
53공급(i) .. 합계(j, x(i,j)) =l= a(i) ;
55수요(j) .. sum(i, x(i,j)) =g= bmult*b(j) ;
61defscen_solve(cp_file, bmult_queue, queue_lock, io_lock):
63cp = ws.add_checkpoint(cp_file)
64mi = cp.add_modelinstance()
65bmult = mi.sync_db.add_parameter(
"bmult", 0,
"수요 승수")
67opt.all_model_types =
"복합체"
70mi.instantiate(
"운송은 lp min z를 사용합니다", GamsModifier(bmult), opt)
71bmult.add_record().value = 1.0
76 ifbmult_queue.empty():
81bmult.first_record().value = b
86인쇄(
"시나리오 bmult="+ 문자열(b) +
":")
87인쇄(
" 모델 상태: "+ str(mi.model_status))
88인쇄(
" 해결 상태: "+ str(mi.solver_status))
89인쇄(
" 개체: "+ str(mi.sync_db.get_variable(
"z").find_record().level))
93if__name__ ==
"__main__":
94sys_dir = sys.argv[1]
iflen(sys.argv) > 1
그밖에 없음
95work_dir = sys.argv[2]
iflen(sys.argv) > 2
그밖에 없음
96ws = GamsWorkspace(system_directory=sys_dir, Working_directory=work_dir)
97cp = ws.add_checkpoint()
100작업 = ws.add_job_from_string(GAMS_MODEL)
102cp_file = os.path.join(ws.working_directory, cp.name) +
".g00"
105bmult = [0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3]
117target=scen_solve, args=(cp_file, bmult_queue, queue_lock, io_lock)
120 fori
in범위(nr_workers):