로드 중...
검색 중...
일치하는 항목 없음
CutstockModel.m
1classdef CutstockModel < 핸들
2
3속성(SetAccess =비공개)
4너비
5raw_width
6수요
7
8pat_rep
9ws
10cutstock_data
11정보
12선택
13직업
14
15
16메소드
17
18함수 무료 슬롯 게임 = CutstockModel(ws)
19
20무료 슬롯 게임ws = ws;
21무료 슬롯 게임opt = ws.addOptions();
22
23무료 슬롯 게임cutstock_data = 무료 슬롯 게임ws.addDatabase('gdxincname');
24
25무료 슬롯 게임opt.defines('gdxincname', 'gdxincname');
26무료 슬롯 게임opt.defines('dbOut1', 'dbOut1');
27무료 슬롯 게임opt.solveLink = gams.control.options.SolveLink.LoadLibrary;
28
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);
33
34무료 슬롯 게임job = 무료 슬롯 게임ws.addJobFromString(무료 슬롯 게임modelSource());
35
36
37함수 실행(무료 슬롯 게임, 출력)
38if ~무료 슬롯 게임cutstock_data.checkDomains()
39error('컷스톡 데이터베이스의 도메인 오류');
40
41
42비어 있는 경우(출력)
43무료 슬롯 게임job.run(무료 슬롯 게임opt, false, 무료 슬롯 게임cutstock_data);
44그밖에
45무료 슬롯 게임job.run(무료 슬롯 게임opt, 출력, false, 무료 슬롯 게임cutstock_data);
46
47무료 슬롯 게임dbout = 무료 슬롯 게임ws.addDatabaseFromGDX([무료 슬롯 게임opt.getDefinitionOf('dbOut1'), '.gdx']);
48무료 슬롯 게임pat_rep = 무료 슬롯 게임dbout.getParameter('patrep');
49
50
51함수 모델 = modelSource(무료 슬롯 게임)
52모델 =
53 '$Title 절단 스톡 - 열 생성 접근 방식(CUTSTOCK,SEQ=294) '
54 ' '
55 '$ontext'
56 '과제는 '에서 다양한 크기의 종이 제품을 잘라내는 것입니다.
57 '고객을 만나기 위한 대형 원시 종이 롤'님의 명령입니다. 목표 '
58 '필요한 용지 롤 수를 최소화하는 것입니다. '
59 ' '
60 'P. C. Gilmore 및 R. E. Gomory, '에 대한 선형 프로그래밍 접근 방식
61 '재고 문제, 파트 I, Operations Research 9(1961), 849-859. '
62 ' '
63 'P. C. Gilmore 및 R. E. Gomory, '에 대한 선형 프로그래밍 접근 방식
64 '재고 문제, 파트 II, Operations Research 11(1963), 863-888. '
65 '$offtext '
66 ' '
67 'i 너비 설정'
68 '매개변수'
69 ' r 원시 너비 '
70 ' w(i) 너비 '
71 ' d(i) 수요; '
72 ' '
73 '$gdxincname $abort가 설정되지 않은 경우 ''제공된 데이터 파일에 대한 포함 파일 이름이 없습니다'''
74 '$gdxin %gdxincname% '
75 '$load r i w d '
76 '$gdxin '
77 ' '
78 '* 길모어-고모리 열 생성 알고리즘 '
79 ' '
80 'p개의 가능한 패턴 설정 /p1*p1000/ '
81 ' pp(p) p '의 동적 하위 집합
82 '매개변수'
83 ' aip(i,p) p에서 성장하는 패턴의 너비 i 수; '
84 ' '
85 '* 마스터 모델 '
86 '사용된 가변 xp(p) 패턴'
87 ' z 목적 변수 '
88 '정수 변수 xp; xp.up(p) = sum(i, d(i)); '
89 ' '
90 '사용된 패턴의 방정식 숫자 '
91 ' 수요(i) 수요를 충족합니다. '
92 ' '
93 'numpat.. z =e= sum(pp, xp(pp)); '
94 '수요(i).. sum(pp, aip(i,pp)*xp(pp)) =g= d(i); '
95 ' '
96 '모델 마스터 /numpat, 수요/; '
97 ' '
98 '* 가격 문제 - 배낭 모델 '
99 '변수 y(i) 새로운 패턴; '
100 '정수 변수 y; y.up(i) = ceil(r/w(i)); '
101 ' '
102 '방정식 defobj'
103 ' 배낭 배낭 제약; '
104 ' '
105 'defobj.. z =e= 1 - sum(i, 수요.m(i)*y(i)); '
106 '배낭.. sum(i, w(i)*y(i)) =l= r; '
107 ' '
108 '모델 가격 /defobj, 배낭/; '
109 ' '
110 '* 초기화 - 초기 패턴은 단일 너비를 갖습니다. '
111 'pp(p) = ord(p)<=카드(i); '
112 'aip(i,pp(p))$(ord(i)=ord(p)) = Floor(r/w(i)); '
113 '*디스플레이 aip; '
114 ' '
115 '스칼라 완료 루프 표시기 /0/ '
116 '마지막 패턴의 pi(p) 세트를 설정합니다; 파이(p) = ord(p)=카드(pp)+1; '
117 ' '
118 '옵션 optcr=0,limrow=0,limcol=0,solprint=off; '
119 ' '
120 '그동안(완료되지 않았고 카드(pp)<카드(p), '
121 ' z를 최소화하는 rmip를 사용하여 마스터를 해결합니다. '
122 ' z를 최소화하는 mip를 사용하여 가격 책정을 해결합니다. '
123 ' '
124 '* 마스터 모델을 개선할 수 있는 패턴을 찾았습니까? '
125 ' if(z.l < -0.001, '
126 ' aip(i,pi) = round(y.l(i)); '
127 ' pp(pi) = 예; 파이(p) = 파이(p-1); '
128 ' 그렇지 않으면 '
129 ' 완료 = 1; '
130 ' ); '
131 '); '
132 '디스플레이''롤 수의 하한값'', master.objval; '
133 ' '
134 '옵션 solprint=on; '
135 'z를 최소화하는 mip를 사용하여 마스터를 해결합니다. '
136 ' '
137 '매개변수 patrep 솔루션 패턴 보고서'
138 ' demrep 솔루션 수요 공급 보고서; '
139 ' '
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)); '
144 ' '
145 'demrep(i,''생산됨'') = 합계(p,patrep(i,p)*patrep(''# 생산됨'',p)); '
146 'demrep(i,''수요'') = d(i); '
147 'demrep(i,''끝'') = demrep(i,''생산됨'') - demrep(i,''수요''); '
148 ' '
149 '표시 patrep, demrep; '
150 '$dbOut1 $abort를 설정하지 않은 경우 ''제공된 데이터베이스 외부 1 파일에 대한 파일 이름이 없습니다'''
151 'execute_unload ''%dbOut1%'', 패트렙; '
152 ' '};
153모델 = 스프린트f('%s\n', 모델:);
154
155
156
157
158