로드 중...
검색 중...
일치하는 항목 없음
transport7.py
이 파일의 문서로 이동하세요.
1
8
9가져오기sys
10에서게임가져오기GamsWorkspace, GamsModifier, UpdateAction, VarType
11
12GAMS_MODEL ="""
13설정
14i '통조림 공장' / 시애틀, 샌디에고 /
15j 'markets' / 뉴욕, 시카고, 토피카 /;
16
17매개변수
18a(i) '경우에 따른 식물 i의 용량'
19/시애틀 350
20샌디에고 600 /
21
22b(j) '경우에 따라 시장 j의 수요'
23/ 뉴욕 325
24시카고 300
25토피카 275 /;
26
27테이블 d(i,j) '거리(천 마일)'
28뉴욕 시카고 토피카
29시애틀 2.5 1.7 1.8
30산디에고 2.5 1.8 1.4;
31
32스칼라
33f '1,000마일당 케이스당 달러 단위의 화물' / 90 /
34bmult '수요 승수' / 1 /;
35
36매개변수 c(i,j) '케이스당 수천 달러의 운송 비용';
37c(i,j) = f*d(i,j)/1000;
38
39변수
40x(i,j) '케이스의 배송 수량'
41z '총 운송 비용(수천 달러)';
42
43양수 변수 x;
44
45수식
46비용 '목적 함수 정의'
47supply(i) '공장 i의 공급 제한을 준수하세요'
48demand(j) '시장 j의 수요를 충족';
49
50비용.. z =e= sum((i,j), c(i,j)*x(i,j));
51
52공급(i).. 합계(j, x(i,j)) =l= a(i);
53
54수요(j).. sum(i, x(i,j)) =g= bmult*b(j);
55
56모델 전송 /all/;
57"""
58
59if__name__ =="__main__":
60sys_dir = sys.argv[1]iflen(sys.argv) > 1그밖에 없음
61work_dir = sys.argv[2]iflen(sys.argv) > 2그밖에 없음
62ws = GamsWorkspace(system_directory=sys_dir, Working_directory=work_dir)
63
64cp = ws.add_checkpoint()
65
66 # GamsJob을 실행하여 GamsCheckpoint를 초기화합니다.
67작업 = ws.add_job_from_string(GAMS_MODEL)
68job.run(체크포인트=cp)
69
70 # GamsModelInstance를 생성하고 다른 스칼라 bmult를 사용하여 여러 번 해결합니다.
71mi = cp.add_modelinstance()
72bmult = mi.sync_db.add_parameter("bmult", 0,"수요 승수")
73opt = ws.add_options()
74opt.all_model_types ="복합체"
75
76 # GAMSModelInstance를 인스턴스화하고 모델 정의 및 GAMSModifier를 전달하여 bmult 변경 가능 선언
77mi.instantiate("운송은 lp min z를 사용합니다", GamsModifier(bmult), opt)
78
79bmult.add_record().value = 1.0
80bmult_list = [0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3]
81
82 forbbmult_list:
83bmult.first_record().value = b
84mi.solve()
85인쇄(f"시나리오 bmult=b:")
86인쇄(f" 모델 상태: mi.model_status")
87인쇄(f" 해결 상태: mi.solver_status")
88인쇄(f" Obj: mi.sync_db['z'].first_record().level")
89
90 # GamsModelInstance를 생성하고 차단된 네트워크의 단일 링크로 해결
91mi = cp.add_modelinstance()
92x = mi.sync_db.add_variable("x", 2, VarType.Positive)
93xup = mi.sync_db.add_parameter("xup", 2,"x의 상한")
94
95 # GamsModelInstance를 인스턴스화하고 모델 정의와 GamsModifier를 전달하여 x의 상한을 변경 가능으로 선언
96mi.instantiate("운송은 lp min z를 사용합니다", GamsModifier(x, UpdateAction.Upper, xup))
97mi.solve()
98
99 forijob.out_db["나"]:
100 forjinjob.out_db["j"]:
101xup.clear()
102xup.add_record((i.key(0), j.key(0))).value = 0
103mi.solve()
104인쇄(f"시나리오 링크가 차단되었습니다: i.key(0) - j.key(0)")
105인쇄(f" 모델 상태: mi.model_status")
106인쇄(f" 솔베상태: mi.solver_status")
107인쇄(f" 개체: mi.sync_db['z'].find_record().level")