로드 중...
검색 중...
일치하는 항목 없음
transport10.py
이 파일의 문서로 이동하세요.
1
6
7가져오기os
8가져오기sys
9from게임가져오기GamsWorkspace
10에서openpyxl가져오기load_workbook
11
12GAMS_MODEL ="""
13설정
14i '통조림 식물'
15j '시장';
16
17매개변수
18a(i) '경우에 따른 식물 i의 용량'
19b(j) '경우에 따라 시장 j의 수요'
20d(i,j) '거리(천 마일)';
21
22스칼라 f '1,000마일당 케이스당 운임(달러)' / 90 /;
23
24$if 설정되지 않음 gdxincname $abort '제공된 데이터 파일에 대한 포함 파일 이름 없음'
25$gdxIn %gdxincname%
26$load i j a b d
27$gdxIn
28
29매개변수 c(i,j) '케이스당 수천 달러의 운송 비용';
30c(i,j) = f*d(i,j)/1000;
31
32변수
33x(i,j) '케이스 내 배송 수량'
34z '총 운송 비용(수천 달러)';
35
36양수 변수 x;
37
38수식
39비용 '목적 함수 정의'
40supply(i) '공장 i의 공급 제한을 준수하세요'
41demand(j) '시장 j의 수요를 충족';
42
43비용.. z =e= sum((i,j), c(i,j)*x(i,j));
44
45공급(i).. 합계(j, x(i,j)) =l= a(i);
46
47수요(j).. 합계(i, x(i,j)) =g= b(j);
48
49모델 수송 /all/;
50
51z를 최소화하는 lp를 사용하여 전송을 해결합니다.
52
53x.l, x.m 표시;
54"""
55
56if__name__ =="__main__":
57sys_dir = sys.argv[1]iflen(sys.argv) > 1그밖에 없음
58work_dir = sys.argv[2]iflen(sys.argv) > 2그밖에 없음
59ws = GamsWorkspace(system_directory=sys_dir,working_directory=work_dir)
60
61wb = load_workbook(
62os.path.join(ws.system_directory,"api파일", "데이터", "transport.xlsx")
63 )
64용량 = wb["용량"]
65수요 = wb["수요"]
66거리 = wb["거리"]
67
68 #개의 시장/공장 수는 모든 스프레드시트에서 동일해야 합니다
69 if (
70distance.max_column - 1 != 수요.max_column
71 또는distance.max_row - 1 != 용량.max_row
72):
73 올림예외("스프레드시트의 크기가 일치하지 않습니다")
74
75db = ws.add_database()
76i = db.add_set("나", 1,"식물")
77j = db.add_set("j", 1,"시장")
78capacity_param = db.add_parameter_dc("a", [i],"용량")
79demand_param = db.add_parameter_dc("b", [j],"수요")
80distance_param = db.add_parameter_dc("d", [i, j],"거리")
81
82 forcincapacity.iter_cols():
83키 = c[0].값
84i.add_record(키)
85capacity_param.add_record(key).value = c[1].value
86
87 forcindemand.iter_cols():
88키 = c[0].값
89j.add_record(키)
90demand_param.add_record(key).value = c[1].value
91
92 forcin범위(2, distance.max_column + 1):
93 forr범위(2, distance.max_row + 1):
94키 = (
95거리.셀(행=r, 열=1).값,
96거리.셀(행=1, 열=c).값,
97 )
98v = distance.cell(행=r, 열=c).값
99distance_param.add_record(keys).value = v
100
101 # GamsJob 생성 및 실행
102작업 = ws.add_job_from_string(GAMS_MODEL)
103opt = ws.add_options()
104opt.defines["gdxincname"] = db.name
105opt.all_model_types ="익스프레스"
106job.run(opt, 데이터베이스=db)
107 forrecjob.out_db["x"]:
108인쇄(
109f"x(rec.key(0),rec.key(1)): 레벨=rec.level 한계=rec.marginal"
110 )