8from게임
가져오기GamsWorkspace, SolveLink
11$title 절단 스톡 - 열 생성 접근 방식(CUTSTOCK,SEQ=294)
14과제는 다양한 크기의 종이 제품을 잘라내는 것입니다.
15고객의 주문을 충족시키기 위한 대형 원시 종이 롤. 목표
16필요한 용지 롤 수를 최소화하는 것입니다.
19P. C. Gilmore 및 R. E. Gomory, 선형 프로그래밍 접근 방식
20재고 문제, 파트 I, Operations Research 9(1961), 849-859.
22P. C. Gilmore 및 R. E. Gomory, 선형 프로그래밍 접근 방식
23재고 문제, 파트 II, Operations Research 11(1963), 863-888.
25키워드: 혼합 정수 선형 계획법, 재고 절단, 열 생성,
36$if 설정되지 않음 gdxincname $abort '제공된 데이터 파일에 대한 포함 파일 이름 없음'
44p '가능한 패턴' / p1*p1000 /
47매개변수 aip(i,p) 'p에서 성장하는 패턴의 너비 i 수';
55xp.up(p) = 합계(i, d(i));
61numpat.. z =e= sum(pp, xp(pp));
63수요(i).. sum(pp, aip(i,pp)*xp(pp)) =g= d(i);
71y.up(i) = ceil(r/w(i));
77defobj.. z =e= 1 - 합계(i, 수요.m(i)*y(i));
79배낭.. sum(i, w(i)*y(i)) =l= r;
83* 초기화 - 초기 패턴은 단일 너비를 갖습니다.
84pp(p) = ord(p) <= 카드(i);
85aip(i,pp(p))$(ord(i) = ord(p)) = Floor(r/w(i));
89pi(p) = ord(p) = 카드(pp) + 1;
91옵션 optCr = 0, limRow = 0, limCol = 0, solPrint = off;
94z를 최소화하는 rmip를 사용하여 마스터를 해결합니다.
95mip 최소화 z를 사용하여 가격 책정 해결;
99* 발견된 마스터 모델을 개선할 수 있는 패턴
100aip(i,pi) = round(y.l(i));
104'롤 수의 하한값' 표시, master.objVal;
108z를 최소화하는 mip를 사용하여 마스터를 해결합니다.
112demrep '솔루션 수요 공급 보고서';
114patrep('# 생산됨',p) = round(xp.l(p));
115patrep(i,p)$patrep('# 생산됨',p) = aip(i,p);
116patrep(i,'전체') = 합계(p, patrep(i,p));
117patrep('생산된 수','총계') = sum(p, patrep('생산된 수',p));
119demrep(i,'생산됨') = sum(p, patrep(i,p)*patrep('# 생산됨',p));
120demrep(i,'수요') = d(i);
121demrep(i,'over') = demrep(i,'생산됨') - demrep(i,'수요');
125$if가 설정되지 않음 dbOut1 $abort '제공된 외부 데이터베이스 1 파일에 대한 파일 이름이 없음'
126execute_unload '%dbOut1%', patrep;
131 def__init__(슬롯 커뮤니티, system_directory, Working_directory):
132슬롯 커뮤니티_ws = GamsWorkspace(
133system_directory=system_directory, Working_directory=working_directory
135슬롯 커뮤니티opt = 슬롯 커뮤니티_ws.add_options()
136슬롯 커뮤니티_cutstock_data = 슬롯 커뮤니티_ws.add_database(in_model_name=
"gdxincname")
138슬롯 커뮤니티opt.solvelink = SolveLink.LoadLibrary
139슬롯 커뮤니티opt.defines[
"dbOut1"] =
"dbOut1"
141슬롯 커뮤니티widths = 슬롯 커뮤니티_cutstock_data.add_set(
"나", 1,
"너비")
142슬롯 커뮤니티raw_width = 슬롯 커뮤니티_cutstock_data.add_parameter(
"r", 0,
"원시 너비")
143슬롯 커뮤니티demand = 슬롯 커뮤니티_cutstock_data.add_parameter_dc(
"d", [슬롯 커뮤니티widths],
"수요")
144슬롯 커뮤니티width = 슬롯 커뮤니티_cutstock_data.add_parameter_dc(
"w", [슬롯 커뮤니티widths],
"너비")
146슬롯 커뮤니티_job = 슬롯 커뮤니티_ws.add_job_from_string(GAMS_MODEL)
152슬롯 커뮤니티_job.run(슬롯 커뮤니티opt, 출력=출력, 데이터베이스=슬롯 커뮤니티_cutstock_data)
153슬롯 커뮤니티_dbout = 슬롯 커뮤니티_ws.add_database_from_gdx(
154슬롯 커뮤니티opt.defines[
"dbOut1"] +
".gdx"
156슬롯 커뮤니티pat_rep = 슬롯 커뮤니티_dbout.get_parameter(
"패트렙")