로드 중...
검색 중...
일치하는 항목 없음
transport11.py
이 파일의 문서로 이동하세요.
1
6
7가져오기os
8가져오기sys
9from게임가져오기GamsWorkspace, 액션
10
11GAMS_BASE_MODEL ="""
12$onEmpty
13설정
14i(*) '통조림 공장' / /
15j(*) '시장' / /;
16
17매개변수
18a(i) '경우에 따라 식물 i의 용량' / /
19b(j) '경우에 따라 시장 j의 수요' / /
20d(i,j) '거리(천 마일)' / /;
21
22스칼라 f '1,000마일당 케이스당 달러 단위의 화물' / 0 /;
23
24매개변수 c(i,j) '케이스당 수천 달러의 운송 비용';
25c(i,j) = f*d(i,j)/1000;
26
27변수
28x(i,j) '케이스의 배송 수량'
29z '총 운송 비용(수천 달러)';
30
31양수 변수 x;
32
33수식
34비용 '목적 함수 정의'
35supply(i) '공장 i의 공급 제한을 준수하세요'
36demand(j) '시장 j의 수요를 충족';
37
38비용.. z =e= sum((i,j), c(i,j)*x(i,j));
39
40공급(i).. 합계(j, x(i,j)) =l= a(i);
41
42수요(j).. 합계(i, x(i,j)) =g= b(j);
43
44모델 수송 /all/;
45
46z를 최소화하는 lp를 사용하여 전송을 해결합니다.
47"""
48
49GAMS_MODEL ="""
50$if 설정되지 않음 gdxincname $abort '제공된 데이터 파일에 대한 포함 파일 이름 없음'
51$gdxIn %gdxincname%
52$onMulti
53$load i j a b d f
54$gdxIn
55
56x.l, x.m 표시;
57"""
58
59
60defcreate_save_restart(sys_dir, cp_file_name):
61ws = GamsWorkspace(os.path.dirname(cp_file_name), sys_dir)
62job_1 = ws.add_job_from_string(GAMS_BASE_MODEL)
63opt = ws.add_options()
64opt.action = Action.CompileOnly
65cp = ws.add_checkpoint(os.path.basename(cp_file_name))
66job_1.run(opt, cp)
67
68
69if__name__ =="__main__":
70sys_dir = sys.argv[1]iflen(sys.argv) > 1그밖에 없음
71work_dir = sys.argv[2]iflen(sys.argv) > 2그밖에os.path.join(os.curdir,"tmp")
72ws = GamsWorkspace(system_directory=sys_dir,working_directory=work_dir)
73
74 # 일반적으로 응용 프로그램 제공업체에서 제공하는 저장/다시 시작 파일을 생성
75 # 데모용으로 생성합니다
76create_save_restart(sys_dir, os.path.join(work_dir,"tbase"))
77
78식물 = ["시애틀", "샌디에고"]
79
80시장 = ["뉴욕", "시카고", "토피카"]
81
82용량 ="시애틀": 350.0,"샌디에고": 600.0}
83
84수요 ="뉴욕": 325.0,"시카고": 300.0,"토피카": 275.0}
85
86거리 =
87 ("시애틀", "뉴욕"): 2.5,
88 ("시애틀", "시카고"): 1.7,
89 ("시애틀", "토피카"): 1.8,
90 ("샌디에고", "뉴욕"): 2.5,
91 ("샌디에고", "시카고"): 1.8,
92 ("샌디에고", "토피카"): 1.4,
93}
94
95db = ws.add_database()
96
97 # Python 데이터 구조의 데이터로 GamsDatabase 준비
98i = db.add_set("나", 1,"통조림 공장")
99 forp식물:
100i.add_record(p)
101
102j = db.add_set("j", 1,"시장")
103 formin시장:
104j.add_record(m)
105
106a = db.add_parameter_dc("a", [i],"케이스에 있는 식물 i의 용량")
107 forp식물:
108a.add_record(p).value = 용량[p]
109
110b = db.add_parameter_dc("b", [j],"경우에 따라 시장 j의 수요")
111 form시장:
112b.add_record(m).value = 수요[m]
113
114d = db.add_parameter_dc("d", [i, j],"수천 마일 단위의 거리")
115 fork, vdistance.items():
116d.add_record(k).value = v
117
118f = db.add_parameter("f", 0,"1,000마일당 케이스당 화물(달러)")
119f.add_record().value = 90
120
121 # 생성된 GamsDatabase의 데이터를 사용하여 작업 실행
122cp_base = ws.add_checkpoint("tbase")
123작업 = ws.add_job_from_string(GAMS_MODEL, cp_base)
124opt = ws.add_options()
125opt.defines["gdxincname"] = db.name
126opt.all_model_types ="익스프레스"
127job.run(opt, 데이터베이스=db)
128
129 recjob.out_db["x"]:
130인쇄(
131f"x(rec.key(0),rec.key(1)): 레벨=rec.level 한계=rec.marginal"
132 )