로드 중...
검색 중...
일치하는 항목 없음
transport14.py
이 파일의 문서로 이동하세요.
1
6
7가져오기sys
8from스레딩가져오기잠금, 스레드
9에서게임가져오기GamsWorkspace
10
11
12클래스최적화 프로그램():
13 def__init__(self, system_directory=없음, Working_directory=없음):
14self._ws = GamsWorkspace(
15system_directory=system_directory, Working_directory=working_directory
16 )
17
18 def해결(자체, bmult, 잠금):
19lock.acquire()
20db = self._ws.add_database()
21lock.release()
22f = db.add_parameter("f", 0,"1,000마일당 케이스당 화물(달러)")
23f.add_record().value = 90 * bmult
24작업 = self._ws.add_job_from_string(Optimizer.GAMS_MODEL)
25opt = self._ws.add_options()
26opt.defines["gdxincname"] = db.name
27job.run(opt, 데이터베이스=db)
28 반환job.out_db["z"].first_record().level
29
30GAMS_MODEL ="""
31설정
32i '통조림 공장' / 시애틀, 샌디에이고 /
33j 'markets' / 뉴욕, 시카고, 토피카 /;
34
35매개변수
36a(i) '경우에 따른 식물 i의 용량'
37/시애틀 350
38샌디에고 600 /
39
40b(j) '경우에 따라 시장 j의 수요'
41/ 뉴욕 325
42시카고 300
43토페카 275 /;
44
45테이블 d(i,j) '거리(천 마일)'
46뉴욕 시카고 토피카
47시애틀 2.5 1.7 1.8
48샌디에고 2.5 1.8 1.4;
49
50스칼라 f '1,000마일당 케이스당 달러 단위의 화물';
51
52$if 설정되지 않음 gdxincname $abort '제공된 데이터 파일에 대한 포함 파일 이름 없음'
53$gdxIn %gdxincname%
54$load f
55$gdxIn
56
57매개변수 c(i,j) '케이스당 수천 달러의 운송 비용';
58c(i,j) = f*d(i,j)/1000;
59
60변수
61x(i,j) '케이스의 배송 수량'
62z '총 운송 비용(수천 달러)';
63
64양수 변수 x;
65
66방정식
67비용 '목적 함수 정의'
68supply(i) '공장 i의 공급 제한을 준수하세요'
69demand(j) '시장 j의 수요를 충족';
70
71비용.. z =e= sum((i,j), c(i,j)*x(i,j));
72
73공급(i).. 합계(j, x(i,j)) =l= a(i);
74
75수요(j).. 합계(i, x(i,j)) =g= b(j);
76
77모델 수송 /all/;
78
79z를 최소화하는 lp를 사용하여 전송을 해결합니다.
80
81x.l, x.m 표시;
82"""
83
84
85if__name__ =="__main__":
86sys_dir = sys.argv[1]iflen(sys.argv) > 1그밖에 없음
87work_dir = sys.argv[2]iflen(sys.argv) > 2그밖에 없음
88최적화 = 최적화(sys_dir, work_dir)
89bmult_list = [0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3]
90잠금 = 잠금()
91
92 defrun_scenario(최적화 프로그램, bmult, 잠금):
93obj = Optimizer.solve(bmult, 잠금)
94lock.acquire()
95인쇄(f"시나리오 bmult=bmult, Obj:obj")
96lock.release()
97
98 forbmultinbmult_list:
99t = Thread(target=run_scenario, args=(최적화 프로그램, bmult, 잠금))
100t.start()