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