로드 중...
검색 중...
일치하는 항목 없음
CutstockClass.cs
1사용 중시스템;
2사용 중System.Collections.Generic;
3사용 중System.Linq;
4사용 중시스템.텍스트;
5사용 중시스템.IO;
6사용 중메가 슬롯;
7
8네임스페이스컷스톡
9{
10 클래스컷스톡
11{
12#region 비공개 필드
13 비공개 GAMSSetf폭;
14 비공개 메가 슬롯매개변수fRawWidth;
15 비공개 메가 슬롯매개변수f수요;
16 비공개 메가 슬롯매개변수f폭;
17 비공개 메가 슬롯매개변수fPatRep;
18
19 비공개 메가 슬롯작업공간fws;
20 비공개 메가 슬롯데이터베이스fCutstockData, fDbOut;
21
22 비공개 메가 슬롯옵션fopt;
23
24 비공개 GAMSJob직업;
25#endregion
26
28{
29fws = ws;
30fopt = ws.추가옵션();
31
32fCutstockData = ws.데이터베이스 추가(모델 이름:"gdxincname");
33
34fopt.SolveLink =메가 슬롯옵션.ESolveLink.LoadLibrary;
35fopt.정의.추가("dbOut1", "dbOut1");
36
37fWidths = fCutstockData.AddSet("나", "너비");
38fRawWidth = fCutstockData.매개변수 추가("r", "원시 너비");
39fDemand = fCutstockData.매개변수 추가("d", "수요", fWidths);
40fWidth = fCutstockData.매개변수 추가("w", "너비", fWidths);
41
42직업 = ws.AddJobFromString(GetModelSource());
43}
44
45 공개 공허실행(TextWriter 출력 =)
46{
47 if(!fCutstockData.체크도메인())
48 던지다 신규 메가 슬롯예외("컷스톡 데이터베이스의 도메인 오류");
49직업.실행(fopt,, 출력,거짓, fCutstockData);
50fDbOut = fws.AddDatabaseFromGDX(fopt.정의["dbOut1"] +".gdx");
51fPatRep = fDbOut.GetParameter("패트렙");
52}
53
54#region 입력 기호
55 공개 GAMSSet너비
56{얻기{반환f폭;
57
58 공개 메가 슬롯매개변수원시 너비
59{얻기{반환f원시 너비;
60
61 공개 메가 슬롯매개변수수요
62{가져오기{반환f수요;
63
64 공개 메가 슬롯매개변수너비
65{얻기{반환f폭;
66#endregion
67
68#region 출력 기호
69 공개 메가 슬롯매개변수PatRep
70{얻기{반환fPatRep;
71#endregion
72
73 공개 메가 슬롯옵션선택
74{얻기{반환fopt;
75
76 공개 문자열GetModelSource()
77{
78 반환 @"
79$Title 절단 스톡 - 열 생성 접근 방식(CUTSTOCK,SEQ=294)
80
81$ontext
82과제는 다양한 크기의 종이 제품을 잘라내는 것입니다.
83고객의 주문을 충족시키기 위한 대형 원시 종이 롤. 목표
84필요한 용지 롤 수를 최소화하는 것입니다.
85
86
87P. C. Gilmore 및 R. E. Gomory, 선형 프로그래밍 접근 방식
88재고 문제, 파트 I, Operations Research 9(1961), 849-859.
89
90P. C. Gilmore 및 R. E. Gomory, 선형 프로그래밍 접근 방식
91재고 문제, 파트 II, Operations Research 11(1963), 863-888.
92$offtext
93
94i 너비 설정
95매개변수
96r 원시 너비
97w(i) 너비
98d(i) 수요 ;
99
100$if 설정되지 않음 gdxincname $abort '제공된 데이터 파일에 대한 포함 파일 이름 없음'
101$gdxin %gdxincname%
102$load r i w d
103$gdxin
104
105* 길모어-고모리 열 생성 알고리즘
106
107p개의 가능한 패턴 설정 /p1*p1000/
108pp(p) p의 동적 하위 집합
109매개변수
110aip(i,p) p에서 성장하는 패턴의 너비 i 수;
111
112
113* 마스터 모델
114변수 xp(p) 패턴이 사용됨
115z 목적변수
116정수 변수 xp; xp.up(p) = 합계(i, d(i));
117
118방정식 숫자 사용된 패턴 수
119수요(i) 수요를 충족함;
120
121numpat.. z =e= sum(pp, xp(pp));
122수요(i).. sum(pp, aip(i,pp)*xp(pp)) =g= d(i);
123
124모델 마스터 /numpat, 수요/;
125
126* 가격 문제 - 배낭 모델
127변수 y(i) 새로운 패턴;
128정수 변수 y; y.up(i) = ceil(r/w(i));
129
130수식 defobj
131배낭 배낭 제약조건;
132
133defobj.. z =e= 1 - 합계(i, 수요.m(i)*y(i));
134knapsack..sum(i, w(i)*y(i)) =l= r;
135
136모델 가격 /defobj, 배낭/;
137
138* 초기화 - 초기 패턴은 단일 너비를 갖습니다.
139pp(p) = ord(p)<=카드(i);
140aip(i,pp(p))$(ord(i)=ord(p)) = 바닥(r/w(i));
141*디스플레이 aip;
142
143스칼라 완료 루프 표시기 /0/
144마지막 패턴의 pi(p) 세트를 설정합니다; 파이(p) = ord(p)=카드(pp)+1;
145
146옵션 optcr=0,limrow=0,limcol=0,solprint=off;
147
148그동안(완료되지 않았고 카드(pp)<카드(p),
149z를 최소화하는 rmip를 사용하여 마스터를 해결합니다.
150mip 최소화 z를 사용하여 가격 책정 해결;
151
152* 마스터 모델을 개선할 수 있는 패턴이 발견되었습니까?
153if(z.l < -0.001,
154aip(i,pi) = round(y.l(i));
155pp(pi) = 예; 파이(p) = 파이(p-1);
156그밖에
157완료 = 1;
158);
159);
160'롤 수의 하한값' 표시, master.objval;
161
162옵션 solprint=on;
163z를 최소화하는 mip를 사용하여 마스터를 해결합니다.
164
165매개변수 patrep 솔루션 패턴 보고서
166demrep 솔루션 수요 공급 보고서;
167
168patrep('#생산됨',p) = round(xp.l(p));
169patrep(i,p)$patrep('# 생산됨',p) = aip(i,p);
170patrep(i,'전체') = 합계(p, patrep(i,p));
171patrep('생산된 수','총계') = sum(p, patrep('생산된 수',p));
172
173demrep(i,'생산됨') = sum(p,patrep(i,p)*patrep('# 생산됨',p));
174demrep(i,'수요') = d(i);
175demrep(i,'over') = demrep(i,'생산됨') - demrep(i,'수요');
176
177표시 patrep, demrep;
178
179$if가 설정되지 않음 dbOut1 $abort '제공된 외부 데이터베이스 1 파일에 대한 파일 이름이 없음'
180execute_unload '%dbOut1%', patrep;
181";
182}
183}
184}
GAMSSet AddSet(문자열 식별자, int 차원, 문자열 설명텍스트="", SetType setType=SetType.multi)
GAMSParameter GetParameter(문자열 매개변수 식별자)
GAMSParameter AddParameter(문자열 식별자, 정수 차원, 문자열 설명텍스트="")
void Run(GAMSOptions gamsOptions=null, GAMSCheckpoint 체크포인트=null, TextWriter 출력=null, Boolean createOutDB=true)
사전< 문자열, 문자열 > 정의
GAMSJob AddJobFromString(문자열 gamsSource, GAMSCheckpoint 체크포인트=null, 문자열 jobName=null)
GAMSDatabase AddDatabaseFromGDX(문자열 gdxFileName, 문자열 데이터베이스 이름=null, 문자열 inModelName=null)
GAMSDatabase AddDatabase(문자열 데이터베이스 이름=null, 문자열 inModelName=null)
GAMSOptions AddOptions(GAMSOptions optFrom=null)