1classdef CutstockModel < 핸들
18함수 무료 슬롯 게임 = CutstockModel(ws)
21무료 슬롯 게임opt = ws.addOptions();
23무료 슬롯 게임cutstock_data = 무료 슬롯 게임ws.addDatabase('gdxincname');
25무료 슬롯 게임opt.defines('gdxincname', 'gdxincname');
26무료 슬롯 게임opt.defines('dbOut1', 'dbOut1');
27무료 슬롯 게임opt.solveLink = gams.control.options.SolveLink.LoadLibrary;
29무료 슬롯 게임widths = 무료 슬롯 게임cutstock_data.addSet('i', 'widths');
30무료 슬롯 게임raw_width = 무료 슬롯 게임cutstock_data.addParameter('r', '원시 너비');
31무료 슬롯 게임demand = 무료 슬롯 게임cutstock_data.addParameter('d', '수요', 무료 슬롯 게임widths);
32무료 슬롯 게임width = 무료 슬롯 게임cutstock_data.addParameter('w', 'width', 무료 슬롯 게임widths);
34무료 슬롯 게임job = 무료 슬롯 게임ws.addJobFromString(무료 슬롯 게임modelSource());
38if ~무료 슬롯 게임cutstock_data.checkDomains()
39error('컷스톡 데이터베이스의 도메인 오류');
43무료 슬롯 게임job.run(무료 슬롯 게임opt, false, 무료 슬롯 게임cutstock_data);
45무료 슬롯 게임job.run(무료 슬롯 게임opt, 출력, false, 무료 슬롯 게임cutstock_data);
47무료 슬롯 게임dbout = 무료 슬롯 게임ws.addDatabaseFromGDX([무료 슬롯 게임opt.getDefinitionOf('dbOut1'), '.gdx']);
48무료 슬롯 게임pat_rep = 무료 슬롯 게임dbout.getParameter('patrep');
51함수 모델 = modelSource(무료 슬롯 게임)
53 '$Title 절단 스톡 - 열 생성 접근 방식(CUTSTOCK,SEQ=294) '
56 '과제는 '에서 다양한 크기의 종이 제품을 잘라내는 것입니다.
57 '고객을 만나기 위한 대형 원시 종이 롤'님의 명령입니다. 목표 '
58 '필요한 용지 롤 수를 최소화하는 것입니다. '
60 'P. C. Gilmore 및 R. E. Gomory, '에 대한 선형 프로그래밍 접근 방식
61 '재고 문제, 파트 I, Operations Research 9(1961), 849-859. '
63 'P. C. Gilmore 및 R. E. Gomory, '에 대한 선형 프로그래밍 접근 방식
64 '재고 문제, 파트 II, Operations Research 11(1963), 863-888. '
73 '$gdxincname $abort가 설정되지 않은 경우 ''제공된 데이터 파일에 대한 포함 파일 이름이 없습니다'''
74 '$gdxin %gdxincname% '
78 '* 길모어-고모리 열 생성 알고리즘 '
80 'p개의 가능한 패턴 설정 /p1*p1000/ '
83 ' aip(i,p) p에서 성장하는 패턴의 너비 i 수; '
88 '정수 변수 xp; xp.up(p) = sum(i, d(i)); '
93 'numpat.. z =e= sum(pp, xp(pp)); '
94 '수요(i).. sum(pp, aip(i,pp)*xp(pp)) =g= d(i); '
96 '모델 마스터 /numpat, 수요/; '
100 '정수 변수 y; y.up(i) = ceil(r/w(i)); '
105 'defobj.. z =e= 1 - sum(i, 수요.m(i)*y(i)); '
106 '배낭.. sum(i, w(i)*y(i)) =l= r; '
108 '모델 가격 /defobj, 배낭/; '
110 '* 초기화 - 초기 패턴은 단일 너비를 갖습니다. '
111 'pp(p) = ord(p)<=카드(i); '
112 'aip(i,pp(p))$(ord(i)=ord(p)) = Floor(r/w(i)); '
116 '마지막 패턴의 pi(p) 세트를 설정합니다; 파이(p) = ord(p)=카드(pp)+1; '
118 '옵션 optcr=0,limrow=0,limcol=0,solprint=off; '
120 '그동안(완료되지 않았고 카드(pp)<카드(p), '
121 ' z를 최소화하는 rmip를 사용하여 마스터를 해결합니다. '
122 ' z를 최소화하는 mip를 사용하여 가격 책정을 해결합니다. '
124 '* 마스터 모델을 개선할 수 있는 패턴을 찾았습니까? '
126 ' aip(i,pi) = round(y.l(i)); '
127 ' pp(pi) = 예; 파이(p) = 파이(p-1); '
132 '디스플레이''롤 수의 하한값'', master.objval; '
135 'z를 최소화하는 mip를 사용하여 마스터를 해결합니다. '
137 '매개변수 patrep 솔루션 패턴 보고서'
138 ' demrep 솔루션 수요 공급 보고서; '
140 '패트렙(''# 생산됨'',p) = round(xp.l(p)); '
141 'patrep(i,p)$patrep(''# 생산됨'',p) = aip(i,p); '
142 'patrep(i,''합계'') = 합계(p, patrep(i,p)); '
143 '패트렙(''# 생산됨'',''합계'') = 합계(p, 패트렙(''# 생산됨'',p)); '
145 'demrep(i,''생산됨'') = 합계(p,patrep(i,p)*patrep(''# 생산됨'',p)); '
146 'demrep(i,''수요'') = d(i); '
147 'demrep(i,''끝'') = demrep(i,''생산됨'') - demrep(i,''수요''); '
149 '표시 patrep, demrep; '
150 '$dbOut1 $abort를 설정하지 않은 경우 ''제공된 데이터베이스 외부 1 파일에 대한 파일 이름이 없습니다'''
151 'execute_unload ''%dbOut1%'', 패트렙; '
153모델 = 스프린트f(
'%s\n', 모델:);