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